merb_global 0.0.4.2 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/HISTORY +6 -0
- data/Rakefile +14 -1
- data/activerecord_generators/translations_migration/templates/translations_migration.erb +1 -1
- data/lib/merb_global/base.rb +45 -14
- data/lib/merb_global/controller.rb +20 -5
- data/lib/merb_global/date_providers/fork.rb +35 -0
- data/lib/merb_global/date_providers.rb +47 -0
- data/lib/merb_global/merbrake.rb +10 -10
- data/lib/merb_global/{providers → message_providers}/active_record.rb +43 -36
- data/lib/merb_global/{providers → message_providers}/data_mapper.rb +44 -46
- data/lib/merb_global/message_providers/gettext.rb +138 -0
- data/lib/merb_global/message_providers/gettext.treetop +60 -0
- data/lib/merb_global/{providers → message_providers}/mock.rb +4 -4
- data/lib/merb_global/message_providers/sequel.rb +105 -0
- data/lib/merb_global/message_providers/yaml.rb +101 -0
- data/lib/merb_global/message_providers.rb +175 -0
- data/lib/merb_global/numeric_providers/fork.rb +35 -0
- data/lib/merb_global/numeric_providers.rb +48 -0
- data/lib/merb_global/providers.rb +32 -44
- data/sequel_generators/translations_migration/templates/translations_migration.erb +1 -1
- metadata +21 -14
- data/lib/merb_global/provider.rb +0 -73
- data/lib/merb_global/providers/gettext.rb +0 -90
- data/lib/merb_global/providers/gettext.treetop +0 -74
- data/lib/merb_global/providers/sequel.rb +0 -100
- data/lib/merb_global/providers/yaml.rb +0 -114
- data/lib/merb_global/transfer.rb +0 -79
data/HISTORY
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
=== 0.0.5
|
2
|
+
* Handles lang_REGION as lang
|
3
|
+
* Renamed providers into message providers and translate_to into localize
|
4
|
+
* Added support for localization of dates and numbers
|
5
|
+
* Updated specs
|
6
|
+
|
1
7
|
=== 0.0.4
|
2
8
|
* Changed database format (to allow importing/exporting)
|
3
9
|
* Added importing/exporting (EXPERIMENTAL)
|
data/Rakefile
CHANGED
@@ -2,10 +2,11 @@ require 'rubygems'
|
|
2
2
|
require 'rake/gempackagetask'
|
3
3
|
require 'rake/rdoctask'
|
4
4
|
require 'spec/rake/spectask'
|
5
|
+
require 'fileutils'
|
5
6
|
|
6
7
|
PLUGIN = "merb_global"
|
7
8
|
NAME = "merb_global"
|
8
|
-
GEM_VERSION = "0.0.
|
9
|
+
GEM_VERSION = "0.0.5"
|
9
10
|
AUTHORS = ["Alex Coles", "Maciej Piechotka"]
|
10
11
|
EMAIL = "alex@alexcolesportfolio.com"
|
11
12
|
HOMEPAGE = "http://trac.ikonoklastik.com/merb_global/"
|
@@ -20,6 +21,7 @@ spec = Gem::Specification.new do |s|
|
|
20
21
|
s.authors = AUTHORS
|
21
22
|
s.email = EMAIL
|
22
23
|
s.homepage = HOMEPAGE
|
24
|
+
s.rubyforge_project = 'merb-global'
|
23
25
|
s.add_dependency('merb-core', '>= 0.9.1')
|
24
26
|
s.add_dependency('treetop', '>= 1.2.3') # Tested on 1.2.3
|
25
27
|
s.require_path = 'lib'
|
@@ -50,6 +52,17 @@ Rake::RDocTask.new do |rd|
|
|
50
52
|
rd.rdoc_files.include "lib/**/*.rb"
|
51
53
|
end
|
52
54
|
|
55
|
+
desc "Creates database for examples"
|
56
|
+
task :populate_db do
|
57
|
+
pwd = File.dirname __FILE__
|
58
|
+
db = "#{pwd}/examples/database.db"
|
59
|
+
sh %{sqlite3 #{db} < #{pwd}/examples/database.sql}
|
60
|
+
FileUtils.cp db, "#{pwd}/examples/active_record_example/database.db"
|
61
|
+
FileUtils.cp db, "#{pwd}/examples/data_mapper_example/database.db"
|
62
|
+
FileUtils.cp db, "#{pwd}/examples/sequel_example/database.db"
|
63
|
+
end
|
64
|
+
task :gem => :populate_db
|
65
|
+
|
53
66
|
desc "Run all specs"
|
54
67
|
Spec::Rake::SpecTask.new('specs') do |st|
|
55
68
|
st.libs = ['lib', 'spec']
|
data/lib/merb_global/base.rb
CHANGED
@@ -1,34 +1,47 @@
|
|
1
1
|
require 'merb_global/config'
|
2
2
|
require 'merb_global/plural'
|
3
|
-
require 'merb_global/
|
4
|
-
require 'merb_global/
|
5
|
-
require 'merb_global/
|
3
|
+
require 'merb_global/date_providers'
|
4
|
+
require 'merb_global/message_providers'
|
5
|
+
require 'merb_global/numeric_providers'
|
6
6
|
|
7
7
|
module Merb
|
8
8
|
module Global
|
9
|
-
attr_accessor :lang, :
|
9
|
+
attr_accessor :lang, :message_provider, :date_provider, :numeric_provider
|
10
10
|
|
11
11
|
def lang #:nodoc:
|
12
12
|
@lang ||= 'en'
|
13
13
|
end
|
14
14
|
|
15
|
-
def
|
16
|
-
@
|
15
|
+
def message_provider #:nodoc:
|
16
|
+
@message_provider ||= Merb::Global::MessageProviders.provider
|
17
|
+
end
|
18
|
+
|
19
|
+
def date_provider #:nodoc:
|
20
|
+
@date_provider ||= Merb::Global::DateProviders.provider
|
21
|
+
end
|
22
|
+
|
23
|
+
def numeric_provider #:nodoc:
|
24
|
+
@numeric_provider ||= Merb::Global::NumericProviders.provider
|
17
25
|
end
|
18
26
|
|
19
27
|
# call-seq:
|
20
|
-
# _(singular, opts) => translated
|
21
|
-
# _(singlular, plural, opts) => translated
|
28
|
+
# _(singular, opts) => translated message
|
29
|
+
# _(singlular, plural, opts) => translated message
|
30
|
+
# _(date, format) => localized date
|
31
|
+
# _(number) => localized number
|
22
32
|
#
|
23
33
|
# Translate a string.
|
24
34
|
# ==== Parameters
|
25
35
|
# singular<String>:: A string to translate
|
26
36
|
# plural<String>:: A plural form of string
|
27
37
|
# opts<Hash>:: An options hash (see below)
|
38
|
+
# date<~strftime>:: A date to localize
|
39
|
+
# format<String>:: A format of string (should be compatibile with strftime)
|
40
|
+
# number<Numeric>:: A numeber to localize
|
28
41
|
#
|
29
42
|
# ==== Options (opts)
|
30
43
|
# :lang<String>:: A language to translate on
|
31
|
-
# :n<Fixnum>:: A number of objects
|
44
|
+
# :n<Fixnum>:: A number of objects (for messages)
|
32
45
|
#
|
33
46
|
# ==== Returns
|
34
47
|
# translated<String>:: A translated string
|
@@ -38,12 +51,30 @@ module Merb
|
|
38
51
|
def _(*args)
|
39
52
|
opts = {:lang => self.lang, :n => 1}
|
40
53
|
opts.merge! args.pop if args.last.is_a? Hash
|
41
|
-
if args.
|
42
|
-
|
43
|
-
|
44
|
-
|
54
|
+
if args.first.respond_to? :strftime
|
55
|
+
if args.size == 2
|
56
|
+
self.date_provider.localize opts[:lang], args[0], args[1]
|
57
|
+
else
|
58
|
+
raise ArgumentError, "wrong number of arguments (#{args.size} for 2)"
|
59
|
+
end
|
60
|
+
elsif args.first.is_a? Numeric
|
61
|
+
if args.size == 1
|
62
|
+
self.numeric_provider.localize opts[:lang], args.first
|
63
|
+
else
|
64
|
+
raise ArgumentError, "wrong number of arguments (#{args.size} for 1)"
|
65
|
+
end
|
66
|
+
elsif args.first.is_a? String
|
67
|
+
if args.size == 1
|
68
|
+
self.message_provider.localize args[0], nil, opts
|
69
|
+
elsif args.size == 2
|
70
|
+
self.message_provider.localize args[0], args[1], opts
|
71
|
+
else
|
72
|
+
raise ArgumentError,
|
73
|
+
"wrong number of arguments (#{args.size} for 1-2)"
|
74
|
+
end
|
45
75
|
else
|
46
|
-
raise ArgumentError,
|
76
|
+
raise ArgumentError,
|
77
|
+
"wrong type of arguments - see documentation for details"
|
47
78
|
end
|
48
79
|
end
|
49
80
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'merb_global/base'
|
2
2
|
|
3
3
|
module Merb
|
4
|
-
class Controller
|
4
|
+
class Controller
|
5
5
|
include Merb::Global
|
6
6
|
class_inheritable_accessor :_language
|
7
7
|
|
@@ -9,7 +9,7 @@ module Merb
|
|
9
9
|
# Set up the language
|
10
10
|
accept_language = self.request.env['HTTP_ACCEPT_LANGUAGE']
|
11
11
|
self.lang = params[:language] ||
|
12
|
-
(self._language && self._language
|
12
|
+
(self._language && self.instance_eval(&self._language)) ||
|
13
13
|
begin
|
14
14
|
unless accept_language.nil?
|
15
15
|
accept_language = accept_language.split(',')
|
@@ -25,15 +25,30 @@ module Merb
|
|
25
25
|
end
|
26
26
|
accept_language.sort! {|lang_a, lang_b| lang_a[1] <=> lang_b[1]}
|
27
27
|
accept_language.collect! {|lang| lang[0]}
|
28
|
-
accept_language.
|
29
|
-
|
28
|
+
accept_language_orig = accept_language.dup
|
29
|
+
accept_language.collect! do |lang|
|
30
|
+
if lang == '*'
|
31
|
+
'*'
|
32
|
+
elsif self.message_provider.support? lang
|
33
|
+
lang
|
34
|
+
elsif lang.include? '-'
|
35
|
+
lang = lang.split('-')[0]
|
36
|
+
if self.message_provider.support? lang
|
37
|
+
lang
|
38
|
+
else
|
39
|
+
nil
|
40
|
+
end
|
41
|
+
else
|
42
|
+
nil
|
43
|
+
end
|
30
44
|
end
|
45
|
+
accept_language.reject! {|lang| lang.nil?}
|
31
46
|
unless accept_language.empty?
|
32
47
|
unless accept_language.last == '*'
|
33
48
|
accept_language.last
|
34
49
|
else
|
35
50
|
accept_language.pop
|
36
|
-
self.
|
51
|
+
self.message_provider.choose accept_language
|
37
52
|
end
|
38
53
|
end
|
39
54
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'inline'
|
2
|
+
|
3
|
+
module Merb
|
4
|
+
module Global
|
5
|
+
module DateProviders
|
6
|
+
class Fork
|
7
|
+
include Merb::Global::DateProviders::Base
|
8
|
+
|
9
|
+
def localize(lang, date, format)
|
10
|
+
pipe_rd, pipe_wr = IO.pipe
|
11
|
+
pid = fork do
|
12
|
+
pipe_rd.close
|
13
|
+
setlocale(lang)
|
14
|
+
pipe_wr.write(date.strftime(format))
|
15
|
+
pipe_wr.flush
|
16
|
+
end
|
17
|
+
pipe_wr.close
|
18
|
+
Process.wait(pid)
|
19
|
+
pipe_rd.read
|
20
|
+
end
|
21
|
+
|
22
|
+
inline do |builder|
|
23
|
+
builder.include '<locale.h>'
|
24
|
+
builder.c <<C
|
25
|
+
void set_locale(const char *locale)
|
26
|
+
{
|
27
|
+
setlocale(LC_ALL, locale);
|
28
|
+
}
|
29
|
+
C
|
30
|
+
end
|
31
|
+
private :set_locale
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'merb_global/providers'
|
2
|
+
|
3
|
+
module Merb
|
4
|
+
module Global
|
5
|
+
module DateProviders
|
6
|
+
include Providers
|
7
|
+
# call-seq:
|
8
|
+
# provider => provider
|
9
|
+
#
|
10
|
+
# Returns the provider of required type
|
11
|
+
#
|
12
|
+
# ==== Returns
|
13
|
+
# provider<Provider>:: Returns provider
|
14
|
+
def self.provider
|
15
|
+
@@provider ||= self[Merb::Global.config(:date_provider, 'fork')]
|
16
|
+
end
|
17
|
+
# Merb-global is able to handle localization in different ways.
|
18
|
+
# Providers are the interface.
|
19
|
+
#
|
20
|
+
# Please note that it is not required to include this module - despite it
|
21
|
+
# is recomended both as a documentation part and the more customized
|
22
|
+
# error messages.
|
23
|
+
module Base
|
24
|
+
##
|
25
|
+
#
|
26
|
+
# Localize date using format as in strftime
|
27
|
+
def localize(lang, date, format)
|
28
|
+
raise NoMethodError.new('method localize has not been implemented')
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
# Perform the registration
|
33
|
+
#
|
34
|
+
# ==== Parameters
|
35
|
+
# name<~to_sym>:: Name under which it is registred
|
36
|
+
def self.DateProvider(provider_name)
|
37
|
+
Module.new do
|
38
|
+
@@rb_date_provider_name = provider_name
|
39
|
+
include Merb::Global::DateProviders::Base
|
40
|
+
|
41
|
+
def self.included(klass)
|
42
|
+
Merb::Global::DateProviders.register @@rb_date_provider_name, klass
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/merb_global/merbrake.rb
CHANGED
@@ -1,25 +1,25 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
|
3
3
|
namespace :merb_global do
|
4
|
-
|
4
|
+
|
5
5
|
task :merb_start do
|
6
6
|
Merb.start_environment :adapter => 'runner',
|
7
7
|
:environment => ENV['MERB_ENV'] || 'development'
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
desc 'Create migration'
|
11
11
|
task :migration => :merb_start do
|
12
|
-
Merb::Global::
|
12
|
+
Merb::Global::MessageProviders.provider.create!
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
desc 'Transfer the translations from one provider to another'
|
16
16
|
task :transfer => :merb_start do
|
17
17
|
from = Merb::Global.config 'source', 'gettext'
|
18
18
|
into = Merb::Global.config 'provider', 'gettext'
|
19
19
|
if from == 'gettext' and into == 'gettext'
|
20
|
-
Dir[Merb::Global::
|
20
|
+
Dir[Merb::Global::MessageProviders.localedir + '/*.po'].each do |file|
|
21
21
|
lang = File.basename file, '.po'
|
22
|
-
lang_dir = File.join(Merb::Global::
|
22
|
+
lang_dir = File.join(Merb::Global::MessageProviders.localedir,
|
23
23
|
lang, 'LC_MESSAGES')
|
24
24
|
FileUtils.mkdir_p lang_dir
|
25
25
|
domain = Merb::Global.config([:gettext, :domain], 'merbapp')
|
@@ -28,10 +28,10 @@ namespace :merb_global do
|
|
28
28
|
elsif from == into
|
29
29
|
Merb.logger.error 'Tried transfer from and into the same provider'
|
30
30
|
else
|
31
|
-
from = Merb::Global::
|
32
|
-
into = Merb::Global::
|
31
|
+
from = Merb::Global::MessageProviders[from]
|
32
|
+
into = Merb::Global::MessageProviders[into]
|
33
33
|
Merb::Global::Provider.transfer from, into
|
34
34
|
end
|
35
35
|
end
|
36
|
-
|
37
|
-
end
|
36
|
+
|
37
|
+
end
|
@@ -7,13 +7,13 @@ require 'merb_global/plural'
|
|
7
7
|
|
8
8
|
module Merb
|
9
9
|
module Global
|
10
|
-
module
|
10
|
+
module MessageProviders
|
11
11
|
class ActiveRecord #:nodoc: all
|
12
|
-
include Merb::Global::
|
13
|
-
include Merb::Global::
|
14
|
-
include Merb::Global::
|
15
|
-
|
16
|
-
def
|
12
|
+
include Merb::Global::MessageProviders::Base
|
13
|
+
include Merb::Global::MessageProviders::Base::Importer
|
14
|
+
include Merb::Global::MessageProviders::Base::Exporter
|
15
|
+
|
16
|
+
def localize(singular, plural, opts)
|
17
17
|
language = Language.find :first,
|
18
18
|
:conditions => {:name => opts[:lang]}
|
19
19
|
unless language.nil?
|
@@ -22,7 +22,7 @@ module Merb
|
|
22
22
|
translation = Translation.find [language.id, singular, n]
|
23
23
|
else
|
24
24
|
translation = Translation.find [language.id, singular, nil]
|
25
|
-
end
|
25
|
+
end
|
26
26
|
return translation.msgstr
|
27
27
|
end rescue nil
|
28
28
|
return opts[:n] > 1 ? plural : singular # Fallback if not in database
|
@@ -57,54 +57,61 @@ module Merb
|
|
57
57
|
# "(#{except.join(',')})"])
|
58
58
|
end
|
59
59
|
|
60
|
-
def import
|
60
|
+
def import
|
61
|
+
data = {}
|
61
62
|
Language.transaction do
|
62
63
|
Translation.transaction do
|
63
|
-
Language.find(:all).each do |
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
64
|
+
Language.find(:all).each do |lang|
|
65
|
+
data[lang.name] = lang_hash = {
|
66
|
+
:plural => lang.plural,
|
67
|
+
:nplural => lang.nplural
|
68
|
+
}
|
69
|
+
lang.translations.each do |translation|
|
70
|
+
lang_hash[translation.msgid] ||= {
|
71
|
+
:plural => translation.msgid_plural
|
72
|
+
}
|
73
|
+
lang_hash[translation.msgid][translation.msgstr_index] =
|
74
|
+
translation.msgstr
|
73
75
|
end
|
74
76
|
end
|
75
77
|
end
|
76
78
|
end
|
79
|
+
data
|
77
80
|
end
|
78
81
|
|
79
|
-
def export
|
82
|
+
def export(data)
|
80
83
|
Language.transaction do
|
81
84
|
Translation.transaction do
|
82
|
-
Language.delete_all
|
83
85
|
Translation.delete_all
|
84
|
-
|
86
|
+
Language.delete_all
|
87
|
+
data.each do |lang_name, lang|
|
88
|
+
lang_id = Language.create!(:name => lang_name,
|
89
|
+
:plural => lang[:plural],
|
90
|
+
:nplural => lang[:nplural]).id
|
91
|
+
lang.each do |msgid, msgstrs|
|
92
|
+
if msgid.is_a? String
|
93
|
+
plural = msgstrs[:plural]
|
94
|
+
msgstrs.each do |index, msgstr|
|
95
|
+
if index.nil? or index.is_a? Fixnum
|
96
|
+
Translation.create! :language_id => lang_id,
|
97
|
+
:msgid => msgid,
|
98
|
+
:msgid_plural => plural,
|
99
|
+
:msgstr => msgstr,
|
100
|
+
:msgstr_index => index
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
85
106
|
end
|
86
107
|
end
|
87
108
|
end
|
88
109
|
|
89
|
-
def export_language(export_data, language, nplural, plural)
|
90
|
-
yield Language.create!(:language => language, :nplural => nplural,
|
91
|
-
:plural => plural).id
|
92
|
-
end
|
93
|
-
|
94
|
-
def export_string(language_id, msgid, msgid_plural,
|
95
|
-
msgstr, msgstr_index)
|
96
|
-
Translation.create! :language_id => language_id,
|
97
|
-
:msgid => msgid,
|
98
|
-
:msgid_plural => msgid_plural,
|
99
|
-
:msgstr => msgstr,
|
100
|
-
:msgstr_index => msgstr_index
|
101
|
-
end
|
102
|
-
|
103
110
|
class Language < ::ActiveRecord::Base
|
104
111
|
set_table_name :merb_global_languages
|
105
112
|
has_many :translations,
|
106
113
|
:class_name =>
|
107
|
-
"::Merb::Global::
|
114
|
+
"::Merb::Global::MessageProviders::ActiveRecord::Translation"
|
108
115
|
end
|
109
116
|
|
110
117
|
class Translation < ::ActiveRecord::Base
|
@@ -1,16 +1,16 @@
|
|
1
|
-
require '
|
1
|
+
require 'dm-core'
|
2
2
|
require 'dm-aggregates'
|
3
3
|
require 'merb_global/plural'
|
4
4
|
|
5
5
|
module Merb
|
6
6
|
module Global
|
7
|
-
module
|
7
|
+
module MessageProviders
|
8
8
|
class DataMapper #:nodoc: all
|
9
|
-
include Merb::Global::
|
10
|
-
include Merb::Global::
|
11
|
-
include Merb::Global::
|
12
|
-
|
13
|
-
def
|
9
|
+
include Merb::Global::MessageProviders
|
10
|
+
include Merb::Global::MessageProviders::Base::Importer
|
11
|
+
include Merb::Global::MessageProviders::Base::Exporter
|
12
|
+
|
13
|
+
def localize(singular, plural, opts)
|
14
14
|
# I hope it's from MemCache
|
15
15
|
language = Language.first :name => opts[:lang]
|
16
16
|
unless language.nil?
|
@@ -43,50 +43,54 @@ module Merb
|
|
43
43
|
Language.first(:name.not => except).name
|
44
44
|
end
|
45
45
|
|
46
|
-
def import
|
46
|
+
def import
|
47
|
+
data = {}
|
47
48
|
::DataMapper::Transaction.new(Language, Translation) do
|
48
49
|
Language.all.each do |language|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
50
|
+
data[language.name] = lang_hash = {
|
51
|
+
:plural => language.plural,
|
52
|
+
:nplural => language.nplural
|
53
|
+
}
|
54
|
+
language.translations(:fields => Translation.properties.to_a).
|
55
|
+
each do |translation|
|
56
|
+
lang_hash[translation.msgid] ||= {
|
57
|
+
:plural => translation.msgid_plural
|
58
|
+
}
|
59
|
+
lang_hash[translation.msgid][translation.msgstr_index] =
|
60
|
+
translation.msgstr
|
58
61
|
end
|
59
62
|
end
|
60
63
|
end
|
64
|
+
data
|
61
65
|
end
|
62
66
|
|
63
|
-
def export
|
67
|
+
def export(data)
|
64
68
|
::DataMapper::Transaction.new(Language, Translation) do
|
65
|
-
Language.all.each {|language| language.destroy}
|
66
69
|
Translation.all.each {|translation| translation.destroy}
|
67
|
-
|
70
|
+
Language.all.each {|language| language.destroy}
|
71
|
+
data.each do |lang_name, lang|
|
72
|
+
lang_obj = Language.create!(:name => lang_name,
|
73
|
+
:plural => lang[:plural],
|
74
|
+
:nplural => lang[:nplural])
|
75
|
+
lang.each do |msgid, msgstr_hash|
|
76
|
+
if msgstr_hash.is_a? Hash
|
77
|
+
plural = msgstr_hash[:plural]
|
78
|
+
msgstr_hash.each do |msgstr_index, msgstr|
|
79
|
+
if msgstr_index.nil? or msgstr_index.is_a? Fixnum
|
80
|
+
Translation.create!(:language_id => lang_obj.id,
|
81
|
+
:msgid => msgid,
|
82
|
+
:msgid_plural => plural,
|
83
|
+
:msgstr => msgstr,
|
84
|
+
:msgstr_index => msgstr_index) or
|
85
|
+
raise
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
68
91
|
end
|
69
92
|
end
|
70
93
|
|
71
|
-
def export_language(export_data, language, nplural, plural)
|
72
|
-
lang = Language.new :language => language, :nplural => nplural,
|
73
|
-
:plural => plural
|
74
|
-
lang.save
|
75
|
-
raise if lang.new_record?
|
76
|
-
yield lang.id
|
77
|
-
end
|
78
|
-
|
79
|
-
def export_string(language_id, msgid, msgid_plural,
|
80
|
-
msgstr, msgstr_index)
|
81
|
-
trans = Translation.new :language_id => language_id,
|
82
|
-
:msgid => msgid,
|
83
|
-
:msgid_plural => msgid_plural,
|
84
|
-
:msgstr => msgstr,
|
85
|
-
:msgstr_index => msgstr_index
|
86
|
-
trans.save
|
87
|
-
raise if lang.new_record?
|
88
|
-
end
|
89
|
-
|
90
94
|
# When table structure becomes stable it *should* be documented
|
91
95
|
class Language
|
92
96
|
include ::DataMapper::Resource
|
@@ -97,7 +101,7 @@ module Merb
|
|
97
101
|
property :plural, Text, :lazy => false
|
98
102
|
# validates_is_unique :name
|
99
103
|
has n, :translations,
|
100
|
-
:class_name => "Merb::Global::
|
104
|
+
:class_name => "Merb::Global::MessageProviders::DataMapper::Translation",
|
101
105
|
:child_key => [:language_id]
|
102
106
|
end
|
103
107
|
|
@@ -105,12 +109,6 @@ module Merb
|
|
105
109
|
include ::DataMapper::Resource
|
106
110
|
storage_names[:default] = 'merb_global_translations'
|
107
111
|
property :language_id, Integer, :nullable => false, :key => true
|
108
|
-
# Sould it be propery :msgid, :text?
|
109
|
-
# This form should be faster. However:
|
110
|
-
# - collision may appear (despite being unpropable)
|
111
|
-
# - it may be wrong optimalisation
|
112
|
-
# As far I'll leave it in this form. If anybody could measure the
|
113
|
-
# speed of both methods it will be appreciate.
|
114
112
|
property :msgid, Text, :nullable => false, :key => true
|
115
113
|
property :msgid_plural, Text, :lazy => true
|
116
114
|
property :msgstr, Text, :nullable => false, :lazy => false
|