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文件中,执行替换

c#开发之多国语言解决方案gnu.gettext + poedit的更多相关文章

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

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

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

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

  3. [Windows Phone] 以多国语言做为开发前提 (2)

    原文:[Windows Phone] 以多国语言做为开发前提 (2) ? 前言 在先前的文章 [Windows Phone 开发 - 以多国语言做为开发前提 (1)] 中说明了简单的多国语言范例,今天 ...

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

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

  5. [Windows Phone] 以多国语言做为开发前提 (1)

    原文:[Windows Phone] 以多国语言做为开发前提 (1) ? 前言 在先前 TechDays 2013 的课程 [开发 Windows Phone 商务应用程式就是这麽快] 中,其中一个部 ...

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

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

  7. C#实现多国语言的界面切换

    在PictureStudio中,我需要实现多国语言的界面切换,而且切换各种语言版本的时候希望程序是动态的加载语言,不希望切换语言后重新启动程序. 实现这样的功能可以有很愚蠢的方法,比如说你可以在程序中 ...

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

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

  9. (2)esp8266多国语言翻译系统

    http://bbs.mydigit.cn/simple/?t2649513.html 这个想法不错 原来只是想用esp8266搞一个百度的多国语言翻译系统出来的,只是为了尝试如何调用各种web ap ...

随机推荐

  1. Centos 6.5下一个SNMP简单配置(snmp protocol v3,监控宝)

    Centos 6.5下一个SNMP简单配置(snmp protocol v3.监控宝) jom_ch@2014/7/25 1,安装 >yum -y install net-snmp net-sn ...

  2. Visual Studio Team Services使用教程--Readers tfs组checkin权限修改

    你也可以只开启部分代码的权限 把上面开启的整个应用的权限先去掉 只开启一个文件的权限

  3. Asp.NET MVC3 使用 SignalR 实现推

    一,简单介绍 Signal 是微软支持的一个执行在 Dot NET 平台上的 html websocket 框架. 它出现的主要目的是实现server主动推送(Push)消息到client页面,这样c ...

  4. 24L01/SI24R1调试笔记

    1.SPI MSB优先,8Bit寄存器地址与内容: 2.寄存器结构与之前使用的LT8900不同,分为R.W寄存器与特殊功能寄存器: 3.特别注意:在TX.RX.RT中断或者轮询后置1,必须写1清零与清 ...

  5. 【Unity 3D】学习笔记29:游戏的例子——简单的小制作地图

    无论学习.只看不练是坏科学. 因此,要总结回想这怎么生产MMROPG小地图的游戏.于MMROPG游戏类,在游戏世界中行走时导致各地,通常在屏幕的右上角,将有一个区域,以显示当前的游戏场景微缩.在游戏世 ...

  6. Linux 常用命令汇总

    1.shutdown -s 时间 如果是想马上关机就直接输入0或者now: 2.init 0 这个是运行级别关机: 3.halt 这个命令不是很好用: 4.power off 这个命令也是很好用的. ...

  7. hdu 4864 Task---2014 Multi-University Training Contest 1

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4864 Task Time Limit: 4000/2000 MS (Java/Others)    M ...

  8. ABP应用层——数据传输对象(DTOs)

    ABP应用层——数据传输对象(DTOs) 基于DDD的现代ASP.NET开发框架--ABP系列之16.ABP应用层——数据传输对象(DTOs) ABP是“ASP.NET Boilerplate Pro ...

  9. jsmart 前结合案例

    前绑定jsmart这是一个不错的选择.之前通过经常使用的项目中的.最近涉及的领域的后端部.jsmart有些使用相对较少,主要是因为他想引用文件,我写的模板,在一个简单的项目,直接使用js界,很复杂的前 ...

  10. View Component

    View Component 在之前的MVC中,我们经常需要类似一种小部件的功能,通常我们都是使用Partial View来实现,因为MVC中没有类似Web Forms中的WebControl的功能. ...