mono:国际化文本
来源:互联网 发布:免费淘宝客网站模板 编辑:程序博客网 时间:2024/05/17 09:08
在上一篇文章中介绍了mono的中文问题,不管怎样,我们总算可以让mono编译的程序显示汉字了。如果你要开发国际化的程序或者组件,你就应该使用Mono的国际化方法,处理相关的国际化文本。
在本篇文章中国际化专指程序中设计的字符串,不会讨论日期、货币等国际化问题。
现在,Mono利用gettext进行程序中字符串的翻译,你也可以采用gettext#进行国际化,但它不是Mono推荐的方式。
在Mono.Posix配件中的Mono.Unix命令空间下,有一个Catalog类,它包装了libintl提供国际化服务。
本文以一个控制台程序演示如果进行国际化处理。
先看一个不进行国际化的控制台程序:
using System;
class MainClass
{
public static void Main(string[] args)
{
Console.WriteLine("Hello everyone!My name is smallnest");
int i = 32;
Console.WriteLine("I'm {0} years old.",i);
}
}
其中涉及到两个字符串:
"Hello everyone!My name is smallnest"
"I'm {0} years old."
其中第二个字符串涉及到单复数的问题,作为一个友好的字符串,如果年龄是1的话,字符串应该为"I'm {0} year old.",其中的year应该为单数形式。
下面我们处理国际化:
首先在monodevelop中引入Mono.Posix.dll(如果手工编译,需要加-t: Mono.Posix),
然后Main.cs文件中加入
using Mono.Unix;
在Main方法中初始化Catalog类:
Catalog.Init("i18n","./locale");
程序在运行时将在. locale/zh_CN/ LC_MESSAGES/目录下查找i18n.mo文件,如果文件存在,并且含有国际化的文本,将使用国际化的文本替换,否则不替换。
最后,Main.cs文件如下:
Catalog.GetString方法是采用普通的方式替换文本。
Catalog.GetPluralString将根据条件选择单数形式的文本还是复数形式的文本,如果第三个参数是1,将采用单数形式的文本,否则采用复数形式的文本。
到Main.cs文件所在的目录下,运行生成Main.exe文件:
mcs –codepage:utf8 Main.cs
使用xgettext导出需要国际化的po文件:
xgettext --from-code=UTF-8 Main.cs -o zh_CN.po
翻译zh_CN.po文件:
# a sample for Internationalization
# smallnest <smallnest@gmail.com>
# http://www.kuaff.com
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION/n"
"Report-Msgid-Bugs-To: /n"
"POT-Creation-Date: 2005-12-15 11:32+0800/n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE/n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>/n"
"Language-Team: LANGUAGE <LL@li.org>/n"
"MIME-Version: 1.0/n"
"Content-Type: text/plain; charset=gb2312/n"
"Content-Transfer-Encoding: 8bit/n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;/n"
#: Main.cs:10
msgid "Hello everyone!My name is smallnest"
msgstr "大家好,我叫晁岳攀."
#: Main.cs:12
#, csharp-format
msgid "I'm {0} year old."
msgid_plural "I'm {0} years old."
msgstr[0] "我今年{0}岁了"
msgstr[1] "岁月不饶人,兄弟今年{0}岁了."
注意将其中Content-Type: text/plain; charset=charset修改为
Content-Type: text/plain; charset=gb2312
将zh_CN.po转化为zh_CN.mo文件:
mkdir -p locale/zh_CN/LC_MESSAGES
msgfmt zh_CN.po -o locale/zh_CN/LC_MESSAGES/i18n.mo
因为我们的locale设置zh_CN.gb2312,所以运行Main.exe程序将会显示中文输出,如下图所示:
- mono:国际化文本
- Android 国际化,文本国际化,图片国际化
- Struts动态文本国际化
- struts 动态文本国际化
- 固定文本的国际化
- 国际化动态文本(MessageFormat)
- 文本溢出与国际化
- xcode6 Storyboard,文本,图片国际化
- 第五天 iOS文本国际化
- qt-02-国际化软件文本
- Mono
- Mono
- mono
- Mono
- Mono
- Mono
- MONO
- 程序国际化及动态处理文本
- 2006年世界杯分组形式预测
- Ctrl+Enter提交事件
- 2005年,转型期的中国网络游戏
- 陈天桥的免费“阴谋”和史玉柱的网游“阳谋”
- 第十一章: Collections of Objects--(1.数组)
- mono:国际化文本
- xon_hcvt的BLOG开通啦
- 计算机网络工程技术要实行网上考试
- DLL工作原理
- 如何设置趋势科技Network Reputation Services(NRS)例外IP名单
- 在查询结果中如何加一个序列号!
- AJAX基础教程(1)
- (转)JavaScript 面向对象编程
- clearcase的license的相关问题