zoukankan      html  css  js  c++  java
  • 多国语言解决方案gnu.gettext + poedit

     

    1.工具简介

    1.1.关于i18n

    i18n其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数是“国际化”的简称。

    i10n为资源本地化,全称为Localization,因为首字母I与末字母N之间共10个字母,又称为I10N。资源本地化就是要让这个软件产品使用当地的环境,如语言、文化、使用习惯等

    一般涉及到具体国家的语言文件,以i10n来表示,而多国语言相关的解决方案以i18n表示。

    1.2.关于gnu.gettext

    gnu.gettext软件国际化的解决方案之一,类似的还有IBM的ICU4C。但ICU4C比较庞大。

    gnu.gettext最早被使用在linux上,现在已经支持全面

    下面是列举一些相关文档:

    关于使用,网上有很多,这里不做介绍

    和普通翻译相比,你不需要再手动输入一次Key,它可以自动进入源文件根据一定的规则提取key

    1.3.关于POEdit

    poedit依赖gnu.gettext,实现了图形化的操作。分为免费版和pro版本,一般免费版功能足够使用了

    官方网站:http://poedit.net/

    2.使用 

    下面将用仅有一个Hellow world的控制台项目讲解其用法

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hellow Wolrd");
            Console.Read();
        }
    }

    2.1在poedit中配置

    首先运行POEdit,新建一个po翻译文件并保存

    此时是po文件打开状态,即可设置编目(必须设置,否则会有编码问题)

    设置完成后才能保证打开cs文件时不报编码错误

    接下来设置配置查找路径,它会去路径下的目标文件中自动提取key

    最后设置提取字符:

    提取字符的规则如需自定义的话,可在文件-首选项-提取器中修改

    但假如设定为_,那么代码中就是

    _("content")

    其他以此类推

    2.2转出po文件

    gnu.gettext提供了一套完整的解决方案,而poedit只是一个图形化编辑工具。

    c#需要使用gnu.gettext.net,下载地址:http://sourceforge.net/projects/gettextnet/

    传统的导出方法网上有很多,比较繁琐

    这里使用我写的工具类进行导出,它使用gnu.gettext内部接口。

    工具类GnuGetTextSeriHelper地址:http://git.oschina.net/Hont/GunGetTextSeriHelper

    在Release目录下找到编译好的转出工具,其中ReadMe包含使用说明

    把po文件放入该目录,填入参数运行批处理Execute.bat后会生成i10n文件,这个是已序列化好的本地化翻译文件。和I18N.cs一起放入项目文件中

    这里把i10n作为外部载入来操作,也可以包含在项目资源中

    此时zh_CN.po的内容还是空的,现在修改一下代码让其可以被识别

    并且初始化一下i18n,载入本地化文件

    static void Main(string[] args)
    {
        I18N.DeserializeFromFile("zh_CN_i10n");
        Console.WriteLine(I18N._("Hellow Wolrd"));
        Console.Read();
    }

    然后回到poedit,执行更新

    此时有若干种可能更新失败,需要检查上面所说的配置步骤,还需要把.po文件放在项目根目录中

    最好是放在i18n文件夹中,它会自动识别相对路径

    翻译好后,不用生成mo文件,选择保存,然后直接按照上述步骤使用我的工具再生成一次i10n文件。

    ok,国际化支持成功:


    Tip:gnu.getText对wpf的xaml文件支持不是很好,谷歌了很多资料,都无法从xaml中提取字符,只能通过wpf动态链接到cs文件中,执行替换

  • 相关阅读:
    Jquery里live事件移除原因
    js委托事件-addEventListeners(冒泡方向)
    后端同同不肯给我算好的时间差给我,只好自己写了:
    js滚动到顶部底部代码
    浏览器地址栏运行HTML代码(谷歌)
    黑马vue---56-58、vue组件创建的三种方式
    黑马vue---46、vue使用过渡类名实现动画
    黑马vue---28、vue中全局过滤器的基本使用
    vue devtools无法使用
    红心点赞效果的实现
  • 原文地址:https://www.cnblogs.com/hont/p/5129806.html
Copyright © 2011-2022 走看看