多国语言解决方案gnu.gettext + poedit

时间:2022-09-24 11:44:17

1.工具简介

1.1.关于i18n

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

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

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

1.2.关于gnu.gettext

多国语言解决方案gnu.gettext + poedit

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

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

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

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

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

1.3.关于POEdit

多国语言解决方案gnu.gettext + 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翻译文件并保存

多国语言解决方案gnu.gettext + poedit

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

多国语言解决方案gnu.gettext + poedit

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

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

多国语言解决方案gnu.gettext + poedit

最后设置提取字符:

多国语言解决方案gnu.gettext + poedit

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

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

_("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包含使用说明

多国语言解决方案gnu.gettext + poedit

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

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

多国语言解决方案gnu.gettext + poedit

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

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

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

然后回到poedit,执行更新

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

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

多国语言解决方案gnu.gettext + poedit

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

ok,国际化支持成功:

多国语言解决方案gnu.gettext + poedit


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

多国语言解决方案gnu.gettext + poedit的更多相关文章

  1. c#开发之多国语言解决方案gnu.gettext + poedit

    1.工具简介 1.1.关于i18n i18n其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数是“国际化”的简称. i10n为资源本地化,全称为Locali ...

  2. WPF应用程序支持多国语言解决方案

    原文:WPF应用程序支持多国语言解决方案 促使程序赢得更多客户的最好.最经济的方法是使之支持多国语言,而不是将潜在的客户群限制为全球近70亿人口中的一小部分.本文介绍四种实现WPF应用程序支持多国语言 ...

  3. Linux(CentOS6.5)下编译Popt报错”GNU gettext is required. The latest version”(gettext已经编译安装,但是没有安装在默认目录)的解决方案

    本文地址http://comexchan.cnblogs.com/,作者Comex Chan,尊重知识产权,转载请注明出处,谢谢!   背景: 编译popt的时候出现下述报错. 直接vi查看confi ...

  4. 解析大型.NET ERP系统 多国语言实现

    实现多国语言有许多种实现方案,无外乎是一种字符串替换技术,将界面控件的文本标签替换成相应语言的文字..NET Windows Forms实现多国语言的方法有以下几种: 1 .NET的方案,使用资源文件 ...

  5. 引擎设计跟踪(九.14.2j) TableView工具填坑以及多国语言

    Blade的UI都是预定义的接口, 然后由插件来负责实现, 目前只有MFC的插件. 最近加上了TableView的视图, 用于一些文件的查看和编辑, 比如前面在文件包的笔记中提到需写一个package ...

  6. jqGrid 中文配置 - grid.locale-cn.js 多国语言

    中文配置如下:多国语言(demo 内有官方下载连接 ): jqGrid 表格插件中文 grid.locale-cn.js 代码如下: ;(function ($) { /** * jqGrid Eng ...

  7. GNU Gettext

    一.简介 当前,无论是商业还是免费软件都是英文的,并用英文做为文档.直到现在,为使其它非英语语言用户也能够进行交互所做的工作仍然不足,所以这对非英语语言的国家很不利.然而,随着GNU gettext工 ...

  8. 高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源

    偶然间翻出了几年前写的一个小程序,把当时的资料整理整理分享一下. 当时为了给自己的软件实现多国语言功能,而开发的辅助工具:SE String Resource. 这是当时基于自己另一款 IDE 软件抽 ...

  9. 动态加载多国语言 ---- cookie + 浏览器

    一.多国语言缩写列表 因为涉及到浏览器的可接收语言,所以需要知道各个国家的语言缩写. 这个百度一下即可. en 英文 en_US 英文 (美国) ar 阿拉伯文 ar_AE 阿拉伯文 (阿拉伯联合酋长 ...

随机推荐

  1. ToString和Convert.ToString处理null值

    http://www.cnblogs.com/qinge/p/5687806.html文章来源 1.Convert.ToString能处理字符串为null的情况. 测试代码如下: 1 2 3 4 5 ...

  2. tomcat集群实例重复执行

    http://www.cnblogs.com/interdrp/p/3458882.html

  3. 160809225_叶桦汀_C语言程序设计实验2 选择结构程序设计_进阶

    #include<stdio.h> #include<math.h> int main() { int a,b,c,l,p,s; printf("请输入三个数:&qu ...

  4. Oracle表空间扩展

    From:http://blog.csdn.net/starnight_cbj/article/details/7398153 1.查看所有表空间使用情况 select b.file_id 文件ID号 ...

  5. js面向对象--类式继承

    //待研究//类式继承 //js中模拟类式继承的3个函数 //简单的辅助函数,让你可以将新函数绑定到对象的 prototype 上 Function.prototype.method = functi ...

  6. Optimistic and Pessimistic locking

    悲观锁 悲观锁是指假设并发更新冲突会发生,所以不管冲突是否真的发生,都会使用锁机制. 悲观锁会完成以下功能:锁住读取的记录,防止其它事务读取和更新这些记录.其它事务会一直阻塞,直到这个事务结束. 悲观 ...

  7. LeetCode(106):从中序与后序遍历序列构造二叉树

    Medium! 题目描述: 根据一棵树的中序遍历与后序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 posto ...

  8. UNIGUI换版本注意事项

    比如UNIGUI换版本注意事项 许多人在更换UNIGUI版本时,会遇到各种问题,报各样错.比如下面的: 然后便不知所措,怀疑是UNIGUI新版本有问题——不能安装成功.其实不然. 下面是正确的解决方法 ...

  9. Matlab图像匹配问题

    已知一个任意形状,查找在大图像中最接近的形状位置. 输入:一个小图形状和一张大图 输出:最接近的形状在大图中的位置 假设: (1)已知形状与目标形状有一定的形变. (2)形状与大图像均为二值图像,图中 ...

  10. linu下修改mysql数据库面

    修改密码:1.例如你的 root用户现在没有密码,你希望的密码修改为123456,那么命令是:mysqladmin -u root password 1234562.如果你的root现在有密码了(12 ...