Add message format support that can be used on complex localization strings

Add message about new and unread topics at the bottom of topics
move localization helper into lib
This commit is contained in:
Sam
2013-05-30 15:53:40 +10:00
parent e93b7a3b20
commit 8874c9ea75
77 changed files with 2279 additions and 29 deletions

View File

@ -0,0 +1,82 @@
require 'spec_helper'
require_dependency 'js_locale_helper'
describe JsLocaleHelper do
it 'should be able to generate translations' do
JsLocaleHelper.output_locale('en').length.should > 0
end
def setup_message_format(format)
@ctx = V8::Context.new
@ctx.eval('MessageFormat = {locale: {}};')
@ctx.load(Rails.root + 'lib/javascripts/locale/en.js')
compiled = JsLocaleHelper.compile_message_format('en', format)
@ctx.eval("var test = #{compiled}")
end
def localize(opts)
@ctx.eval("test(#{opts.to_json})")
end
it 'handles plurals' do
setup_message_format('{NUM_RESULTS, plural,
one {1 result}
other {# results}
}')
localize(NUM_RESULTS: 1).should == '1 result'
localize(NUM_RESULTS: 2).should == '2 results'
end
it 'handles double plurals' do
setup_message_format('{NUM_RESULTS, plural,
one {1 result}
other {# results}
} and {NUM_APPLES, plural,
one {1 apple}
other {# apples}
}')
localize(NUM_RESULTS: 1, NUM_APPLES: 2).should == '1 result and 2 apples'
localize(NUM_RESULTS: 2, NUM_APPLES: 1).should == '2 results and 1 apple'
end
it 'handles select' do
setup_message_format('{GENDER, select, male {He} female {She} other {They}} read a book')
localize(GENDER: 'male').should == 'He read a book'
localize(GENDER: 'female').should == 'She read a book'
localize(GENDER: 'none').should == 'They read a book'
end
it 'can strip out message formats' do
hash = {"a" => "b", "c" => { "d" => {"f_MF" => "bob"} }}
JsLocaleHelper.strip_out_message_formats!(hash).should == {"c.d.f_MF" => "bob"}
hash["c"]["d"].should == {}
end
it 'handles message format special keys' do
ctx = V8::Context.new
ctx.eval("I18n = {};")
ctx.eval(JsLocaleHelper.output_locale('en',
{
"en" =>
{
"js" => {
"hello" => "world",
"test_MF" => "{HELLO} {COUNT, plural, one {1 duck} other {# ducks}}",
"error_MF" => "{{BLA}",
"simple_MF" => "{COUNT, plural, one {1} other {#}}"
}
}
}))
ctx.eval('I18n.translations')["en"]["js"]["hello"].should == "world"
ctx.eval('I18n.translations')["en"]["js"]["test_MF"].should be_nil
ctx.eval('I18n.messageFormat("test_MF", { HELLO: "hi", COUNT: 3 })').should == "hi 3 ducks"
ctx.eval('I18n.messageFormat("error_MF", { HELLO: "hi", COUNT: 3 })').should =~ /Invalid Format/
ctx.eval('I18n.messageFormat("missing", {})').should =~ /missing/
ctx.eval('I18n.messageFormat("simple_MF", {})').should =~ /COUNT/ # error
end
end