lib/review/i18n.rb in review-2.0.0.beta1 vs lib/review/i18n.rb in review-2.0.0
- old
+ new
@@ -1,20 +1,31 @@
# -*- coding: utf-8 -*-
require 'yaml'
module ReVIEW
class I18n
+ ALPHA_U = %w[0 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]
+ ALPHA_L = %w[0 a b c d e f g h i j k l m n o p q r s t u v w x y z]
+ ROMAN_U = %w[0 I II III IV V VI VII VIII IX X XI XII XIII XIV XV XVI XVII XVIII XIX XX XXI XXII XXIII XXIV XXV XXVI XXVII]
+ ROMAN_L = %w[0 i ii iii iv v vi vii viii ix x xi xii xiii xiv xv xvi xvii xviii xix xx xxi xxii xxiii xxiv xxv xxvi xxvii]
+ ALPHA_UW = %w[0 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]
+ ALPHA_LW = %w[0 a b c d e f g h i j k l m n o p q r s t u v w x y z]
+ ROMAN_UW = %w[0 Ⅰ Ⅱ Ⅲ Ⅳ V Ⅵ Ⅶ Ⅷ Ⅸ X Ⅺ Ⅻ]
+ ARABIC_UW = %w[〇 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27]
+ ARABIC_LW = %w[〇 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27]
+ JAPAN = %w[〇 一 二 三 四 五 六 七 八 九 十 十一 十二 十三 十四 十五 十六 十七 十八 十九 二十 二十一 二十二 二十三 二十四 二十五 二十六 二十七]
+
def self.setup(locale="ja", ymlfile = "locale.yml")
@i18n = ReVIEW::I18n.new(locale)
lfile = nil
if ymlfile
lfile = File.expand_path(ymlfile, Dir.pwd)
# backward compatibility
- if !File.exist?(lfile) && (ymlfile == "locale.yml")
- lfile = File.expand_path("locale.yaml", Dir.pwd)
+ if !File.exist?(lfile) && (ymlfile == "locale.yml") && File.exist?(File.expand_path("locale.yaml", Dir.pwd))
+ raise ReVIEW::ConfigError, "locale.yaml is obsoleted. Please use locale.yml."
end
end
if lfile && File.file?(lfile)
@i18n.update_localefile(lfile)
@@ -36,26 +47,30 @@
I18n.setup(locale)
end
end
class << self
- alias v t ## for EPUBMaker backward compatibility
+ alias_method :v, :t ## for EPUBMaker backward compatibility
end
def self.update(user_i18n, locale = nil)
@i18n.update(user_i18n, locale)
end
+ def self.get(word, locale = nil)
+ @i18n.get(word, locale)
+ end
+
attr_accessor :locale
def initialize(locale = nil)
@locale = locale
load_default
end
def load_default
- load_file(File.expand_path "i18n.yml", File.dirname(__FILE__))
+ load_file(File.expand_path("i18n.yml", File.dirname(__FILE__)))
end
def load_file(path)
@store = YAML.load_file(path)
end
@@ -63,11 +78,15 @@
def update_localefile(path)
user_i18n = YAML.load_file(path)
locale = user_i18n["locale"]
if locale
user_i18n.delete("locale")
- @store[locale].merge!(user_i18n)
+ if @store[locale]
+ @store[locale].merge!(user_i18n)
+ else
+ @store[locale] = user_i18n
+ end
else
user_i18n.each do |key, values|
raise KeyError, "Invalid locale file: #{path}" unless values.kind_of? Hash
@store[key].merge!(values)
end
@@ -81,11 +100,64 @@
else
@store[locale] = user_i18n
end
end
+ def get(word, locale = nil)
+ locale ||= @locale
+ @store[locale][word]
+ end
+
def t(str, args = nil)
- @store[@locale][str] % args
+ frmt = @store[@locale][str].dup
+ frmt.gsub!('%%', '##')
+
+ if !args.is_a?(Array)
+ if args.nil? && frmt !~ /\%/
+ args = []
+ else
+ args = [args]
+ end
+ end
+
+ percents = frmt.scan(/%\w{1,3}/)
+ percents.each_with_index do |i, idx|
+ case i
+ when "%pA"
+ frmt.sub!(i, ALPHA_U[args[idx]])
+ args.delete idx
+ when "%pa"
+ frmt.sub!(i, ALPHA_L[args[idx]])
+ args.delete idx
+ when "%pAW"
+ frmt.sub!(i, ALPHA_UW[args[idx]])
+ args.delete idx
+ when "%paW"
+ frmt.sub!(i, ALPHA_LW[args[idx]])
+ args.delete idx
+ when "%pR"
+ frmt.sub!(i, ROMAN_U[args[idx]])
+ args.delete idx
+ when "%pr"
+ frmt.sub!(i, ROMAN_L[args[idx]])
+ args.delete idx
+ when "%pRW"
+ frmt.sub!(i, ROMAN_UW[args[idx]])
+ args.delete idx
+ when "%pJ"
+ frmt.sub!(i, JAPAN[args[idx]])
+ args.delete idx
+ when "%pdW"
+ frmt.sub!(i, ARABIC_LW[args[idx]])
+ args.delete idx
+ when "%pDW"
+ frmt.sub!(i, ARABIC_UW[args[idx]])
+ args.delete idx
+ end
+ end
+ args_matched = (frmt.count("%") == args.size)
+ frmt.gsub!('##', '%%')
+ args_matched ? (frmt % args) : frmt
rescue
str
end
end
end