有没有人有过使用GNU gettext进行国际化开发大型Java应用程序的经验?我发现我真的很喜欢在我的源代码中使用英文文本,但我想确保我正在做的事情对于我所参与的相对较大的软件项目是切实可行的.
如果您有这方面的经验,您使用什么来查找Java中的资源?我目前正在尝试Gettext Commons(http://code.google.com/p/gettext-commons/),到目前为止似乎运行良好.
gettext的任何替代方法都可以将原始文本保留在源代码中?Windows上支持的类似工具会很棒.
有一些关于gettext(w/Poedit)的教程......不幸的是,它主要用于UNIX环境.更不幸的是,我在Windows XP上运行我的WAMP服务器(但我正在为UNIX环境开发),并且没有一个教程可以让gettext正常工作.在手册页(http://us3.php.net/manual/en/book.gettext.php)中,它似乎是Windows环境中的不同进程.我已经在评论中尝试了一些解决方案,但我仍然无法让它工作!拜托,我花了很多时间在这上面,希望有人可以指出我正确的方向让这个东西上班!(而且我确信还有其他人与我分享我的挫折感).到目前为止,我的设置,我只输出"Hello World!" 而我应该得到翻译的字符串.
这是我的设置/代码到目前为止:
<?php
// test.php
if (!defined('LC_MESSAGES')) {
define('LC_MESSAGES', 6);
}
$locale = "deu_DEU"; // apparently the locales are different on a WINDOWS platform
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("greetings", ".\locale");
textdomain("greetings");
echo _("Hello World");
?>
Run Code Online (Sandbox Code Playgroud)
文件夹结构
root: C:\Program Files\WampServer 2\www test.php: C:\Program Files\WampServer 2\www\site .po: C:\Program Files\WampServer 2\www\site\locale\deu_DEU\LC_MESSAGES\greetings.po .mo: C:\Program Files\WampServer 2\www\site\locale\deu_DEU\LC_MESSAGES\greetings.mo
请指教!谢谢你的时间 :)
为什么这个Django代码_在'has favicon'前面使用
has_favicon = models.BooleanField(_('has favicon'))
Run Code Online (Sandbox Code Playgroud) 我正在按照本教程使用PHP gettext构建多语言网站http://onlamp.com/pub/a/php/2002/06/13/php.html
直到这部分,我理解教程:
在准备好所有目录之后,是时候创建实际的"pot"文件,因为它通常被称为:messages.po文件.为此,您需要使用gettext()函数的PHP文件来"标记"要翻译的字符串并使用xgettext命令.
$ xgettext -n *.php
Run Code Online (Sandbox Code Playgroud)
我是否必须在命令行中编写它?我执行该命令时必须在哪个文件夹中?这是该命令的Linux版本还是Windows?
(我在我的wamp ini文件中启用了gettext扩展)我是否必须从GNU网页下载gettext utilites才能创建.po文件?
我正在寻找谷歌翻译的前端,支持使用NGETEXT样式复数转换GNU gettext PO文件,例如.msgstr [0] msgstr [n].
我找到了几个PO文件的免费翻译服务[1],但这些服务都不支持ngettext样式复数字符串.我们的PO文件有许多需要转换的复数.
注意:我们认为谷歌翻译并非接近生产质量.我们仅使用翻译的PO文件进行测试/概念验证演示.
任何建议赞赏.
马尔科姆
[1]免费,托管的PO翻译服务
我使用gettext来翻译我的用户界面.我想在符号%中将符号写为UI标题的一部分,但由于它具有特殊含义,因此无法按预期工作.我怎样才能逃脱百分比符号?
我正在使用gettext为一个php项目做i18n.在翻译由id替换的长短语时,我想使用自动注释功能为翻译人员提供提示.我想要获得的是以下po文件
#: full-path-to-file/index.phtml:3
#. a very long text which should replaced by _('foobar')
msgid "foobar"
msgstr ""
Run Code Online (Sandbox Code Playgroud)
通过这种方式,当他foobar在程序员评论框中使用POEdit或某些模拟工具查看密钥时,翻译人员可以看到他应该翻译的内容.
我试过这个代码,但它不起作用
<?php
/// TRANSLATORS: a very long text which should replaced by _('foobar')
_('foobar');
?>
Run Code Online (Sandbox Code Playgroud)
我错过了什么或自动评论只是不适用于PHP?
即使维基百科提到这个功能,我也试图在C文件中复制他们的例子,但即使使用C,我也无法使用它.我使用的命令行是
xgettext -C -o - main.c
Run Code Online (Sandbox Code Playgroud)
但生成的输出是
#: main.c:16
#, c-format
msgid "My name is %s.\n"
msgstr ""
Run Code Online (Sandbox Code Playgroud)
所以我肯定错过了一些东西,我应该使用任何xgettext标志或特定版本来启用此功能.
我正在使用.po公司翻译系统生成的一组文件(如果相关,则使用Pootle).我使用该实用程序(使用运算符,检查文件的格式)将这些文件转换为.mo(文件的二进制对应文件),我收到以下错误:.pomsgfmt-C
$ msgfmt -v -C default.po
default.po:1:2: syntax error
msgfmt: found 1 fatal error
Run Code Online (Sandbox Code Playgroud)
我已经广泛搜索了一种获取更多信息的方法,这些信息正是导致msgfmt抛出此错误的原因.
我也尝试删除文件的前几行(它们不是目录的一部分,只是注释或空翻译字符串).
我倾向于认为这是一个文件编码问题,但我没有处理过这类事情,所以我更愿意承认这是用户错误.
有谁知道如何用这些文件更具体地诊断错误?此外,所有本地化文件都表现出相同的行为,而不仅仅是一个特定的文件.
我需要本地化一个仅限Windows的PHP Web应用程序,我正在评估gettext扩展,但我正在努力使其在我的Windows 7开发框中工作.我使用了试验和错误以及Process Monitor来克服糟糕和不准确的文档,并且我设法_()从*.po目录中创建与计算机的默认语言环境相对应的显示字符串(在我的情况下是现代西班牙语).我默默地忽略了设置不同语言环境的所有尝试.
我写了一个包含大量冗余内容的测试脚本:
<dl><?php
define('DIR_LOCALE', __DIR__ . DIRECTORY_SEPARATOR . 'locale');
bindtextdomain('general', DIR_LOCALE);
bind_textdomain_codeset('general', 'UTF-8');
textdomain('general');
if(!defined('LC_MESSAGES')){
define('LC_MESSAGES', 5);
}
$pruebas = array(
'enu',
'es_ES',
'en_GB',
'english-uk',
'Spanish_Spain.1252',
'esn',
'spanish',
'spanish-modern',
);
foreach($pruebas as $locale){
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
putenv("LC_MESSAGES=$locale");
setlocale(LC_MESSAGES, $locale);
putenv("LANGUAGE=$locale");
putenv("LANG=$locale");
?>
<dt><?=htmlspecialchars($locale)?></dt>
<dd><?=_('codigo_idioma')?></dd>
<?php } ?>
</dl>
Run Code Online (Sandbox Code Playgroud)
在我的情况下,<?=_('codigo_idioma')?>总是打印es_ES@modern.
我有PHP/5.4.5但是我希望它可以在客户拥有的任何合理的最新服务器上运行.
我已经阅读了许多关于即使在Windows上也需要安装语言环境的模糊引用,但没有确切的细节.问题是什么?
(我知道常见的建议是转储gettext并使用任何其他库.)
进一步测试:
我的代码在另外两台计算机上完美无瑕地运行:32位Windows Vista和32位Windows 7 32位.它在我的计算机(64位Windows 7)和另一台(32位Windows Server 2003)中失败
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls]注册表树与其他七个框相同. …我想让i18n使用我的OCaml代码(将短信翻译成用户的首选语言).大多数可翻译字符串是一小组函数之一的第一个非标记参数.例如
print "Feed '%s':" new_feedraise_safe "Local feed file '%s' does not exist" pathlog_warning ~ex "Error checking signature for %s" feed在GUI代码中,也~label应该提取参数中的字符串.
有什么方法可以自动提取这些字符串吗?为了使事情变得更有趣,我也使用了一些语法扩展(例如Lwt).
我看到有一个ocaml-gettext包,但是:
f_,s_,等).$NAME),然后也无法卸载,这也表明它没有被大量使用.人们实际使用/推荐什么?