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

c开发之多国语言解决方案gun.gettext + poedit1 工具简介 1 1 关于 i18ni18n 其来源是英文单词 internationa 的首末字符 i 和 n 18 为中间的字符数是 国际化 的简称 i10n 为资源本地化 全称为 Localization 因为首字母 I 与末字母 N 之间共 10

大家好,欢迎来到IT知识分享网。

1.工具简介

1.1.关于i18n

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

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

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

1.2.关于gun.gettext

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

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

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

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

  • oscchina的gun.gettext页面:http://www.oschina.net/p/gettext/?fromerr=sbwuxgXY
  • gun的gettext官方页面:http://www.gnu.org/software/gettext/
  • gun.gettext.net(后面会用到):http://sourceforge.net/projects/gettextnet/

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

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

1.3.关于POEdit

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

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

2.使用

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

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

2.1在poedit中配置

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

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

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

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

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

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

最后设置提取字符:

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

提取字符的规则非常复杂,如果需要自定义的话可以在文件-首选项-提取器中修改

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

其他以此类推

2.2转出po文件

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

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

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

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

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

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

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

c开发之多国语言解决方案gun.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文件夹中,它会自动识别相对路径

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

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

ok,国际化支持成功:

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

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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/166254.html

(0)
上一篇 2025-01-05 08:00
下一篇 2025-01-05 08:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信