gloc_test.rb
432 lines
| 16.7 KiB
| text/x-ruby
|
RubyLexer
|
r10 | # Copyright (c) 2005-2006 David Barri | |
$LOAD_PATH.push File.join(File.dirname(__FILE__),'..','lib') | |||
require 'gloc' | |||
require 'gloc-ruby' | |||
require 'gloc-config' | |||
require 'gloc-rails-text' | |||
require File.join(File.dirname(__FILE__),'lib','rails-time_ext') unless 3.respond_to?(:days) | |||
require File.join(File.dirname(__FILE__),'lib','rails-string_ext') unless ''.respond_to?(:starts_with?) | |||
#require 'gloc-dev' | |||
class LClass; include GLoc; end | |||
class LClass2 < LClass; end | |||
class LClass_en < LClass2; set_language :en; end | |||
class LClass_ja < LClass2; set_language :ja; end | |||
# class LClass_forced_au < LClass; set_language :en; force_language :en_AU; set_language :ja; end | |||
class GLocTest < Test::Unit::TestCase | |||
include GLoc | |||
include ActionView::Helpers::DateHelper | |||
def setup | |||
@l1 = LClass.new | |||
@l2 = LClass.new | |||
@l3 = LClass.new | |||
@l1.set_language :ja | |||
@l2.set_language :en | |||
@l3.set_language 'en_AU' | |||
@gloc_state= GLoc.backup_state true | |||
GLoc::CONFIG.merge!({ | |||
:default_param_name => 'lang', | |||
:default_cookie_name => 'lang', | |||
:default_language => :ja, | |||
:raise_string_not_found_errors => true, | |||
:verbose => false, | |||
}) | |||
end | |||
def teardown | |||
GLoc.restore_state @gloc_state | |||
end | |||
#--------------------------------------------------------------------------- | |||
def test_basic | |||
assert_localized_value [nil, @l1, @l2, @l3], nil, :in_both_langs | |||
GLoc.load_localized_strings File.join(File.dirname(__FILE__),'lang') | |||
assert_localized_value [nil, @l1], 'enにもjaにもある', :in_both_langs | |||
assert_localized_value [nil, @l1], '日本語のみ', :ja_only | |||
assert_localized_value [nil, @l1], nil, :en_only | |||
assert_localized_value @l2, 'This is in en+ja', :in_both_langs | |||
assert_localized_value @l2, nil, :ja_only | |||
assert_localized_value @l2, 'English only', :en_only | |||
assert_localized_value @l3, "Thiz in en 'n' ja", :in_both_langs | |||
assert_localized_value @l3, nil, :ja_only | |||
assert_localized_value @l3, 'Aussie English only bro', :en_only | |||
@l3.set_language :en | |||
assert_localized_value @l3, 'This is in en+ja', :in_both_langs | |||
assert_localized_value @l3, nil, :ja_only | |||
assert_localized_value @l3, 'English only', :en_only | |||
assert_localized_value nil, 'enにもjaにもある', :in_both_langs | |||
assert_localized_value nil, '日本語のみ', :ja_only | |||
assert_localized_value nil, nil, :en_only | |||
end | |||
def test_load_twice_with_override | |||
GLoc.load_localized_strings File.join(File.dirname(__FILE__),'lang') | |||
GLoc.load_localized_strings File.join(File.dirname(__FILE__),'lang2') | |||
assert_localized_value [nil, @l1], '更新された', :in_both_langs | |||
assert_localized_value [nil, @l1], '日本語のみ', :ja_only | |||
assert_localized_value [nil, @l1], nil, :en_only | |||
assert_localized_value [nil, @l1], nil, :new_en | |||
assert_localized_value [nil, @l1], '新たな日本語ストリング', :new_ja | |||
assert_localized_value @l2, 'This is in en+ja', :in_both_langs | |||
assert_localized_value @l2, nil, :ja_only | |||
assert_localized_value @l2, 'overriden dude', :en_only | |||
assert_localized_value @l2, 'This is a new English string', :new_en | |||
assert_localized_value @l2, nil, :new_ja | |||
assert_localized_value @l3, "Thiz in en 'n' ja", :in_both_langs | |||
assert_localized_value @l3, nil, :ja_only | |||
assert_localized_value @l3, 'Aussie English only bro', :en_only | |||
end | |||
def test_load_twice_without_override | |||
GLoc.load_localized_strings File.join(File.dirname(__FILE__),'lang') | |||
GLoc.load_localized_strings File.join(File.dirname(__FILE__),'lang2'), false | |||
assert_localized_value [nil, @l1], 'enにもjaにもある', :in_both_langs | |||
assert_localized_value [nil, @l1], '日本語のみ', :ja_only | |||
assert_localized_value [nil, @l1], nil, :en_only | |||
assert_localized_value [nil, @l1], nil, :new_en | |||
assert_localized_value [nil, @l1], '新たな日本語ストリング', :new_ja | |||
assert_localized_value @l2, 'This is in en+ja', :in_both_langs | |||
assert_localized_value @l2, nil, :ja_only | |||
assert_localized_value @l2, 'English only', :en_only | |||
assert_localized_value @l2, 'This is a new English string', :new_en | |||
assert_localized_value @l2, nil, :new_ja | |||
assert_localized_value @l3, "Thiz in en 'n' ja", :in_both_langs | |||
assert_localized_value @l3, nil, :ja_only | |||
assert_localized_value @l3, 'Aussie English only bro', :en_only | |||
end | |||
def test_add_localized_strings | |||
assert_localized_value nil, nil, :add | |||
assert_localized_value nil, nil, :ja_only | |||
GLoc.load_localized_strings File.join(File.dirname(__FILE__),'lang') | |||
assert_localized_value nil, nil, :add | |||
assert_localized_value nil, '日本語のみ', :ja_only | |||
GLoc.add_localized_strings 'en', {:ja_only => 'bullshit'}, true | |||
GLoc.add_localized_strings 'en', {:ja_only => 'bullshit'}, false | |||
assert_localized_value nil, nil, :add | |||
assert_localized_value nil, '日本語のみ', :ja_only | |||
GLoc.add_localized_strings 'ja', {:ja_only => 'bullshit', :add => '123'}, false | |||
assert_localized_value nil, '123', :add | |||
assert_localized_value nil, '日本語のみ', :ja_only | |||
GLoc.add_localized_strings 'ja', {:ja_only => 'bullshit', :add => '234'} | |||
assert_localized_value nil, '234', :add | |||
assert_localized_value nil, 'bullshit', :ja_only | |||
end | |||
def test_class_set_language | |||
GLoc.load_localized_strings File.join(File.dirname(__FILE__),'lang') | |||
@l1 = LClass_ja.new | |||
@l2 = LClass_en.new | |||
@l3 = LClass_en.new | |||
assert_localized_value @l1, 'enにもjaにもある', :in_both_langs | |||
assert_localized_value @l2, 'This is in en+ja', :in_both_langs | |||
assert_localized_value @l3, 'This is in en+ja', :in_both_langs | |||
@l3.set_language 'en_AU' | |||
assert_localized_value @l1, 'enにもjaにもある', :in_both_langs | |||
assert_localized_value @l2, 'This is in en+ja', :in_both_langs | |||
assert_localized_value @l3, "Thiz in en 'n' ja", :in_both_langs | |||
end | |||
def test_ll | |||
GLoc.load_localized_strings File.join(File.dirname(__FILE__),'lang') | |||
assert_equal 'enにもjaにもある', ll('ja',:in_both_langs) | |||
assert_equal 'enにもjaにもある', GLoc::ll('ja',:in_both_langs) | |||
assert_equal 'enにもjaにもある', LClass_en.ll('ja',:in_both_langs) | |||
assert_equal 'enにもjaにもある', LClass_ja.ll('ja',:in_both_langs) | |||
assert_equal 'This is in en+ja', ll('en',:in_both_langs) | |||
assert_equal 'This is in en+ja', GLoc::ll('en',:in_both_langs) | |||
assert_equal 'This is in en+ja', LClass_en.ll('en',:in_both_langs) | |||
assert_equal 'This is in en+ja', LClass_ja.ll('en',:in_both_langs) | |||
end | |||
def test_lsym | |||
GLoc.load_localized_strings File.join(File.dirname(__FILE__),'lang') | |||
assert_equal 'enにもjaにもある', LClass_ja.ltry(:in_both_langs) | |||
assert_equal 'hello', LClass_ja.ltry('hello') | |||
assert_equal nil, LClass_ja.ltry(nil) | |||
end | |||
# def test_forced | |||
# assert_equal :en_AU, LClass_forced_au.current_language | |||
# a= LClass_forced_au.new | |||
# a.set_language :ja | |||
# assert_equal :en_AU, a.current_language | |||
# a.force_language :ja | |||
# assert_equal :ja, a.current_language | |||
# assert_equal :en_AU, LClass_forced_au.current_language | |||
# end | |||
def test_pluralization | |||
GLoc.add_localized_strings :en, :_gloc_rule_default => %[|n| case n; when 0 then '_none'; when 1 then '_single'; else '_many'; end], :a_single => '%d man', :a_many => '%d men', :a_none => 'No men' | |||
GLoc.add_localized_strings :en, :_gloc_rule_asd => %[|n| n<10 ? '_few' : '_heaps'], :a_few => 'a few men (%d)', :a_heaps=> 'soo many men' | |||
set_language :en | |||
assert_equal 'No men', lwr(:a, 0) | |||
assert_equal '1 man', lwr(:a, 1) | |||
assert_equal '3 men', lwr(:a, 3) | |||
assert_equal '20 men', lwr(:a, 20) | |||
assert_equal 'a few men (0)', lwr_(:asd, :a, 0) | |||
assert_equal 'a few men (1)', lwr_(:asd, :a, 1) | |||
assert_equal 'a few men (3)', lwr_(:asd, :a, 3) | |||
assert_equal 'soo many men', lwr_(:asd, :a, 12) | |||
assert_equal 'soo many men', lwr_(:asd, :a, 20) | |||
end | |||
def test_distance_in_words | |||
load_default_strings | |||
[ | |||
[20.seconds, 'less than a minute', '1分以内', 'меньше минуты'], | |||
[80.seconds, '1 minute', '1分', '1 минуту'], | |||
[3.seconds, 'less than 5 seconds', '5秒以内', 'менее 5 секунд', true], | |||
[9.seconds, 'less than 10 seconds', '10秒以内', 'менее 10 секунд', true], | |||
[16.seconds, 'less than 20 seconds', '20秒以内', 'менее 20 секунд', true], | |||
[35.seconds, 'half a minute', '約30秒', 'полминуты', true], | |||
[50.seconds, 'less than a minute', '1分以内', 'меньше минуты', true], | |||
[1.1.minutes, '1 minute', '1分', '1 минуту'], | |||
[2.1.minutes, '2 minutes', '2分', '2 минуты'], | |||
[4.1.minutes, '4 minutes', '4分', '4 минуты'], | |||
[5.1.minutes, '5 minutes', '5分', '5 минут'], | |||
[1.1.hours, 'about an hour', '約1時間', 'около часа'], | |||
[3.1.hours, 'about 3 hours', '約3時間', 'около 3 часов'], | |||
[9.1.hours, 'about 9 hours', '約9時間', 'около 9 часов'], | |||
[1.1.days, '1 day', '1日間', '1 день'], | |||
[2.1.days, '2 days', '2日間', '2 дня'], | |||
[4.days, '4 days', '4日間', '4 дня'], | |||
[6.days, '6 days', '6日間', '6 дней'], | |||
[11.days, '11 days', '11日間', '11 дней'], | |||
[12.days, '12 days', '12日間', '12 дней'], | |||
[15.days, '15 days', '15日間', '15 дней'], | |||
[20.days, '20 days', '20日間', '20 дней'], | |||
[21.days, '21 days', '21日間', '21 день'], | |||
[22.days, '22 days', '22日間', '22 дня'], | |||
[25.days, '25 days', '25日間', '25 дней'], | |||
].each do |a| | |||
t, en, ja, ru = a | |||
inc_sec= (a.size == 5) ? a[-1] : false | |||
set_language :en | |||
assert_equal en, distance_of_time_in_words(t,0,inc_sec) | |||
set_language :ja | |||
assert_equal ja, distance_of_time_in_words(t,0,inc_sec) | |||
set_language :ru | |||
assert_equal ru, distance_of_time_in_words(t,0,inc_sec) | |||
end | |||
end | |||
def test_age | |||
load_default_strings | |||
[ | |||
[1, '1 yr', '1歳', '1 год'], | |||
[22, '22 yrs', '22歳', '22 года'], | |||
[27, '27 yrs', '27歳', '27 лет'], | |||
].each do |a, en, ja, ru| | |||
set_language :en | |||
assert_equal en, l_age(a) | |||
set_language :ja | |||
assert_equal ja, l_age(a) | |||
set_language :ru | |||
assert_equal ru, l_age(a) | |||
end | |||
end | |||
def test_yesno | |||
load_default_strings | |||
set_language :en | |||
assert_equal 'yes', l_yesno(true) | |||
assert_equal 'no', l_yesno(false) | |||
assert_equal 'Yes', l_YesNo(true) | |||
assert_equal 'No', l_YesNo(false) | |||
end | |||
def test_all_languages_have_values_for_helpers | |||
load_default_strings | |||
t= Time.local(2000, 9, 15, 11, 23, 57) | |||
GLoc.valid_languages.each {|l| | |||
set_language l | |||
0.upto(120) {|n| l_age(n)} | |||
l_date(t) | |||
l_datetime(t) | |||
l_datetime_short(t) | |||
l_time(t) | |||
[true,false].each{|v| l_YesNo(v); l_yesno(v) } | |||
} | |||
end | |||
def test_similar_languages | |||
GLoc.add_localized_strings :en, :a => 'a' | |||
GLoc.add_localized_strings :en_AU, :a => 'a' | |||
GLoc.add_localized_strings :ja, :a => 'a' | |||
GLoc.add_localized_strings :zh_tw, :a => 'a' | |||
assert_equal :en, GLoc.similar_language(:en) | |||
assert_equal :en, GLoc.similar_language('en') | |||
assert_equal :ja, GLoc.similar_language(:ja) | |||
assert_equal :ja, GLoc.similar_language('ja') | |||
# lowercase + dashes to underscores | |||
assert_equal :en, GLoc.similar_language('EN') | |||
assert_equal :en, GLoc.similar_language(:EN) | |||
assert_equal :en_AU, GLoc.similar_language(:EN_Au) | |||
assert_equal :en_AU, GLoc.similar_language('eN-Au') | |||
# remove dialect | |||
assert_equal :ja, GLoc.similar_language(:ja_Au) | |||
assert_equal :ja, GLoc.similar_language('JA-ASDF') | |||
assert_equal :ja, GLoc.similar_language('jA_ASD_ZXC') | |||
# different dialect | |||
assert_equal :zh_tw, GLoc.similar_language('ZH') | |||
assert_equal :zh_tw, GLoc.similar_language('ZH_HK') | |||
assert_equal :zh_tw, GLoc.similar_language('ZH-BUL') | |||
# non matching | |||
assert_equal nil, GLoc.similar_language('WW') | |||
assert_equal nil, GLoc.similar_language('WW_AU') | |||
assert_equal nil, GLoc.similar_language('WW-AU') | |||
assert_equal nil, GLoc.similar_language('eZ_en') | |||
assert_equal nil, GLoc.similar_language('AU-ZH') | |||
end | |||
def test_clear_strings_and_similar_langs | |||
GLoc.add_localized_strings :en, :a => 'a' | |||
GLoc.add_localized_strings :en_AU, :a => 'a' | |||
GLoc.add_localized_strings :ja, :a => 'a' | |||
GLoc.add_localized_strings :zh_tw, :a => 'a' | |||
GLoc.clear_strings :en, :ja | |||
assert_equal nil, GLoc.similar_language('ja') | |||
assert_equal :en_AU, GLoc.similar_language('en') | |||
assert_equal :zh_tw, GLoc.similar_language('ZH_HK') | |||
GLoc.clear_strings | |||
assert_equal nil, GLoc.similar_language('ZH_HK') | |||
end | |||
def test_lang_name | |||
GLoc.add_localized_strings :en, :general_lang_en => 'English', :general_lang_ja => 'Japanese' | |||
GLoc.add_localized_strings :ja, :general_lang_en => '英語', :general_lang_ja => '日本語' | |||
set_language :en | |||
assert_equal 'Japanese', l_lang_name(:ja) | |||
assert_equal 'English', l_lang_name('en') | |||
set_language :ja | |||
assert_equal '日本語', l_lang_name('ja') | |||
assert_equal '英語', l_lang_name(:en) | |||
end | |||
def test_charset_change_all | |||
load_default_strings | |||
GLoc.add_localized_strings :ja2, :a => 'a' | |||
GLoc.valid_languages # Force refresh if in dev mode | |||
GLoc.class_eval 'LOCALIZED_STRINGS[:ja2]= LOCALIZED_STRINGS[:ja].clone' | |||
[:ja, :ja2].each do |l| | |||
set_language l | |||
assert_equal 'はい', l_yesno(true) | |||
assert_equal "E381AFE38184", l_yesno(true).unpack('H*')[0].upcase | |||
end | |||
GLoc.set_charset 'sjis' | |||
assert_equal 'sjis', GLoc.get_charset(:ja) | |||
assert_equal 'sjis', GLoc.get_charset(:ja2) | |||
[:ja, :ja2].each do |l| | |||
set_language l | |||
assert_equal "82CD82A2", l_yesno(true).unpack('H*')[0].upcase | |||
end | |||
end | |||
def test_charset_change_single | |||
load_default_strings | |||
GLoc.add_localized_strings :ja2, :a => 'a' | |||
GLoc.add_localized_strings :ja3, :a => 'a' | |||
GLoc.valid_languages # Force refresh if in dev mode | |||
GLoc.class_eval 'LOCALIZED_STRINGS[:ja2]= LOCALIZED_STRINGS[:ja].clone' | |||
GLoc.class_eval 'LOCALIZED_STRINGS[:ja3]= LOCALIZED_STRINGS[:ja].clone' | |||
[:ja, :ja2, :ja3].each do |l| | |||
set_language l | |||
assert_equal 'はい', l_yesno(true) | |||
assert_equal "E381AFE38184", l_yesno(true).unpack('H*')[0].upcase | |||
end | |||
GLoc.set_charset 'sjis', :ja | |||
assert_equal 'sjis', GLoc.get_charset(:ja) | |||
assert_equal 'utf-8', GLoc.get_charset(:ja2) | |||
assert_equal 'utf-8', GLoc.get_charset(:ja3) | |||
set_language :ja | |||
assert_equal "82CD82A2", l_yesno(true).unpack('H*')[0].upcase | |||
set_language :ja2 | |||
assert_equal "E381AFE38184", l_yesno(true).unpack('H*')[0].upcase | |||
set_language :ja3 | |||
assert_equal "E381AFE38184", l_yesno(true).unpack('H*')[0].upcase | |||
GLoc.set_charset 'euc-jp', :ja, :ja3 | |||
assert_equal 'euc-jp', GLoc.get_charset(:ja) | |||
assert_equal 'utf-8', GLoc.get_charset(:ja2) | |||
assert_equal 'euc-jp', GLoc.get_charset(:ja3) | |||
set_language :ja | |||
assert_equal "A4CFA4A4", l_yesno(true).unpack('H*')[0].upcase | |||
set_language :ja2 | |||
assert_equal "E381AFE38184", l_yesno(true).unpack('H*')[0].upcase | |||
set_language :ja3 | |||
assert_equal "A4CFA4A4", l_yesno(true).unpack('H*')[0].upcase | |||
end | |||
def test_set_language_if_valid | |||
GLoc.add_localized_strings :en, :a => 'a' | |||
GLoc.add_localized_strings :zh_tw, :a => 'a' | |||
assert set_language_if_valid('en') | |||
assert_equal :en, current_language | |||
assert set_language_if_valid('zh_tw') | |||
assert_equal :zh_tw, current_language | |||
assert !set_language_if_valid(nil) | |||
assert_equal :zh_tw, current_language | |||
assert !set_language_if_valid('ja') | |||
assert_equal :zh_tw, current_language | |||
assert set_language_if_valid(:en) | |||
assert_equal :en, current_language | |||
end | |||
#=========================================================================== | |||
protected | |||
def assert_localized_value(objects,expected,key) | |||
objects = [objects] unless objects.kind_of?(Array) | |||
objects.each {|object| | |||
o = object || GLoc | |||
assert_equal !expected.nil?, o.l_has_string?(key) | |||
if expected.nil? | |||
assert_raise(GLoc::StringNotFoundError) {o.l(key)} | |||
else | |||
assert_equal expected, o.l(key) | |||
end | |||
} | |||
end | |||
def load_default_strings | |||
GLoc.load_localized_strings File.join(File.dirname(__FILE__),'..','lang') | |||
end | |||
end |