1. 安装ruby
GetText
gem install gettext
2. 修改config/environment.rb文件,加入代码:
require ’gettext/rails’
3.在ApplicationController的类声明后加入对init_
gettext的调用。参数是一个字符串,一般取项目名称(后面要用到的po和mo文件的文件名)。如:
class ApplicationController < ActionController::Base
init_gettext "depot"
end
4.新建lib/tasks/
gettext.rake文件,代码如下:
desc "Update pot/po files."
task :updatepo do
require 'gettext/utils'
GetText.update_pofiles("depot", Dir.glob("{app,lib,bin}/**/*.{rb,rhtml}"), "depot 1.0.0")
end
desc "Create mo-files"
task :makemo do
require 'gettext/utils'
GetText.create_mofiles(true, "po", "locale")
end
5. 修改rb和rhtml文件,用“_()”调用代替裸字符串。无论是在rb还是rhtml文件中,都通过“_()”函数得到多语言化的字符串。
_()函数的参数可以是任意的英文句子
model中validation的错误信息:
ruby 代码
- validates_presence_of :title, :message => N_(“can’t be empty!”)
注:这里要用"N_()",而不是"_()"
作为主语的属性名称不用写,
gettext会自动将属性名加在开头。否则,可以用"%{fn}”代入属性名。
GetText会查询数据库,自动产生属性名称的字符串,产生规则是:"类名|属性名"。如果属性名是由下划线分隔的多个单词,则将下划线替换为空格,第一个单词的首字母大写,其余单词全部小写。
例如User类的name属性,对应的是"User|Name","created_at”属性对应"User|Created at"。
在错误信息中还可以用"%d"代表validates_*中的某些参数,如:
ruby 代码
- alidates_length_of :description, :minimum => 10, :message => N_(“%{fn} is too short (min is %d characters)”)
6.在项目的根目录下创建目录"po”,然后在"po"目录下为没一种语言创建一个目录(中文一般用"zh")。如果选择语言的过程完全由应用自己控制的话,目录名不遵循标准也没有关系。
7.执行rake任务,生成pot和po文件。
rake updatepo
GetText会检查项目load路径中的所有的rb和rhtml文件,搜集调用"_()"或"N_()"的所有地方的参数,生成后缀为pot的文件,存放在po目录下,以及后缀为"po"的文件,在每一种语言的目录下各放一份。pot和po文件的文件名前缀就是前面调用"init_
gettext"时的参数。所以如果在application.rb中写"init_
gettext ‘depot’”的话,生成的文件就是"depot.pot”和"depot.po"。
8.翻译po文件。可使用
poedit
9.执行rake任务,生成mo文件。
rake makemo
该任务会在项目的根目录下生成locale目录(locale\zh\LC_MESSAGES\depot.mo)。mo文件是二进制文件,是
GetText在运行时真正要用的。
10.设置语言。
request参数lang
http://localhost:3000/admin/?lang=zh
Cookie lang的值
class ApplicationController < ActionController::Base
before_init_gettext :default_locale
def default_locale
if (cookies["lang"].nil? or cookies["lang"].empty?)
set_locale "zh"
else
set_locale cookies["lang"]
end
end
init_gettext "depot"
end
设置
GetText.locale
class ApplicationController < ActionController::Base
GetText.locale = "zh"
init_gettext "depot"
end
在view中使用set_locale方法
<!---->
<!---->
<!---->
<!---->
分享到:
相关推荐
gettext,PHP,多语言,国际化编程
自己经过验证后并进行详细注解后的一套代码
react-gettext 1.0.2 一个很小的React库,可帮助使用gettext函数在应用程序中实现内部化。 它使用将gettext函数公开给子组件。安装方式注意:这个库需要React 16.3或更高版本npm i react react-gettext用法要在您的...
Laravel开发-gettext 使用Poedit和GetText为Laravel应用程序添加本地化支持
django gettext poedit 国际化 django国际化工具gettext和poedit
gettext 0.17 django国际化工具
短语应用程序python-i18n:使用gettext模块的示例python应用程序
包含测试的php文件和gettext-0.14.4.exe,以及Poedit.exe 使用方法: 访问test.php?lan=zh_CN则显示简体 访问test.php?lan=en_US则显示英文 教程地址:https://www.cnblogs.com/-mrl/p/10949820.html
GetText
gnugettext. for delphi 使用说明书
已知的问题任何帮助是极大的赞赏: 解析一些.vue文件可能很棘手,请参阅 目前尚不支持属性翻译,请参阅 vue-gettext不符合SSR,请参阅介绍vue-gettext是使用转换Vue.js应用程序的插件。 它依赖于和 。vue-gettext...
使用 GNU Gettext 编译应用程序的完美解决方案。 有时像 PoEdit 或 EazyPo 这样的应用程序不足以从源代码中提取所有消息。 并且使用 xgettext 并不简单,需要两个以上的命令。 这个 NodeJS 模块试图帮助你为你的...
Gettext 用于系统的国际化(I18N)和本地化(L10N),可以在编译程序的时候使用本国语言支持(Native Language Support(NLS)),其可以使程序的输出使用用户设置的语言而不是英文. 关于gettext的更多资料请参见: 下面说说...
NGettext, gnu/gettext库的跨平台. NET 实现 NGettext gnu/gettext库的跨平台. NET 实现。这个完全管理的库在 .NET 版本或者更高版本,甚至在完整aot运行时上收费。 它拥有英镑的com 和符合...这个实现直接从 gettext
有些Linux系统缺少gettext库,需要自己手动编译安装。
NULL 博文链接:https://hudeyong926.iteye.com/blog/895103
它提供了一种向Laravel应用程序添加本地化支持的简单方法。 它旨在与GNU gettext和Poedit一起使用。 该软件包的先前版本(4.x之前)可与本机php-gettext模块一起使用。 当前版本默认情况下使用Symfony翻译包,而...
PHP Smarty通过gettext制作多语言版本
GNU Gettext Delphi Demo。功能非常简单,只是验证GNU Gettext 是否可用。请首先安装dxgettext和poedit.