我想在我的 - 相当大的 - wxwidgets应用程序中使用韩语翻译。该应用程序使用wxwidgets翻译框架,该框架基于gettext。
我有法语,德语和俄语的翻译工作。无论如何我想去unicode,但我的第一个问题是:
我的应用程序是否需要unicode支持才能显示韩语和日语?
如果是这样, - 只是为了兴趣 - 俄罗斯为什么没有工作,因为他们有西里尔字母?
我有成千上万的字符串文字。我必须在每个前面加上'L'吗? (wxString foo(“foo”) - > wxString foo(L“foo”))
如果是这样,有人建立一个正则表达式或sed或perl脚本来执行此操作。 500 .cpp文件? (pleeze!=))
这会在wxWidgets 3.0中发生变化吗?
Unicode问题概述:我在许多描述性和技术性方面使用这些字符串文字..作为显示文本以及GLSL着色器的部分以及XML。这些API将char * / const char *作为函数参数,因此我的内部wxString表示在这些区域中无关紧要。理论与实践:这是真的吗?分享一些经验,有人吗?
我做了一些文本处理(比较,字符串查找等) - unicode与ansi有任何逻辑差异吗?
使用Unicode时是否会产生可重映射的性能?
谢谢! 温迪
答案 0 :(得分:2)
解决一些的问题......
- 我的应用程序是否需要unicode支持才能显示韩语和日语?
- 如果是这样, - 只是为了兴趣 - 俄罗斯为什么没有工作,因为他们有一个西里尔字母?
俄语适合单字节字符集,就像西欧语言一样(尽管它是一个不同的字符集)。韩国人和日本人(和中国人)没有。有很多解决方法,但我所知道的最优雅的是使用Unicode,因此您不需要为每个语言环境重建应用程序;只需更改其消息目录。
- Unicode问题概述:我以许多描述性和许多技术方式使用这些字符串文字..作为显示文本以及GLSL着色器的部分以及XML。这些API将char * / const char *作为函数参数,因此我的内部wxString表示在这些区域中无关紧要。理论与实践:这是真的吗?分享一些经验,有人吗?
只有要向(非技术)用户显示的字符串才需要本地化,因此它们是唯一必须使用Unicode的字符串。最常见的方法是使用UTF-8(这是一种特殊的Unicode编码方式),因为这意味着ASCII字符串 - 在程序内部传递的最常见类型 - 完全相同,这简化了很多事情。不足之处在于您不再对字符串进行廉价索引,因为并非所有字符都与字节的长度相同。这可以是从非问题到正确的皇家阻碍PITA的任何事情,取决于程序正在做什么。
- 我做了一些文本处理(比较,字符串查找等) - unicode与ansi有任何逻辑差异吗?
比较工作正常,简单的字符串查找也是如此。其他操作(例如,获取字符串的20 th 字符,或者计算出你找到子字符串的字符串中有多少字符)是令人讨厌的,因为你没有恒定的字符宽度。使用宽字符可以减轻恶意,但是它们不太适合用于外部数据(它们会引入字节顺序的潜在问题,除非你使用字节顺序标记,这就是另一个问题)。
- 使用Unicode会对性能产生任何影响吗?
取决于你的确切行为。使用UTF-8,如果你现在主要处理ASCII文本,那么对于大多数操作来说,你几乎不会遇到性能问题。对于宽字符,你会为每个字符占用更多内存,这自然会产生性能影响(但这可能是可以接受的,因为它确实意味着你有恒定时间索引)。
答案 1 :(得分:2)
答案 2 :(得分:0)
1.我的应用程序需要unicode支持才能显示韩语和日语 语言
感谢Oswald,我发现你可以在你的wxwidgets应用程序中使用unicode进行韩语翻译。更改(至少在windows下)设置非unicode感知程序。但我仍然需要检查这是否足以满足整个应用程序。
3.我有数以千计的字符串文字。我必须在每个前面加上 他们每个人都有'L'? ( wxString foo(“foo”) - > wxString foo(L“foo”))
如果必须在3.0之前使用带有wxwidgets的unicode,则必须这样做。但是不要在wxwidgets下使用'L',使用wxT(“foo”)
4.如果是,有人建立了一个正则表达式或sed或perl脚本来执行此操作。 500 .cpp文件?
我做过,至少在Visual Studio下搜索和替换:
Search: {"([^"]*)"}
Replace: wxT(\1)
但要小心!将使用#include wxT(“file.h”)替换所有字符串文字,#include“file.h”
- 这会改变wxWidgets 3.0吗?
醇>
是。见上面的答案/引用。