/usr/lib/ruby/1.8/ramaze/helper/localize.rb is in libramaze-ruby1.8 2010.06.18-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | require 'locale/tag'
require 'locale'
module Ramaze
module Helper
module Localize
include Traited
trait :localize_locale => ::Locale::Tag::Simple.new('en')
trait :localize_charset => 'UTF-8'
def localize(string, substitute = nil)
localize_dictionary.translate(string, locales, substitute)
end
alias l localize
def locale
locales.first
end
def locales
locales = request.env['localize.locales']
return locales if locales
fallback = ancestral_trait[:localize_locale]
locales = Parser.new(request).locales(fallback)
request.env['localize.locales'] = locales
end
class Dictionary
attr_reader :dict
def initialize
@dict = {}
end
def translate(string, locales, substitute)
target = string.to_s.dup
locales = locales.flatten.uniq
if substitute
substitute.each do |key, value|
target.gsub!(/\{#{Regexp.escape(key)}\}/, lookup(value, locales))
end
return target
elsif target =~ /\{/
target.gsub!(/\{([^\}]+)\}/){ lookup($1, locales) }
return target
else
lookup(target, locales)
end
end
def lookup(string, locales)
locales.each do |locale|
next unless dict = self[locale]
next unless translated = dict[string]
return translated
end
string
end
def locales
@dict.keys
end
def [](locale)
@dict[arg_to_locale(locale)]
end
def []=(locale, dict)
@dict[arg_to_locale(locale)] = dict
end
def load(locale, options = {})
if file = options.delete(:yaml)
dict = ::YAML.load_file(file)
elsif hash = options.delete(:hash)
dict = hash
elsif marshal = options.delete(:marshal)
dict = Marshal.load(File.read(marshal))
else
raise ArgumentError, "either :yaml, :marshal, or :hash"
end
@dict[arg_to_locale(locale)] = dict
end
private
def arg_to_locale(arg, raises = true)
if raises and not arg
raise(ArgumentError, "%p cannot be converted to a Locale" % arg)
end
arg.respond_to?(:language) ? arg : ::Locale::Tag.parse(arg.to_s)
end
end
class Parser
attr_accessor :request
def initialize(request)
@request = request
end
def locales(fallback = nil)
locales = [parse, fallback].flatten.uniq
::Locale::TagList.new(locales)
end
def parse
parse_params || parse_session || parse_cookie || parse_header
end
def parse_params(key = 'lang')
return unless lang = request.params[key]
::Locale::Tag.parse(lang)
end
def parse_session(key = :lang)
return unless lang = Current.session[key]
::Locale::Tag.parse(lang)
end
def parse_cookie(key = 'lang')
return unless lang = request.cookies[key]
::Locale::Tag.parse(lang)
end
def parse_header
request.accept_language.map{|lang|
::Locale::Tag.parse(lang) }
end
end
end
end
end
|