`
bd7lx
  • 浏览: 201770 次
社区版块
存档分类
最新评论

gettext 汉化的*正规*正轨*而且还是简单的方法

阅读更多
道喜技术高强, 下面两篇看完了就明了

http://www.hhtong.com/blog1/articles/2006/05/15/rails20060514_i18n_gettext

关键的步骤是
引用

增加文件application.rb的代码,其中第四行和第十一行参数要调整。其目的在于,我们确定我们软件使用什么语言。在这个文件中,我们定义该软件项目文字区域(textdomain):i18n_gettext。这一点是很重要。它必须和后面谈到文件.po的文件名相同。

http://www.hhtong.com/blog1/articles/2006/05/15/tools20060514_use_poedit

比Globalize简洁易行



Download poedit最新版1.3.6的link
2006-10-30 03:36:

http://sourceforge.net/project/showfiles.php?group_id=27043&package_id=18746&release_id=459538



http://manuals.rubyonrails.com/read/chapter/105

有这么个笑话老鼠给猫挂铃铛, 敢挂是勇气, 要挂的太多了, 老鼠也不愿意干了

铃铛出在第六步, 手工要维护的括号太多了

引用
#
# 我们要把所有文件D:\works_rails\i18n_gettext\*\*.rb,D:\works_rails\i18n_gettext\*\*.rhtml 需要翻译的文字写成为规定格式为:
_('原文')
例如,我们修改文件D:\works_rails\i18n_gettext\app\views\admin\list.rhtml
_('Show')
原来的形式为
‘Show’

分享到:
评论
4 楼 歆渊 2006-11-03  
恰好我刚写完了一个基于Java的文字国际化产品, 现在正在写教程, 基本思想是通过变量的注释块来定义消息模板, 里面可以定义消息参数和写js动态脚本, 程序运行的时候通过调用Messager.format()来生成输出, 一个简单例子如下:

public class Quick
{

    /**
    * {name} was {age} {! age>1?"years":"year"} old in year {year}.
    * 
    * @arg name : name of the person
    * @arg age : his/her age in that year
    * @arg year = 2006 : the year
    * @usage This is a demo message declaiming one person's age in a past year.
    */
    @Msg
    protected static final String YEAR_AGE = "yr-age";

    /**
     * {! 
function r2(n)
\{
   return Math.round(n*100)/100;
\}
     * }Current Memory Usage: \n
     * \t Free: {! r2(java.lang.Runtime.getRuntime().freeMemory()/1024)} KB\n
     * \tTotal: {! r2(java.lang.Runtime.getRuntime().totalMemory()/1024/1024)} MB\n
     * \t  Max: {! r2(java.lang.Runtime.getRuntime().maxMemory()/1024/1024)} MB
     */
    @Msg
    protected final static String MEM = "mem-usage";

    /**
     * There {! num > 1 ? "are" : "is"} {! num <= 0 ? "no" : num} {!num > 1 ? "files" : "file"}. 
     * 
     * @arg num = 1 : the number of file(s).
     */
    @Msg
    protected final static String FILE = "number-of-files";

    /**
     * This is escaped text:\n
     * \t \{this-is-text-instead-of-arg}\n
     * \t \{! this-is-text-instead-of-expr }
     */
    @Msg
    protected final static String ESC = "escaped-text";

    public static void main(String[] args)
    {
        Messager msgr = Messager.get();

        System.out.println(msgr.format(YEAR_AGE, "name", "Peter", "year", 2006, "age", 26));

        System.out.println("------------------------------------------------");
        
        System.out.println(msgr.format(MEM));

        System.out.println("------------------------------------------------");
        
        System.out.println(msgr.format(FILE, "num", 0));
        System.out.println(msgr.format(FILE, "num", "0.5"));
        System.out.println(msgr.format(FILE, "num", "1"));
        System.out.println(msgr.format(FILE, "num", "1.5"));
        System.out.println(msgr.format(FILE, "num", 6));

        System.out.println("------------------------------------------------");
        
        System.out.println(msgr.format(ESC));
    }

}

编译的时候自动生成XML资源文件 Quick.msg.xml 如下:
<?xml version="1.0" encoding="UTF-8"?>
<java>
  <text>
    <escaped-text>
      <![CDATA[This is escaped text:
 	 \{this-is-text-instead-of-arg}
 	 \{! this-is-text-instead-of-expr }]]>
      <args />
      <defined>tutor.msg.Quick(Quick.java:54)</defined>
      <used>tutor.msg.Quick(Quick.java:54)</used>
    </escaped-text>
    <yr-age>
      <![CDATA[{name} was {age} {! age>1?"years":"year"} old in year {year}.]]>
      <args>
        <name>name of the person</name>
        <age>his/her age in that year</age>
        <year default-value="2006">the year</year>
      </args>
      <usage>
        This is a demo message declaiming one person's age in a past year.
      </usage>
      <defined>tutor.msg.Quick(Quick.java:24)</defined>
      <used>tutor.msg.Quick(Quick.java:24)</used>
    </yr-age>
    <mem-usage>
      <![CDATA[{! function r2(n) \{ return Math.round(n*100)/100; \} }Current Memory Usage: 
 	 Free: {! r2(java.lang.Runtime.getRuntime().freeMemory()/1024)} KB
 	Total: {! r2(java.lang.Runtime.getRuntime().totalMemory()/1024/1024)} MB
 	  Max: {! r2(java.lang.Runtime.getRuntime().maxMemory()/1024/1024)} MB]]>
      <args />
      <defined>tutor.msg.Quick(Quick.java:38)</defined>
      <used>tutor.msg.Quick(Quick.java:38)</used>
    </mem-usage>
    <number-of-files>
      <![CDATA[There {! num > 1 ? "are" : "is"} {! num <= 0 ? "no" : num} {!num > 1 ? "files" : "file"}.]]>
      <args>
        <num default-value="1">the number of file(s).</num>
      </args>
      <defined>tutor.msg.Quick(Quick.java:46)</defined>
      <used>tutor.msg.Quick(Quick.java:46)</used>
    </number-of-files>
  </text>
</java>

然后翻译成中文的XML资源 Quick_zh.msg.xml 如下:
<?xml version="1.0" encoding="UTF-8"?>
<java>
  <text>
    <number-of-files>
      <![CDATA[有{num}个文件.]]>
      <args>
        <num default-value="1">the number of file(s).</num>
      </args>
    </number-of-files>
    <mem-usage>
      <![CDATA[{! function r2(n) \{ return Math.round(n*100)/100; \} }当前内存使用情况: 
 	 空闲: {! r2(java.lang.Runtime.getRuntime().freeMemory()/1024)} KB
 	 总数: {! r2(java.lang.Runtime.getRuntime().totalMemory()/1024/1024)} MB
 	 限制: {! r2(java.lang.Runtime.getRuntime().maxMemory()/1024/1024)} MB]]>
      <args />
    </mem-usage>
    <yr-age>
      <![CDATA[{year} 年的时候, {name} {age} 岁.]]>
      <args>
        <name>name of the person</name>
        <age>his/her age in that year</age>
        <year default-value="2006">the year</year>
      </args>
      <usage>
        This is a demo message declaiming one person's age in a past year.
      </usage>
    </yr-age>
    <escaped-text>
      <![CDATA[以下文字是经过转义的:
 	 \{这不是参数,而是文字}
 	 \{! 这不是表达式,而是文字 }]]>
      <args />
    </escaped-text>
  </text>
</java>

3 楼 bd7lx 2006-11-03  


是的

本贴使用的通俗说法汉化,打算就一个已有的程序,翻译成中文的界面的过程

还在试验其它的方法

http://wiki.rubyonrails.org/rails/pages/InternationalizationComparison

有体验的可以讲解一番

http://www.trikr.net/

这个原创的网站就是用Globalize 作的双语支持

2 楼 cookoo 2006-11-03  
gettext只解决文字的多语言版本问题,globalize还解决日期,货币,度量格式的国际化问题。
1 楼 bd7lx 2006-11-02  
算是给

http://www.iteye.com/topic/29540

接上个小尾巴

还有相关的汉化思考慢慢来

欢迎讨论,汉化的技术

相关推荐

    Laravel开发-laravel-gettext

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

    django国际化工具gettext和poedit

    这里主要介绍两种关键工具:gettext和Poedit,它们在Django国际化过程中起着至关重要的作用。 **1. Gettext** Gettext是Unix/Linux系统下广泛使用的文本翻译工具,它可以帮助开发者将应用程序中的字符串提取出来,...

    GetText

    "GetText"是一个在IT行业中常见的术语,尤其在软件本地化和多语言支持领域。它主要涉及的是如何从软件中提取文本,以便进行翻译和其他语言处理工作。在提供的文件列表中,我们可以看到一系列与Delphi或类似RAD ...

    gettext源码

    `gettext`是一个在开源软件开发中广泛使用的工具集,主要用于多语言环境下的文本翻译。它提供了从源代码中提取可翻译字符串,管理翻译文件,以及最终将这些翻译整合回二进制可执行文件的功能。在Linux系统中,`...

    DELPHI GETTEXT源代码

    DELPHI GETTEXT源代码是面向Delphi开发者的一个多语言支持解决方案。GETTEXT是一个广泛用于C和C++等编程语言的国际化(i18n)和本地化(l10n)工具,但同样可以被引入到Delphi项目中,以实现更灵活的多语言功能。在...

    gettext-runtime-0.13.1

    2. **README.gettext-runtime**:这是一个重要的文档,它提供了关于gettext-runtime库的详细信息,包括安装指南、使用方法、注意事项等。开发者应该首先阅读此文件来了解如何集成和使用这个库。 3. **include**:这...

    gettext-0.17.tar

    `gettext-0.17.tar` 是一个包含 `gettext` 工具的...无论是开发开源项目还是商业软件,`gettext` 都是实现全球化战略的重要组成部分。通过理解并熟练运用 `gettext`,开发者可以构建更加友好且易于全球用户使用的软件。

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

    然而,标题提到的“另类的国际化方式gettext”提供了一种不同的方法,特别是在处理多语言环境时,可能更为高效和灵活。 gettext是一个在开源世界广泛使用的工具,主要用于软件的本地化。它最初是为C和C++设计的,但...

    hugin编译文件gettext-0.13.1.tar.gz

    `gettext-0.13.1.tar.gz` 是一个用于软件本地化的开源工具包,它在IT领域中扮演着至关重要的角色。这个压缩包包含了`gettext`...在IT行业中,`gettext`已经成为实现软件本地化的一种标准方法,被广泛应用在各种项目中。

    gettext-0.14.4-二进制版本

    `gettext`是一个广泛使用的工具集合,用于处理软件的国际化(i18n)和本地化(l10n)问题。这个"gettext-0.14.4-二进制版本"是`gettext`工具的一个特定发行版,适用于处理和管理多语言环境中的文本资源。在IT领域,...

    avada主题汉化包

    本文将深入探讨“Avada”主题的汉化包及其使用方法。** Avada是WordPress平台上极其流行的一款多用途主题,以其丰富的自定义选项、响应式设计和优秀的用户体验而广受赞誉。然而,对于中文用户来说,英文版的主题...

    前端项目-angular-gettext.zip

    **Angular.js与gettext的结合:前端本地化利器** 在现代Web开发中,前端应用程序往往需要支持多语言环境,以满足全球用户的使用需求。Angular.js,作为一款强大的前端框架,提供了丰富的功能来构建复杂的单页应用...

    前端项目-gettext.js.zip

    开发者可以通过简单的函数调用来标记需要翻译的文本,并通过`.po`文件进行翻译。 5. **.po文件支持**:`.po`(Portable Object)是GNU gettext标准的翻译文件格式,`gettext.js` 支持读取和写入这种文件,使得翻译...

    gettext源码--glib安装

    gettext源码,安装glib过程中需要用到

    gettext-0.18.1.1.tar.zip

    `gettext-0.18.1.1.tar.zip` 是一个包含了 `gettext` 工具的源代码包,主要用于在Linux系统中进行多语言支持。`gettext` 是一个广泛使用的软件开发工具集,它提供了强大的国际化(i18n)和本地化(l10n)功能,使得...

    源码gettext-0.19.3.tar

    `gettext-0.19.3.tar` 是一个包含了 `gettext` 工具集源代码的压缩文件。`gettext` 是一个广泛使用的开源工具,主要用于软件的国际化(i18n,Internationalization)和本地化(l10n,Localization)。这个版本号表示...

    gettext-0.22.1.tar.gz

    《GNU Gettext 0.22.1:国际化与本地化的重要工具》 在软件开发领域,尤其是在全球化的背景下,让软件能够适应不同语言和文化环境变得至关重要。GNU Gettext 是一个广泛使用的开源工具,它提供了强大的文本翻译功能...

    gettext 0.17 django国际化工具

    在IT行业中,`gettext`是一个广泛使用的工具,用于软件的多语言化,即国际化(Internationalization)和本地化(Localization)。这个工具集主要是为Unix-like系统设计的,但也能在其他平台,包括Python的Django框架...

    ROS全汉化模板.zip

    2. **汉化工具链**:可能包含用于翻译和本地化的工具,比如PoEdit,这是一款用于编辑gettext .po文件的工具,可以用于更新和维护ROS的汉化字符串。 3. **Web后台**:ROS全汉化模板可能会提供一个汉化的Web界面,...

Global site tag (gtag.js) - Google Analytics