This file is indexed.

/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