`
qualenac
  • 浏览: 63619 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

使用GetText实现RoR应用的中文化「转」

阅读更多
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 代码
  1. 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 代码
  1. 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方法
<!---->
<!---->
<!---->
<!---->
分享到:
评论

相关推荐

    实现ossim中文化文档

    实现 OSSIM 中文化文档 在 OSSIM 系统中,中文化文档是非常重要的一步,能够让用户更方便地使用系统。下面我们将详细介绍如何实现 ...因此,在实际应用中,我们应该尽量实现 OSSIM 中文化文档,以提高系统的整体性能。

    gettext库 多语言国际化2

    本篇将深入探讨gettext库及其在实现多语言国际化中的应用。 gettext库最初由GNU项目开发,它提供了一套工具和服务,使得软件开发者可以轻松地将程序翻译成多种语言,从而让软件具备全球化的能力。这个库的核心功能...

    gettext 0.17 django国际化工具

    总之,`gettext 0.17`是实现Django应用国际化的重要工具,它简化了多语言支持的实现过程,让开发者能专注于核心功能的开发,而不用过多关心语言差异的问题。了解和熟练使用这些工具,对于开发面向全球用户的Web应用...

    django国际化工具gettext和poedit

    在Python的Web开发框架Django中,实现应用的多语言支持是通过其强大的国际化(Internationalization,简称i18n)功能来完成的。这里主要介绍两种关键工具:gettext和Poedit,它们在Django国际化过程中起着至关重要的...

    DELPHI GETTEXT源代码

    GETTEXT是一个广泛用于C和C++等编程语言的国际化(i18n)和本地化(l10n)工具,但同样可以被引入到Delphi项目中,以实现更灵活的多语言功能。在Delphi开发环境中,GETTEXT的使用可以帮助程序员轻松地处理不同语言...

    GNU Gettext Delphi Demo

    这个小型应用的目的是为了验证Gettext是否能够在Delphi环境下正常工作,帮助开发者理解如何集成这一强大的国际化(i18n)和本地化(l10n)解决方案。 GNU Gettext 是一个广泛使用的开源工具集,它为软件提供了处理...

    gettext源码

    在Linux系统中,`gettext`库是许多应用程序依赖的基础,用于实现国际化(i18n)和本地化(l10n)。 当我们遇到一个描述为“有些Linux系统缺少gettext库,需要自己手动编译安装。”的情况时,这通常意味着在某些精简...

    react-gettext:用于在应用程序中实现gettext本地化的Tiny React库

    react-gettext 1.0.2 一个很小的React库,可帮助使用gettext函数在应用程序中实现内部化。 它使用将gettext函数公开给子组件。安装方式注意:这个库需要React 16.3或更高版本npm i react react-gettext用法要在您的...

    PHP Smarty_gettext下载

    而`gettext`则是Linux/Unix环境中广泛使用的国际化(i18n)和本地化(l10n)工具,用于处理多语言支持。将Smarty与gettext结合,可以方便地在PHP应用中实现多语言功能。 Smarty_gettext是Smarty模板引擎的一个扩展...

    Laravel开发-gettext

    `gettext`是一个广泛使用的跨平台的国际ization(i18n)工具,它允许开发者将应用程序中的文本字符串提取出来并进行翻译。在Laravel中集成`gettext`,可以极大地提高翻译效率,特别是在大型项目中,当需要处理大量多...

    Java Web Application 另类的国际化方式gettext - commons for Java

    Java Web 应用程序的国际化通常通过使用Java的`ResourceBundle`类来实现,它允许开发者根据用户选择的语言提供不同的文本资源。然而,标题提到的“另类的国际化方式gettext”提供了一种不同的方法,特别是在处理多...

    vue-gettext:使用gettext翻译您的Vue.js应用程序

    已知的问题任何帮助是极大的赞赏: 解析一些.vue文件可能很棘手,请参阅 目前尚不支持属性翻译,请参阅 vue-gettext不符合SSR,请参阅介绍vue-gettext是使用转换Vue.js应用程序的插件。 它依赖于和 。vue-gettext...

    Laravel开发-laravel-gettext

    这个库提供了一个简单易用的gettext加载程序和分析器,使得在Laravel应用中实现i18n(国际化)变得更为便捷。 1. **gettext基础**: - Gettext是GNU项目开发的一个翻译工具,它允许开发者通过一种标准的方式来处理...

    前端开源库-angular-gettext-tools

    Angular GetText工具,简称`angular-gettext-tools`,是前端开发中一个非常重要的开源库,专门针对Angular框架设计,旨在帮助开发者方便地提取、管理和编译应用中的国际化(i18n)文本。在多语言环境中,提供良好的...

    gettext-runtime-0.13.1

    5. **lib**:这个目录通常包含库文件,比如动态链接库(.so on Linux,.dll on Windows)或静态链接库(.a),它们实现了gettext-runtime的核心功能,允许Python或其他语言的程序调用本地化和翻译的API。 `gettext-...

    gun gettext for delphi2010 demo project

    GNU Gettext 是一个广泛使用的开源工具集,主要用于多语言环境下的软件国际化(i18n)和本地化(l10n)。它提供了一种方便的方式来管理和翻译软件中的字符串,使得开发者可以轻松地将他们的应用移植到不同的语言环境...

    短语应用程序python-i18n:使用gettext模块的示例python应用程序

    Python的`gettext`模块是实现国际化的重要工具,它遵循GNU gettext工具集的标准。这个模块提供了一套API,用于处理翻译字符串(也称为消息)并管理多语言资源。 3. **使用gettext模块**: - **创建消息目录**:在...

Global site tag (gtag.js) - Google Analytics