lastobelus-merb_global 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. data/activerecord_generators/translations_migration/USAGE +4 -0
  2. data/activerecord_generators/translations_migration/templates/translations_migration.erb +30 -0
  3. data/activerecord_generators/translations_migration/translations_migration_generator.rb +31 -0
  4. data/examples/active_record_example/README.txt +9 -0
  5. data/examples/active_record_example/application.rb +5 -0
  6. data/examples/active_record_example/config/database.yml +9 -0
  7. data/examples/active_record_example/config/framework.rb +5 -0
  8. data/examples/active_record_example/config/init.rb +24 -0
  9. data/examples/active_record_example/config/plugins.yml +3 -0
  10. data/examples/data_mapper_example/README.txt +9 -0
  11. data/examples/data_mapper_example/application.rb +5 -0
  12. data/examples/data_mapper_example/config/database.yml +9 -0
  13. data/examples/data_mapper_example/config/framework.rb +5 -0
  14. data/examples/data_mapper_example/config/init.rb +24 -0
  15. data/examples/data_mapper_example/config/plugins.yml +3 -0
  16. data/examples/database.sql +28 -0
  17. data/examples/gettext_example/README.txt +9 -0
  18. data/examples/gettext_example/application.rb +8 -0
  19. data/examples/gettext_example/config/framework.rb +5 -0
  20. data/examples/gettext_example/config/init.rb +24 -0
  21. data/examples/gettext_example/config/plugins.yml +4 -0
  22. data/examples/gettext_example/locale/merbapp.pot +21 -0
  23. data/examples/gettext_example/locale/pl/LC_MESSAGES/merbapp.mo +0 -0
  24. data/examples/gettext_example/locale/pl.po +23 -0
  25. data/examples/mock_example/README.txt +9 -0
  26. data/examples/mock_example/application.rb +5 -0
  27. data/examples/mock_example/config/framework.rb +5 -0
  28. data/examples/mock_example/config/init.rb +23 -0
  29. data/examples/mock_example/config/plugins.yml +3 -0
  30. data/examples/sequel_example/README.txt +9 -0
  31. data/examples/sequel_example/application.rb +5 -0
  32. data/examples/sequel_example/config/database.yml +9 -0
  33. data/examples/sequel_example/config/framework.rb +5 -0
  34. data/examples/sequel_example/config/init.rb +24 -0
  35. data/examples/sequel_example/config/plugins.yml +3 -0
  36. data/examples/yaml_example/README.txt +9 -0
  37. data/examples/yaml_example/application.rb +5 -0
  38. data/examples/yaml_example/config/framework.rb +5 -0
  39. data/examples/yaml_example/config/init.rb +24 -0
  40. data/examples/yaml_example/config/plugins.yml +4 -0
  41. data/examples/yaml_example/locale/en.yaml +2 -0
  42. data/examples/yaml_example/locale/pl.yaml +2 -0
  43. data/lib/merb_global/base.rb +105 -0
  44. data/lib/merb_global/config.rb +36 -0
  45. data/lib/merb_global/controller.rb +38 -0
  46. data/lib/merb_global/date_providers/fork.rb +35 -0
  47. data/lib/merb_global/date_providers.rb +47 -0
  48. data/lib/merb_global/locale.rb +139 -0
  49. data/lib/merb_global/merbrake.rb +37 -0
  50. data/lib/merb_global/message_providers/active_record.rb +113 -0
  51. data/lib/merb_global/message_providers/data_mapper.rb +113 -0
  52. data/lib/merb_global/message_providers/gettext.rb +123 -0
  53. data/lib/merb_global/message_providers/gettext.treetop +60 -0
  54. data/lib/merb_global/message_providers/mock.rb +17 -0
  55. data/lib/merb_global/message_providers/sequel.rb +99 -0
  56. data/lib/merb_global/message_providers/yaml.rb +92 -0
  57. data/lib/merb_global/message_providers.rb +146 -0
  58. data/lib/merb_global/numeric_providers/fork.rb +35 -0
  59. data/lib/merb_global/numeric_providers/java.rb +15 -0
  60. data/lib/merb_global/numeric_providers.rb +48 -0
  61. data/lib/merb_global/plural.rb +20 -0
  62. data/lib/merb_global/plural.treetop +267 -0
  63. data/lib/merb_global/providers.rb +40 -0
  64. data/lib/merb_global.rb +8 -0
  65. data/sequel_generators/translations_migration/USAGE +4 -0
  66. data/sequel_generators/translations_migration/templates/translations_migration.erb +28 -0
  67. data/sequel_generators/translations_migration/translations_migration_generator.rb +32 -0
  68. metadata +92 -1
@@ -0,0 +1,4 @@
1
+ Description:
2
+
3
+
4
+ Usage:
@@ -0,0 +1,30 @@
1
+ #<% if false %>
2
+ class Merb::Global::MessageProviders::ActiveRecord
3
+ #<% end %>
4
+ class AddTranslationsMigration < ActiveRecord::Migration
5
+ def self.up
6
+ create_table :merb_global_languages do |t|
7
+ t.string :name, :limit => 16
8
+ t.integer :nplural
9
+ t.string :plural, :size => 128
10
+ end
11
+ add_index :merb_global_languages, :name, :unique => true
12
+ create_table :merb_global_translations,
13
+ :id => false, :primary_key => [:language_id,
14
+ :msgid_hash,
15
+ :msgstr_index] do |t|
16
+ t.integer :language_id, :null => false
17
+ t.text :msgid, :null => false
18
+ t.text :msgid_plural
19
+ t.text :msgstr, :null => false
20
+ t.integer :msgstr_index, :null => true
21
+ end
22
+ end
23
+ def self.down
24
+ drop_table :merb_global_languages
25
+ drop_table :merb_global_translations
26
+ end
27
+ end
28
+ #<% if false %>
29
+ end
30
+ #<% end %>
@@ -0,0 +1,31 @@
1
+ class TranslationMigrationGenerator < Merb::GeneratorBase
2
+ protected :banner
3
+
4
+ def initialize runtime_args, runtime_options = {}
5
+ runtime_args.push ''
6
+ super
7
+ @name = 'translations'
8
+ end
9
+
10
+ def mainfest
11
+ record do |m|
12
+ m.directory 'schema/migrations'
13
+ highest_migration = Dir[Dir.pwd+'/schema/migrations/*'].map do |f|
14
+ File.basename(f) =~ /^(\d+)/
15
+ $1
16
+ end.max
17
+ filename = format '%03d_%s', (highest_migration.to_i+1), @name.snake_case
18
+ m.template 'translation_migration.erb',
19
+ "schema/migrations/#{filename}.rb"
20
+ puts banner
21
+ end
22
+ end
23
+
24
+ def banner
25
+ <<-EOS
26
+ A migration to add translation tables to your database has been created.
27
+ Run 'rake sequel:db:migrate' to add the translations migration to your database.
28
+
29
+ EOS
30
+ end
31
+ end
@@ -0,0 +1,9 @@
1
+ Merb Flat
2
+ ==============
3
+
4
+ An example of a small Merb application. Uses a single views directory and one
5
+ controller file.
6
+
7
+ Start with
8
+
9
+ merb
@@ -0,0 +1,5 @@
1
+ class ActiveRecordExample < Merb::Controller
2
+ def index
3
+ _('Hi! Hello world!')
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ :development: &defaults
2
+ :adapter: sqlite3
3
+ :database: database.db
4
+
5
+ :test:
6
+ <<: *defaults
7
+
8
+ :production:
9
+ <<: *defaults
@@ -0,0 +1,5 @@
1
+ Merb::Config[:framework] = {
2
+ :application => 'application.rb',
3
+ :view => 'views',
4
+ :config => 'config'
5
+ }
@@ -0,0 +1,24 @@
1
+ # Load the merb_global from current tree
2
+ Gem.clear_paths
3
+ Gem.path.unshift((Pathname(__FILE__).dirname + '../../../pkg').expand_path)
4
+ $LOAD_PATH.unshift((Pathname(__FILE__).dirname + '../../../lib').expand_path)
5
+
6
+ Merb::Router.prepare do |r|
7
+ r.match('/').to(:controller => 'active_record_example', :action =>'index')
8
+ end
9
+
10
+ use_orm :activerecord
11
+ dependency 'merb_global'
12
+
13
+ Merb::Config.use { |c|
14
+ c[:environment] = 'production',
15
+ c[:framework] = {},
16
+ c[:log_level] = 'debug',
17
+ c[:use_mutex] = false,
18
+ c[:session_store] = 'cookie',
19
+ c[:session_id_key] = '_session_id',
20
+ c[:session_secret_key] = '779c710d6a7b90faf17cba97c156fc133a9884c9',
21
+ c[:exception_details] = true,
22
+ c[:reload_classes] = true,
23
+ c[:reload_time] = 0.5
24
+ }
@@ -0,0 +1,3 @@
1
+ :merb_global:
2
+ :message_provider: active_record
3
+ :locales: ['en', 'pl']
@@ -0,0 +1,9 @@
1
+ Merb Flat
2
+ ==============
3
+
4
+ An example of a small Merb application. Uses a single views directory and one
5
+ controller file.
6
+
7
+ Start with
8
+
9
+ merb
@@ -0,0 +1,5 @@
1
+ class DataMapperExample < Merb::Controller
2
+ def index
3
+ _('Hi! Hello world!')
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ :development: &defaults
2
+ :adapter: sqlite3
3
+ :database: database.db
4
+
5
+ :test:
6
+ <<: *defaults
7
+
8
+ :production:
9
+ <<: *defaults
@@ -0,0 +1,5 @@
1
+ Merb::Config[:framework] = {
2
+ :application => 'application.rb',
3
+ :view => 'views',
4
+ :config => 'config'
5
+ }
@@ -0,0 +1,24 @@
1
+ # Load the merb_global from current tree
2
+ Gem.clear_paths
3
+ Gem.path.unshift((Pathname(__FILE__).dirname + '../../../pkg').expand_path)
4
+ $LOAD_PATH.unshift((Pathname(__FILE__).dirname + '../../../lib').expand_path)
5
+
6
+ Merb::Router.prepare do |r|
7
+ r.match('/').to(:controller => 'data_mapper_example', :action =>'index')
8
+ end
9
+
10
+ use_orm :datamapper
11
+ dependency 'merb_global'
12
+
13
+ Merb::Config.use { |c|
14
+ c[:environment] = 'production',
15
+ c[:framework] = {},
16
+ c[:log_level] = 'debug',
17
+ c[:use_mutex] = false,
18
+ c[:session_store] = 'cookie',
19
+ c[:session_id_key] = '_session_id',
20
+ c[:session_secret_key] = '5b587281e1b277c3e90f5de2e42e5125dc649837',
21
+ c[:exception_details] = true,
22
+ c[:reload_classes] = true,
23
+ c[:reload_time] = 0.5
24
+ }
@@ -0,0 +1,3 @@
1
+ :merb_global:
2
+ :message_provider: data_mapper
3
+ :locales: ['en', 'pl']
@@ -0,0 +1,28 @@
1
+ DROP TABLE IF EXISTS merb_global_languages;
2
+ CREATE TABLE merb_global_languages (
3
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
4
+ name VARCHAR(50),
5
+ nplural INTEGER,
6
+ plural TEXT
7
+ );
8
+
9
+ DROP TABLE IF EXISTS merb_global_translations;
10
+ CREATE TABLE merb_global_translations (
11
+ language_id INTEGER NOT NULL,
12
+ msgid TEXT NOT NULL,
13
+ msgid_plural TEXT,
14
+ msgstr TEXT NOT NULL,
15
+ msgstr_index INTEGER,
16
+ PRIMARY KEY(language_id, msgid, msgstr_index));
17
+
18
+
19
+ CREATE UNIQUE INDEX unique_index_merb_global_languages_name
20
+ ON merb_global_languages (name);
21
+
22
+ INSERT INTO merb_global_languages (name, nplural, plural)
23
+ VALUES ("pl", 3, "(n==1?0:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?1:2)");
24
+
25
+ INSERT INTO merb_global_translations (language_id, msgid, msgstr)
26
+ SELECT id, "Hi! Hello world!", "Cześć. Witaj świecie!"
27
+ FROM merb_global_languages
28
+ WHERE name = "pl";
@@ -0,0 +1,9 @@
1
+ Merb Flat
2
+ ==============
3
+
4
+ An example of a small Merb application. Uses a single views directory and one
5
+ controller file.
6
+
7
+ Start with
8
+
9
+ merb
@@ -0,0 +1,8 @@
1
+ class GettextExample < Merb::Controller
2
+ language do
3
+ 'pl' # It'll be always in Polish
4
+ end
5
+ def index
6
+ _('Hi! Hello world!')
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ Merb::Config[:framework] = {
2
+ :application => 'application.rb',
3
+ :view => 'views',
4
+ :config => 'config'
5
+ }
@@ -0,0 +1,24 @@
1
+ # Load the merb_global from current tree
2
+ Gem.clear_paths
3
+ Gem.path.unshift((Pathname(__FILE__).dirname + '../../../pkg').expand_path)
4
+ $LOAD_PATH.unshift((Pathname(__FILE__).dirname + '../../../lib').expand_path)
5
+
6
+ Merb::Router.prepare do |r|
7
+ r.match('/').to(:controller => 'gettext_example', :action =>'index')
8
+ r.default_routes
9
+ end
10
+
11
+ dependency 'merb_global'
12
+
13
+ Merb::Config.use { |c|
14
+ c[:environment] = 'production',
15
+ c[:framework] = {},
16
+ c[:log_level] = 'debug',
17
+ c[:use_mutex] = false,
18
+ c[:session_store] = 'cookie',
19
+ c[:session_id_key] = '_session_id',
20
+ c[:session_secret_key] = '489739417a2edcb2ae6ec7390fc467992e313ed8',
21
+ c[:exception_details] = true,
22
+ c[:reload_classes] = true,
23
+ c[:reload_time] = 0.5
24
+ }
@@ -0,0 +1,4 @@
1
+ :merb_global:
2
+ :message_provider: gettext
3
+ :flat: true
4
+ :locales: ['en', 'pl']
@@ -0,0 +1,21 @@
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the PACKAGE package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+ #
6
+ #, fuzzy
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: PACKAGE VERSION\n"
10
+ "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2008-05-22 13:59+0200\n"
12
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
+ "Language-Team: LANGUAGE <LL@li.org>\n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=CHARSET\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+
19
+ #: gettext_example.rb:21
20
+ msgid "Hi! Hello world!"
21
+ msgstr ""
@@ -0,0 +1,23 @@
1
+ # Polish translations for PACKAGE package
2
+ # Polskie tłumaczenia dla pakietu PACKAGE.
3
+ # Copyright (C) 2008 THE PACKAGE'S COPYRIGHT HOLDER
4
+ # This file is distributed under the same license as the PACKAGE package.
5
+ # <uzytkownik2@gmail.com>, 2008.
6
+ #
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: PACKAGE VERSION\n"
10
+ "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2008-05-22 13:59+0200\n"
12
+ "PO-Revision-Date: 2008-05-22 21:42+0100\n"
13
+ "Last-Translator: Maciej Piechotka <uzytkownik2@gmail.com>\n"
14
+ "Language-Team: Polish\n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=UTF-8\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+ "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
19
+
20
+ #: gettext_example.rb:21
21
+ msgid "Hi! Hello world!"
22
+ msgstr "Cześć. Witaj świecie!"
23
+
@@ -0,0 +1,9 @@
1
+ Merb Flat
2
+ ==============
3
+
4
+ An example of a small Merb application. Uses a single views directory and one
5
+ controller file.
6
+
7
+ Start with
8
+
9
+ merb
@@ -0,0 +1,5 @@
1
+ class MockExample < Merb::Controller
2
+ def index
3
+ _('Hi! Hello world!')
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ Merb::Config[:framework] = {
2
+ :application => 'application.rb',
3
+ :view => 'views',
4
+ :config => 'config'
5
+ }
@@ -0,0 +1,23 @@
1
+ Gem.clear_paths
2
+ Gem.path.unshift((Pathname(__FILE__).dirname + '../../../pkg').expand_path)
3
+ $LOAD_PATH.unshift((Pathname(__FILE__).dirname + '../../../lib').expand_path)
4
+
5
+ Merb::Router.prepare do |r|
6
+ r.match('/').to(:controller => 'mock_example', :action =>'index')
7
+ r.default_routes
8
+ end
9
+
10
+ dependency 'merb_global'
11
+
12
+ Merb::Config.use { |c|
13
+ c[:environment] = 'production',
14
+ c[:framework] = {},
15
+ c[:log_level] = 'debug',
16
+ c[:use_mutex] = false,
17
+ c[:session_store] = 'cookie',
18
+ c[:session_id_key] = '_session_id',
19
+ c[:session_secret_key] = 'd729662a1de4755ac16f34d1bb012fe5c9e6a965',
20
+ c[:exception_details] = true,
21
+ c[:reload_classes] = true,
22
+ c[:reload_time] = 0.5
23
+ }
@@ -0,0 +1,3 @@
1
+ :merb_global:
2
+ :message_provider: mock
3
+ :locales: ['en', 'pl']
@@ -0,0 +1,9 @@
1
+ Merb Flat
2
+ ==============
3
+
4
+ An example of a small Merb application. Uses a single views directory and one
5
+ controller file.
6
+
7
+ Start with
8
+
9
+ merb
@@ -0,0 +1,5 @@
1
+ class GettextExample < Merb::Controller
2
+ def index
3
+ _('Hi! Hello world!')
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ :development: &defaults
2
+ :adapter: sqlite
3
+ :database: database.db
4
+
5
+ :test:
6
+ <<: *defaults
7
+
8
+ :production:
9
+ <<: *defaults
@@ -0,0 +1,5 @@
1
+ Merb::Config[:framework] = {
2
+ :application => 'application.rb',
3
+ :view => 'views',
4
+ :config => 'config'
5
+ }
@@ -0,0 +1,24 @@
1
+ # Load the merb_global from current tree
2
+ Gem.clear_paths
3
+ Gem.path.unshift((Pathname(__FILE__).dirname + '../../../pkg').expand_path)
4
+ $LOAD_PATH.unshift((Pathname(__FILE__).dirname + '../../../lib').expand_path)
5
+
6
+ Merb::Router.prepare do |r|
7
+ r.match('/').to(:controller => 'gettext_example', :action =>'index')
8
+ end
9
+
10
+ use_orm :sequel
11
+ dependency 'merb_global'
12
+
13
+ Merb::Config.use { |c|
14
+ c[:environment] = 'production',
15
+ c[:framework] = {},
16
+ c[:log_level] = 'debug',
17
+ c[:use_mutex] = false,
18
+ c[:session_store] = 'cookie',
19
+ c[:session_id_key] = '_session_id',
20
+ c[:session_secret_key] = 'dd578852e40789695203305439f3ee2cf77b0cfc',
21
+ c[:exception_details] = true,
22
+ c[:reload_classes] = true,
23
+ c[:reload_time] = 0.5
24
+ }
@@ -0,0 +1,3 @@
1
+ :merb_global:
2
+ :message_provider: sequel
3
+ :locales: ['en', 'pl']
@@ -0,0 +1,9 @@
1
+ Merb Flat
2
+ ==============
3
+
4
+ An example of a small Merb application. Uses a single views directory and one
5
+ controller file.
6
+
7
+ Start with
8
+
9
+ merb
@@ -0,0 +1,5 @@
1
+ class YamlExample < Merb::Controller
2
+ def index
3
+ _('Hi! Hello world!')
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ Merb::Config[:framework] = {
2
+ :application => 'application.rb',
3
+ :view => 'views',
4
+ :config => 'config'
5
+ }
@@ -0,0 +1,24 @@
1
+ # Load the merb_global from current tree
2
+ Gem.clear_paths
3
+ Gem.path.unshift((Pathname(__FILE__).dirname + '../../../pkg').expand_path)
4
+ $LOAD_PATH.unshift((Pathname(__FILE__).dirname + '../../../lib').expand_path)
5
+
6
+ Merb::Router.prepare do |r|
7
+ r.match('/').to(:controller => 'yaml_example', :action =>'index')
8
+ r.default_routes
9
+ end
10
+
11
+ dependency 'merb_global'
12
+
13
+ Merb::Config.use { |c|
14
+ c[:environment] = 'production',
15
+ c[:framework] = {},
16
+ c[:log_level] = 'debug',
17
+ c[:use_mutex] = false,
18
+ c[:session_store] = 'cookie',
19
+ c[:session_id_key] = '_session_id',
20
+ c[:session_secret_key] = 'ceb534866f8bb368f8e935b31604e45b818c6dd4',
21
+ c[:exception_details] = true,
22
+ c[:reload_classes] = true,
23
+ c[:reload_time] = 0.5
24
+ }
@@ -0,0 +1,4 @@
1
+ :merb_global:
2
+ :message_provider: yaml
3
+ :flat: true
4
+ :locales: [en, pl]
@@ -0,0 +1,2 @@
1
+ :plural: "n==1 ? 0 : 1"
2
+ "Hi! Hello world!": "Hi! Hello world!"
@@ -0,0 +1,2 @@
1
+ :plural: "(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)"
2
+ "Hi! Hello world!": "Cześć. Witaj świecie!"
@@ -0,0 +1,105 @@
1
+ require 'merb_global/config'
2
+ require 'merb_global/plural'
3
+ require 'merb_global/locale'
4
+ require 'merb_global/date_providers'
5
+ require 'merb_global/message_providers'
6
+ require 'merb_global/numeric_providers'
7
+
8
+ class String
9
+ def localize(args = {})
10
+ opts = {:locale => Merb::Global::Locale.current, :n => 1, :plural => nil}
11
+ opts.merge!(args)
12
+ Merb::Global::MessageProviders.provider.localize self, opts[:plural],
13
+ opts[:n], opts[:locale]
14
+ end
15
+ end
16
+
17
+ class Numeric
18
+ def localize(args = {})
19
+ opts = {:locale => Merb::Global::Locale.current}
20
+ opts.merge!(args)
21
+ Merb::Global::NumericProviders.provider.localize opts[:locale], self
22
+ end
23
+ end
24
+
25
+ class Date
26
+ def localize(format, args = {})
27
+ opts = {:locale => Merb::Global::Locale.current}
28
+ opts.merge!(args)
29
+ Merb::Global::DateProviders.provider.localize opts[:locale], self, format
30
+ end
31
+ end
32
+
33
+ class DateTime
34
+ def localize(format, args = {})
35
+ opts = {:locale => Merb::Global::Locale.current}
36
+ opts.merge!(args)
37
+ Merb::Global::DateProviders.provider.localize opts[:locale], self, format
38
+ end
39
+ end
40
+
41
+ class Time
42
+ def localize(format, args = {})
43
+ opts = {:locale => Merb::Global::Locale.current}
44
+ opts.merge!(args)
45
+ Merb::Global::DateProviders.provider.localize opts[:locale], self, format
46
+ end
47
+ end
48
+
49
+ module Merb
50
+ module Global
51
+ # call-seq:
52
+ # _(singular, opts) => translated message
53
+ # _(singlular, plural, opts) => translated message
54
+ # _(date, format) => localized date
55
+ # _(number) => localized number
56
+ #
57
+ # Translate a string.
58
+ # ==== Parameters
59
+ # singular<String>:: A string to translate
60
+ # plural<String>:: A plural form of string
61
+ # opts<Hash>:: An options hash (see below)
62
+ # date<~strftime>:: A date to localize
63
+ # format<String>:: A format of string (should be compatibile with strftime)
64
+ # number<Numeric>:: A numeber to localize
65
+ #
66
+ # ==== Options (opts)
67
+ # :locale<Locale>:: A language to translate on
68
+ # :n<Fixnum>:: A number of objects (for messages)
69
+ #
70
+ # ==== Returns
71
+ # translated<String>:: A translated string
72
+ #
73
+ # ==== Example
74
+ # <tt>render _('%d file deleted', '%d files deleted', :n => del) % del</tt>
75
+ def _(*args)
76
+ opts = {:locale => Merb::Global::Locale.current, :n => 1}
77
+ opts.merge! args.pop if args.last.is_a? Hash
78
+ if args.first.respond_to? :strftime
79
+ if args.size == 2
80
+ Merb::Global::DateProviders.provider.localize opts[:locale], args[0], args[1]
81
+ else
82
+ raise ArgumentError, "wrong number of arguments (#{args.size} for 2)"
83
+ end
84
+ elsif args.first.is_a? Numeric
85
+ if args.size == 1
86
+ Merb::Global::NumericProviders.provider.localize opts[:locale], args.first
87
+ else
88
+ raise ArgumentError, "wrong number of arguments (#{args.size} for 1)"
89
+ end
90
+ elsif args.first.is_a? String
91
+ if args.size == 1
92
+ Merb::Global::MessageProviders.provider.localize args[0], nil, opts[:n], opts[:locale]
93
+ elsif args.size == 2
94
+ Merb::Global::MessageProviders.provider.localize args[0], args[1], opts[:n], opts[:locale]
95
+ else
96
+ raise ArgumentError,
97
+ "wrong number of arguments (#{args.size} for 1-2)"
98
+ end
99
+ else
100
+ raise ArgumentError,
101
+ "wrong type of arguments - see documentation for details"
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,36 @@
1
+ module Merb
2
+ module Global
3
+ @@config = nil
4
+ # call-seq:
5
+ # config(key) => value
6
+ # config([key1, key2, ...]) => value
7
+ # config(key, default) => value
8
+ # config([key1, key2, ...], default) => value
9
+ #
10
+ # Lookup the configuration
11
+ # ==== Params
12
+ # key<Symbol>:: A key
13
+ # keys<Array[Symbol]>:: Keys
14
+ # default<Object>:: A default value
15
+ #
16
+ # ==== Returns
17
+ # value<Object>:: Object read from configuration or default
18
+ #
19
+ # ==== Examples
20
+ # <tt>Merb::Global.config [:gettext, :domain], 'merbapp'</tt>
21
+ def self.config(keys, default = nil)
22
+ keys = [keys] unless keys.is_a? Array
23
+ #if @@config.nil?
24
+ @@config = Merb::Plugins.config[:merb_global].dup
25
+ unless Merb::Plugins.config[:merb_global][Merb.env].nil?
26
+ @@config.merge! Merb::Plugins.config[:merb_global][Merb.env]
27
+ end
28
+ #end
29
+ current = @@config
30
+ while current.respond_to?(:[]) and not keys.empty?
31
+ current = current[keys.shift]
32
+ end
33
+ (keys.empty? and not current.nil?) ? current : default
34
+ end
35
+ end
36
+ end