国际化比想的要稍微复杂一点,可能是我想得太简单了。
需要国际化的有几部分
1. view中的文字,即rhtml中的文字。要将文字放入<%%>,类似: <%= :enter_send.l("Enter")%>
2. form中控件的文字,改成符号转一下就行,例如:<%= link_to :chat_list.l("chat list"),{:action=>"list_chat"} %>
3.常量中的文字,只能转变成变量了,将文字变成符号,然后使用的时候转换一下,例如:
常量定义
转换
其实就是将符号转成国际化文字。
4. js 中的国际化。首先需要做一个决定是使用动态js还是静态js,如果是动态js,那么就是使用类似erb的模板,然后结合globalite的国际化方法就行了。如果是静态js,那么就把函数里的文字抽取出来,变成变量,然后在rhtml中把变量内容国际化就行了,例如:
js函数
这个loading_text就是抽取的变量,可以在rhtml中定义
还可以将标点和货币符号都国际化,由于没有用到就不再细述了。
其实还有一个复数化的国际化转换,例:
在语言文件里
globalite 的使用细节请参见:http://code.google.com/p/globalite/
需要国际化的有几部分
1. view中的文字,即rhtml中的文字。要将文字放入<%%>,类似: <%= :enter_send.l("Enter")%>
2. form中控件的文字,改成符号转一下就行,例如:<%= link_to :chat_list.l("chat list"),{:action=>"list_chat"} %>
3.常量中的文字,只能转变成变量了,将文字变成符号,然后使用的时候转换一下,例如:
常量定义
ruby 代码
- TRANS_DIRECTION=[[:no_translate,0],
- [:chinese_to_english,TRANS_CHINESE_TO_ENGLISH],
- [:english_to_chinese,TRANS_ENGLISH_TO_CHINESE]
- ]
ruby 代码
- def self.get_direction_list
- TranslateService::TRANS_DIRECTION.collect do |x|
- [x[0].l,x[1]]
- end
- end
其实就是将符号转成国际化文字。
4. js 中的国际化。首先需要做一个决定是使用动态js还是静态js,如果是动态js,那么就是使用类似erb的模板,然后结合globalite的国际化方法就行了。如果是静态js,那么就把函数里的文字抽取出来,变成变量,然后在rhtml中把变量内容国际化就行了,例如:
js函数
js 代码
- function getLoadingPanel(create){
- var p=$("panel_loading");
- if(p==null && create){
- p = document.createElement('DIV');
- p.setAttribute("id","panel_loading");
- document.body.appendChild(p);
- p=$("panel_loading");
- p.style.cssText="...";
- p.innerHTML=loading_text;
- }
- return p;
- }
这个loading_text就是抽取的变量,可以在rhtml中定义
ruby 代码
- <%= "var loading_text='#{:loading_text.l('connecting...')}';"%>
还可以将标点和货币符号都国际化,由于没有用到就不再细述了。
其实还有一个复数化的国际化转换,例:
ruby 代码
- <%= :geeze_amount.l_with_args({:count => @geese.count}) %>
在语言文件里
geese_amount: we have pluralize{{geese_count}, goose, geese} in the farm!
这样就有一个复数替换的功能,如果你不使用,也可以直接拼字符串就行了。globalite 的使用细节请参见:http://code.google.com/p/globalite/