因此,我们确信我们将在国际上采用我们的产品,并最终需要将其国际化。你推荐我们做多少国际化?
我想换句话说,现在是否有任何国际化变得容易,但如果我们让代码库成熟并且如果我们现在选择开始这样做会不会减慢我们的速度,可能会更糟糕?
使用的技术:C#,WPF,WinForms
答案 0 :(得分:32)
在编写代码库本身的所有字符串之前,立即做好准备。
此后的一切都为时已晚。它现在或永远不会!
现在做好准备是一件额外的努力,但不这样做会最终变得更加昂贵。
如果您不遵循以下链接中的所有指导原则,至少要注意摘要中的1,2和7点,这些点现在非常便宜,并且在我的经验中会造成最大的痛苦。
检查这些指南,亲自了解为什么现在开始做好准备并做好一切准备。
小提取物:
答案 1 :(得分:3)
我参与了两个实现国际化的项目:一个C#ASP.NET(在我加入项目之前就存在)应用程序和一个PHP应用程序(使用免费的国际化控制和我自己的管理应用程序自制我自己的方法)。
您应该将所有文本(标签,按钮文本等)作为数据存储在数据库中。用键引用这些(我更喜欢使用前4个单词,大写,空格转换为下划线和非alpha数字被剥离),当你有副本时,在末尾添加一个数字。这个关键方法的好处是程序员只需通过查看密钥就可以非常了解文本内容。
编写实用程序以提取数据并构建您添加到项目中以进行编译的.NET资源文件。为每种语言创建单独的资源文件。在您的代码中,使用键指向正确的条目。
我会浏览有关该主题的MS文件: http://www.microsoft.com/globaldev/getwr/dotneti18n.mspx
要避免的一些基本事项:
答案 2 :(得分:2)
我将添加存储和操作字符串数据为Unicode(MS SQL中的NVARCHAR)。
答案 3 :(得分:1)
认为关于......
的一些问题您是否可以将您的应用程序的英文版本的发货延迟,以节省一些国际化费用?
如果您没有快速收到英文版的现金流,您还会进行交易吗?
如果您没有从某些客户那里快速获得有关它的
,那么您将如何获得正确的用户界面?在必须将UI国际化之前,您多久会重写一次UI?
英语客户是否希望能够在UI中自定义字符串,例如不是每个人都称之为“发货单”的想法。
国际化的痛苦很大一部分是确保你不打破英文版,对UI的自动系统测试是否有更好的投资?
我认为我将永远做的唯一事情是:“不要使用从连接短语构建的复合字符串”,如果你这样做,不要传播代码通过许多方法构建单个字符串。
让您的UI自动调整大小(和布局)以应对标签的长度等,如果您能够以低廉的价格购买,这将为您节省大量时间。有许多用于Windows窗体的第三方控件集,可以让您标记文本框等,而无需将标签作为单独的控件放置。
我刚刚开始国际化WinForms应用程序,我们希望大多能够使用每个控件的“名称”作为查找键,而不必将批次移动到资源文件等。它并不总是像你一样难首先想想......
答案 4 :(得分:1)
您可以使用NGettext.Wpf(可以从NuGet进行安装,是的,我是作者,但出于其他答案中列出的无奈之意,我做到了。)
它是托管在github repository上的,这里是撰写本文时的入门部分:
NGettext.Wpf旨在与依赖项注入一起使用。您需要在应用程序的入口处调用以下命令:
NGettext.Wpf.CompositionRoot.Compose("ExampleDomainName");
"ExampleDomainName"
字符串是域名。这意味着当当前区域性设置为"da-DK"
时,将相对于WPF应用程序的运行位置从"Locale\da-DK\LC_MESSAGES\ExampleDomainName.mo"
加载翻译(您必须在应用程序中包含.mo文件,并确保将其复制到输出目录)。
现在您可以在XAML中执行以下操作:
<Button CommandParameter="en-US"
Command="{StaticResource ChangeCultureCommand}"
Content="{wpf:Gettext English}" />
哪个演示了此库的两个功能。最重要的是Gettext标记扩展,它将确保将Content
设置为相对于当前区域性的“英语”翻译,并在更改当前区域性时对其进行更新。它演示的另一个功能是ChangeCultureCommand
,它将当前区域性更改为给定区域性,在这种情况下为"en-US"
。
我也强烈建议您从gettext实用程序手册中阅读Preparing Strings。
答案 5 :(得分:0)
如果您使用测试数据,请使用非英语(例如:俄语,波兰语,挪威语等)字符串。 编码偷看它在每个角落都有点难看。如果不在你自己的库中,那么在外部库中。
我个人偏爱俄语,因为虽然我不会说俄语(尽管我的名字来源),但它里面有外国字符,它占用的空间比英语还要多,因此测试你的间距。
不知道这是否是语言特定的,或者仅仅因为我们的俄语翻译喜欢冗长的字符串。
答案 6 :(得分:0)
国际化将让您的产品在其他国家/地区使用,这很容易并且应该从一开始就完成(这样一来,全世界的英语人都可以使用您的软件),这3条规则将帮助您完成大部分工作:
本地化正在将软件翻译成不同的语言,这是困难且昂贵的,一个良好的开端是永远不要硬编码字符串,也不要用较小的字符串构建句子。