grosser-fast_gettext 0.2.4 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +28 -18
- data/VERSION.yml +1 -1
- data/lib/fast_gettext.rb +10 -38
- data/lib/fast_gettext/storage.rb +21 -3
- data/lib/fast_gettext/translation.rb +38 -0
- data/spec/fast_gettext/storage_spec.rb +1 -1
- data/spec/fast_gettext/translation_spec.rb +55 -0
- data/spec/fast_gettext_spec.rb +6 -43
- data/spec/vendor/fake_load_path/iconv.rb +2 -0
- data/spec/vendor/iconv_spec.rb +27 -0
- data/vendor/iconv.rb +63 -58
- data/vendor/mofile.rb +6 -2
- metadata +6 -1
data/README.markdown
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
FastGettext
|
2
2
|
===========
|
3
|
-
GetText but
|
3
|
+
GetText but 4 times faster, simple, clean namespace (7 vs 34) and threadsave!
|
4
4
|
|
5
5
|
Setup
|
6
6
|
=====
|
@@ -16,7 +16,7 @@ Choose text domain, and locale for translation
|
|
16
16
|
FastGettext.locale = 'de'
|
17
17
|
|
18
18
|
Start translating
|
19
|
-
include FastGettext
|
19
|
+
include FastGettext::Translation
|
20
20
|
_('Car') == 'Auto'
|
21
21
|
_('not-found') == 'not-found'
|
22
22
|
s_('Namespace|no-found') == 'not-found'
|
@@ -24,24 +24,34 @@ Start translating
|
|
24
24
|
|
25
25
|
Speed
|
26
26
|
=====
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
27
|
+
50_000 translations:
|
28
|
+
Ideal: (primitive Hash lookup)
|
29
|
+
small translation file:
|
30
|
+
1.100000 0.180000 1.280000 ( 1.287230)
|
31
|
+
mapped: 5832K writeable/private: 3016K shared: 28K
|
32
|
+
|
33
|
+
large translation file:
|
34
|
+
1.150000 0.150000 1.300000 ( 1.296114)
|
35
|
+
mapped: 5832K writeable/private: 3016K shared: 28K
|
36
|
+
|
37
|
+
FastGettext:
|
38
|
+
small translation file:
|
39
|
+
3.980000 0.430000 4.410000 ( 4.407260)
|
40
|
+
mapped: 5852K writeable/private: 3036K shared: 28K
|
31
41
|
|
32
|
-
large:
|
33
|
-
|
34
|
-
mapped:
|
42
|
+
large translation file:
|
43
|
+
4.070000 0.450000 4.520000 ( 4.515585)
|
44
|
+
mapped: 5972K writeable/private: 3156K shared: 28K
|
35
45
|
|
46
|
+
GetText:
|
47
|
+
small translation file:
|
48
|
+
16.280000 1.340000 17.620000 ( 17.630391)
|
49
|
+
mapped: 8976K writeable/private: 5944K shared: 28K
|
36
50
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
mapped: 9036K writeable/private: 6004K shared: 28K
|
51
|
+
large translation file:
|
52
|
+
16.590000 1.430000 18.020000 ( 18.042926)
|
53
|
+
mapped: 9024K writeable/private: 5992K shared: 28K
|
41
54
|
|
42
|
-
large:
|
43
|
-
3.280000 0.230000 3.510000 ( 3.511891)
|
44
|
-
mapped: 9156K writeable/private: 6124K shared: 28K
|
45
55
|
|
46
56
|
|
47
57
|
Thread Safety and Rails
|
@@ -59,7 +69,7 @@ then e.g. controllers, so set them inside your application_controller.
|
|
59
69
|
|
60
70
|
#application_controller.rb
|
61
71
|
class ApplicationController ...
|
62
|
-
include FastGettext
|
72
|
+
include FastGettext::Translation
|
63
73
|
before_filter :set_locale
|
64
74
|
def set_locale
|
65
75
|
FastGettext.available_locales = ['de','en',...]
|
@@ -69,7 +79,7 @@ then e.g. controllers, so set them inside your application_controller.
|
|
69
79
|
|
70
80
|
#application_helper.rb
|
71
81
|
module ApplicationHelper
|
72
|
-
include FastGettext
|
82
|
+
include FastGettext::Translation
|
73
83
|
...
|
74
84
|
|
75
85
|
Try the [gettext_i18n_rails plugin](http://github.com/grosser/gettext_i18n_rails), it simplifies the setup.
|
data/VERSION.yml
CHANGED
data/lib/fast_gettext.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'fast_gettext/mo_file'
|
2
2
|
require 'fast_gettext/storage'
|
3
|
+
require 'fast_gettext/translation'
|
3
4
|
require File.join(File.dirname(__FILE__),'..','vendor','string')
|
4
5
|
|
5
6
|
module FastGettext
|
@@ -13,39 +14,18 @@ module FastGettext
|
|
13
14
|
LOCALE_REX = /^[a-z]{2}$|^[a-z]{2}_[A-Z]{2}$/
|
14
15
|
NAMESPACE_SEPERATOR = '|'
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
#
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
count > 1 ? plural : singular
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
#translate, but discard namespace if nothing was found
|
30
|
-
# Car|Tire -> Tire if no translation could be found
|
31
|
-
def s_(translate,seperator=nil)
|
32
|
-
if translation = current_mo[translate]
|
33
|
-
translation
|
34
|
-
else
|
35
|
-
translate.split(seperator||NAMESPACE_SEPERATOR).last
|
17
|
+
# users should not include FastGettext, since this would conterminate their namespace
|
18
|
+
# rather use
|
19
|
+
# FastGettext.locale = ..
|
20
|
+
# FastGettext.text_domain = ..
|
21
|
+
# and
|
22
|
+
# include FastGettext::Translation
|
23
|
+
FastGettext::Translation.public_instance_methods.each do |method|
|
24
|
+
define_method method do |*args|
|
25
|
+
Translation.send(method,*args)
|
36
26
|
end
|
37
27
|
end
|
38
28
|
|
39
|
-
#tell gettext: this string need translation (will be found during parsing)
|
40
|
-
def N_(translate)
|
41
|
-
translate
|
42
|
-
end
|
43
|
-
|
44
|
-
#tell gettext: this string need translation (will be found during parsing)
|
45
|
-
def Nn_(singular,plural)
|
46
|
-
[singular,plural]
|
47
|
-
end
|
48
|
-
|
49
29
|
def add_text_domain(name,options)
|
50
30
|
self.text_domains ||= {}
|
51
31
|
domain = self.text_domains[name] = {:path=>options.delete(:path),:mo_files=>{}}
|
@@ -60,12 +40,4 @@ module FastGettext
|
|
60
40
|
end
|
61
41
|
domain
|
62
42
|
end
|
63
|
-
|
64
|
-
private
|
65
|
-
|
66
|
-
#TODO geht nicht <-> {}.plural
|
67
|
-
def current_mo
|
68
|
-
mo = text_domains[text_domain][:mo_files][locale] rescue nil
|
69
|
-
mo || {}
|
70
|
-
end
|
71
43
|
end
|
data/lib/fast_gettext/storage.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module FastGettext
|
2
2
|
module Storage
|
3
|
-
[:
|
3
|
+
[:current_translations,:available_locales].each do |method|
|
4
4
|
define_method method do
|
5
5
|
thread_store(method)
|
6
6
|
end
|
@@ -9,21 +9,39 @@ module FastGettext
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
+
#global, since re-parsing whole folders takes too much time...
|
12
13
|
@@text_domains={}
|
13
14
|
def text_domains
|
14
15
|
@@text_domains
|
15
16
|
end
|
16
17
|
|
18
|
+
def text_domain
|
19
|
+
thread_store(:text_domain)
|
20
|
+
end
|
21
|
+
|
22
|
+
def text_domain=(new_text_domain)
|
23
|
+
write_thread_store(:text_domain,new_text_domain)
|
24
|
+
update_current_translations
|
25
|
+
end
|
26
|
+
|
17
27
|
def locale
|
18
28
|
thread_store(:locale) || (available_locales||[]).first || 'en'
|
19
29
|
end
|
20
30
|
|
21
|
-
def locale=(
|
22
|
-
|
31
|
+
def locale=(new_locale)
|
32
|
+
new_locale = new_locale.to_s
|
33
|
+
if not available_locales or available_locales.include?(new_locale)
|
34
|
+
write_thread_store(:locale,new_locale)
|
35
|
+
update_current_translations
|
36
|
+
end
|
23
37
|
end
|
24
38
|
|
25
39
|
private
|
26
40
|
|
41
|
+
def update_current_translations
|
42
|
+
self.current_translations = text_domains[text_domain][:mo_files][locale] || {} if text_domains[text_domain]
|
43
|
+
end
|
44
|
+
|
27
45
|
def thread_store(key)
|
28
46
|
Thread.current["FastGettext.#{key}"]
|
29
47
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module FastGettext
|
2
|
+
module Translation
|
3
|
+
extend self
|
4
|
+
|
5
|
+
def _(translate)
|
6
|
+
FastGettext.current_translations[translate] || translate
|
7
|
+
end
|
8
|
+
|
9
|
+
#translate pluralized
|
10
|
+
def n_(singular,plural,count)
|
11
|
+
if translation = FastGettext.current_translations.plural(singular,plural,count)
|
12
|
+
translation
|
13
|
+
else
|
14
|
+
count > 1 ? plural : singular
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
#translate, but discard namespace if nothing was found
|
19
|
+
# Car|Tire -> Tire if no translation could be found
|
20
|
+
def s_(translate,seperator=nil)
|
21
|
+
if translation = FastGettext.current_translations[translate]
|
22
|
+
translation
|
23
|
+
else
|
24
|
+
translate.split(seperator||NAMESPACE_SEPERATOR).last
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
#tell gettext: this string need translation (will be found during parsing)
|
29
|
+
def N_(translate)
|
30
|
+
translate
|
31
|
+
end
|
32
|
+
|
33
|
+
#tell gettext: this string need translation (will be found during parsing)
|
34
|
+
def Nn_(singular,plural)
|
35
|
+
[singular,plural]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -15,7 +15,7 @@ describe Storage do
|
|
15
15
|
send(method) == 'de'
|
16
16
|
end
|
17
17
|
|
18
|
-
[:locale, :available_locales, :text_domain].each do |method|
|
18
|
+
[:locale, :available_locales, :text_domain, :current_translations].each do |method|
|
19
19
|
it "stores #{method} thread-save" do
|
20
20
|
thread_save(method).should == true
|
21
21
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
current_folder = File.dirname(__FILE__)
|
2
|
+
require File.join(current_folder,'..','spec_helper')
|
3
|
+
|
4
|
+
FastGettext.add_text_domain('test',:path=>File.join(File.dirname(__FILE__),'..','locale'))
|
5
|
+
FastGettext.text_domain = 'test'
|
6
|
+
FastGettext.available_locales = ['en','de']
|
7
|
+
FastGettext.locale = 'de'
|
8
|
+
|
9
|
+
include FastGettext::Translation
|
10
|
+
|
11
|
+
describe FastGettext::Translation do
|
12
|
+
describe :_ do
|
13
|
+
it "translates simple text" do
|
14
|
+
_('car').should == 'Auto'
|
15
|
+
end
|
16
|
+
it "returns msgid if not translation was found" do
|
17
|
+
_('NOT|FOUND').should == 'NOT|FOUND'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe :n_ do
|
22
|
+
it "translates pluralized" do
|
23
|
+
n_('Axis','Axis',1).should == 'Achse'
|
24
|
+
n_('Axis','Axis',2).should == 'Achsen'
|
25
|
+
end
|
26
|
+
it "returns the appropriate msgid if no translation was found" do
|
27
|
+
n_('NOTFOUND','NOTFOUNDs',1).should == 'NOTFOUND'
|
28
|
+
n_('NOTFOUND','NOTFOUNDs',2).should == 'NOTFOUNDs'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe :s_ do
|
33
|
+
it "translates simple text" do
|
34
|
+
_('car').should == 'Auto'
|
35
|
+
end
|
36
|
+
it "returns cleaned msgid if a translation was not found" do
|
37
|
+
s_("XXX|not found").should == "not found"
|
38
|
+
end
|
39
|
+
it "can use a custom seperator" do
|
40
|
+
s_("XXX/not found",'/').should == "not found"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe :N_ do
|
45
|
+
it "returns the msgid" do
|
46
|
+
N_('XXXXX').should == 'XXXXX'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe :Nn_ do
|
51
|
+
it "returns the msgids as array" do
|
52
|
+
Nn_('X','Y').should == ['X','Y']
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/spec/fast_gettext_spec.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require File.expand_path("spec_helper", File.dirname(__FILE__))
|
2
2
|
|
3
|
-
include FastGettext
|
4
3
|
FastGettext.add_text_domain('test',:path=>File.join(File.dirname(__FILE__),'locale'))
|
5
4
|
FastGettext.text_domain = 'test'
|
6
5
|
FastGettext.available_locales = ['en','de']
|
@@ -9,47 +8,11 @@ FastGettext.locale = 'de'
|
|
9
8
|
include FastGettext
|
10
9
|
|
11
10
|
describe FastGettext do
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe :n_ do
|
22
|
-
it "translates pluralized" do
|
23
|
-
n_('Axis','Axis',1).should == 'Achse'
|
24
|
-
n_('Axis','Axis',2).should == 'Achsen'
|
25
|
-
end
|
26
|
-
it "returns the appropriate msgid if no translation was found" do
|
27
|
-
n_('NOTFOUND','NOTFOUNDs',1).should == 'NOTFOUND'
|
28
|
-
n_('NOTFOUND','NOTFOUNDs',2).should == 'NOTFOUNDs'
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe :s_ do
|
33
|
-
it "translates simple text" do
|
34
|
-
_('car').should == 'Auto'
|
35
|
-
end
|
36
|
-
it "returns cleaned msgid if a translation was not found" do
|
37
|
-
s_("XXX|not found").should == "not found"
|
38
|
-
end
|
39
|
-
it "can use a custom seperator" do
|
40
|
-
s_("XXX/not found",'/').should == "not found"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe :N_ do
|
45
|
-
it "returns the msgid" do
|
46
|
-
N_('XXXXX').should == 'XXXXX'
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
describe :Nn_ do
|
51
|
-
it "returns the msgids as array" do
|
52
|
-
Nn_('X','Y').should == ['X','Y']
|
53
|
-
end
|
11
|
+
it "provides access to FastGettext::Translations methods" do
|
12
|
+
_('car').should == 'Auto'
|
13
|
+
s_("XXX|not found").should == "not found"
|
14
|
+
n_('Axis','Axis',1).should == 'Achse'
|
15
|
+
N_('XXXXX').should == 'XXXXX'
|
16
|
+
Nn_('X','Y').should == ['X','Y']
|
54
17
|
end
|
55
18
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
current_folder = File.dirname(__FILE__)
|
2
|
+
$LOAD_PATH.unshift File.expand_path("../../lib", current_folder)
|
3
|
+
|
4
|
+
describe 'Iconv' do
|
5
|
+
it "also works when Iconv was not found locally" do
|
6
|
+
#prepare load path
|
7
|
+
$LOAD_PATH.unshift File.join(current_folder,'fake_load_path')
|
8
|
+
test = 1
|
9
|
+
begin
|
10
|
+
require 'iconv'
|
11
|
+
rescue LoadError
|
12
|
+
test = 2
|
13
|
+
end
|
14
|
+
test.should == 2
|
15
|
+
|
16
|
+
#load fast_gettext
|
17
|
+
require 'fast_gettext'
|
18
|
+
|
19
|
+
FastGettext.add_text_domain('test',:path=>File.join(File.dirname(__FILE__),'..','locale'))
|
20
|
+
FastGettext.text_domain = 'test'
|
21
|
+
FastGettext.available_locales = ['en','de']
|
22
|
+
FastGettext.locale = 'de'
|
23
|
+
|
24
|
+
#translate
|
25
|
+
FastGettext._('car').should == 'Auto'
|
26
|
+
end
|
27
|
+
end
|
data/vendor/iconv.rb
CHANGED
@@ -15,8 +15,11 @@
|
|
15
15
|
$Id: iconv.rb,v 1.6 2007/11/08 14:21:22 mutoh Exp $
|
16
16
|
=end
|
17
17
|
|
18
|
+
#Modifications
|
19
|
+
#wrapped inside FastGettext namespace to reduce conflic
|
20
|
+
|
18
21
|
begin
|
19
|
-
require 'iconv
|
22
|
+
require 'iconv'
|
20
23
|
rescue LoadError
|
21
24
|
# Pseudo Iconv class
|
22
25
|
#
|
@@ -27,73 +30,75 @@ rescue LoadError
|
|
27
30
|
# (1) Ruby/GLib is a module which is provided from Ruby-GNOME2 Project.
|
28
31
|
# You can get binaries for Win32(One-Click Ruby Installer).
|
29
32
|
# <URL: http://ruby-gnome2.sourceforge.jp/>
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
33
|
+
module FastGettext
|
34
|
+
class Iconv2
|
35
|
+
module Failure; end
|
36
|
+
class InvalidEncoding < ArgumentError; include Failure; end
|
37
|
+
class IllegalSequence < ArgumentError; include Failure; end
|
38
|
+
class InvalidCharacter < ArgumentError; include Failure; end
|
35
39
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
end
|
46
|
-
else
|
47
|
-
begin
|
48
|
-
require 'glib2'
|
49
|
-
|
50
|
-
def self.check_glib_version?(major, minor, micro) # :nodoc:
|
51
|
-
(GLib::BINDING_VERSION[0] > major ||
|
52
|
-
(GLib::BINDING_VERSION[0] == major &&
|
53
|
-
GLib::BINDING_VERSION[1] > minor) ||
|
54
|
-
(GLib::BINDING_VERSION[0] == major &&
|
55
|
-
GLib::BINDING_VERSION[1] == minor &&
|
56
|
-
GLib::BINDING_VERSION[2] >= micro))
|
40
|
+
if RUBY_PLATFORM =~ /java/
|
41
|
+
def self.conv(to, from, str)
|
42
|
+
raise InvalidCharacter, "the 3rd argument is nil" unless str
|
43
|
+
begin
|
44
|
+
str = java.lang.String.new(str.unpack("C*").to_java(:byte), from)
|
45
|
+
str.getBytes(to).to_ary.pack("C*")
|
46
|
+
rescue java.io.UnsupportedEncodingException
|
47
|
+
raise InvalidEncoding
|
48
|
+
end
|
57
49
|
end
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
GLib
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
50
|
+
else
|
51
|
+
begin
|
52
|
+
require 'glib2'
|
53
|
+
|
54
|
+
def self.check_glib_version?(major, minor, micro) # :nodoc:
|
55
|
+
(GLib::BINDING_VERSION[0] > major ||
|
56
|
+
(GLib::BINDING_VERSION[0] == major &&
|
57
|
+
GLib::BINDING_VERSION[1] > minor) ||
|
58
|
+
(GLib::BINDING_VERSION[0] == major &&
|
59
|
+
GLib::BINDING_VERSION[1] == minor &&
|
60
|
+
GLib::BINDING_VERSION[2] >= micro))
|
61
|
+
end
|
62
|
+
|
63
|
+
if check_glib_version?(0, 11, 0)
|
64
|
+
# This is a function equivalent of Iconv.iconv.
|
65
|
+
# * to: encoding name for destination
|
66
|
+
# * from: encoding name for source
|
67
|
+
# * str: strings to be converted
|
68
|
+
# * Returns: Returns an Array of converted strings.
|
69
|
+
def self.conv(to, from, str)
|
70
|
+
begin
|
71
|
+
GLib.convert(str, to, from)
|
72
|
+
rescue GLib::ConvertError => e
|
73
|
+
case e.code
|
74
|
+
when GLib::ConvertError::NO_CONVERSION
|
75
|
+
raise InvalidEncoding.new(str)
|
76
|
+
when GLib::ConvertError::ILLEGAL_SEQUENCE
|
77
|
+
raise IllegalSequence.new(str)
|
78
|
+
else
|
79
|
+
raise InvalidCharacter.new(str)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
else
|
84
|
+
def self.conv(to, from, str) # :nodoc:
|
85
|
+
begin
|
86
|
+
GLib.convert(str, to, from)
|
87
|
+
rescue
|
73
88
|
raise IllegalSequence.new(str)
|
74
|
-
else
|
75
|
-
raise InvalidCharacter.new(str)
|
76
89
|
end
|
77
90
|
end
|
78
91
|
end
|
79
|
-
|
92
|
+
rescue LoadError
|
80
93
|
def self.conv(to, from, str) # :nodoc:
|
81
|
-
|
82
|
-
|
83
|
-
rescue
|
84
|
-
raise IllegalSequence.new(str)
|
85
|
-
end
|
94
|
+
warn "Iconv was not found." if $DEBUG
|
95
|
+
str
|
86
96
|
end
|
87
97
|
end
|
88
|
-
rescue LoadError
|
89
|
-
def self.conv(to, from, str) # :nodoc:
|
90
|
-
warn "Iconv was not found." if $DEBUG
|
91
|
-
str
|
92
|
-
end
|
93
98
|
end
|
94
|
-
|
95
|
-
|
96
|
-
|
99
|
+
def self.iconv(to, from, str)
|
100
|
+
conv(to, from, str).split(//)
|
101
|
+
end
|
97
102
|
end
|
98
103
|
end
|
99
104
|
end
|
data/vendor/mofile.rb
CHANGED
@@ -18,6 +18,9 @@
|
|
18
18
|
require 'iconv'
|
19
19
|
require 'stringio'
|
20
20
|
|
21
|
+
#Modifications:
|
22
|
+
# use Iconv or FastGettext::Icvon
|
23
|
+
|
21
24
|
module FastGettext
|
22
25
|
module GetText
|
23
26
|
class MOFile < Hash
|
@@ -148,8 +151,9 @@ module FastGettext
|
|
148
151
|
else
|
149
152
|
if @output_charset
|
150
153
|
begin
|
151
|
-
|
152
|
-
|
154
|
+
iconv = Iconv || FastGettext::Iconv
|
155
|
+
str = iconv.conv(@output_charset, @charset, str) if @charset
|
156
|
+
rescue iconv::Failure
|
153
157
|
if $DEBUG
|
154
158
|
warn "@charset = ", @charset
|
155
159
|
warn"@output_charset = ", @output_charset
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grosser-fast_gettext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Grosser
|
@@ -28,6 +28,7 @@ files:
|
|
28
28
|
- vendor/README.rdoc
|
29
29
|
- lib/fast_gettext.rb
|
30
30
|
- lib/fast_gettext
|
31
|
+
- lib/fast_gettext/translation.rb
|
31
32
|
- lib/fast_gettext/storage.rb
|
32
33
|
- lib/fast_gettext/mo_file.rb
|
33
34
|
- spec/fast_gettext_spec.rb
|
@@ -40,9 +41,13 @@ files:
|
|
40
41
|
- spec/locale/de/LC_MESSAGES
|
41
42
|
- spec/locale/de/LC_MESSAGES/test.mo
|
42
43
|
- spec/fast_gettext
|
44
|
+
- spec/fast_gettext/translation_spec.rb
|
43
45
|
- spec/fast_gettext/storage_spec.rb
|
44
46
|
- spec/fast_gettext/mo_file_spec.rb
|
45
47
|
- spec/vendor
|
48
|
+
- spec/vendor/iconv_spec.rb
|
49
|
+
- spec/vendor/fake_load_path
|
50
|
+
- spec/vendor/fake_load_path/iconv.rb
|
46
51
|
- spec/vendor/string_spec.rb
|
47
52
|
- VERSION.yml
|
48
53
|
- README.markdown
|