我正在寻找一个.po/.mo编辑器.我使用gettext作为翻译文件,但不喜欢poEdit.它必须在Windows Vista上运行,如果它内置于Visual Studio 2008中,它会更好,所以我可以开发和翻译
我真的想要一些能帮助我翻译并使翻译更容易的东西.我想有建议和拼写检查
[没有选择?如果真的没有选择,我也可以做一些事情并编写代码,这样翻译就很容易了.您甚至可以整合http://dict.leo.org或查看Google翻译为查询提供的内容.]
我手动创建了一个文件:test.po,内容如下:
msgstr"问候"
msgstr"Hello World"
现在我可以在编辑器中编辑翻译(hello world),如"poedit"和"GTranslated"(我正在使用Ubuntu).我甚至可以为该翻译添加评论.然而,"poedit"和"GTranslated"都不会让我添加一个新的翻译字符串 - 我在网上看起来没有用,看着其他编辑的截图,似乎没有一个"新"按钮.
我错过了什么?使用"普通"文本编辑器编辑新密钥然后在这些PO编辑器中编辑它们(无论它们可能是什么)似乎很愚蠢.(如果你不能说我是这个'gettext'世界的新手 - 我正在用Zend/PHP构建一个网站.)
在使用WAMPserver(Apache,MySQL,PHP)的Windows上,我有以下内容:
//test.php
if (!defined('LC_MESSAGES'))
define('LC_MESSAGES', 6);
$lang = "sv";
putenv("LANG=$lang");
setlocale(LC_ALL, $lang);
$domain = "messages";
bindtextdomain($domain, "./locale");
textdomain($domain);
echo _("This is a string");
Run Code Online (Sandbox Code Playgroud)
它工作正常,即它输出"这是一个字符串",这意味着我已经gettext
正确设置.
但是我在世界上如何创建一个.po
文件?
我下载了Poedit,但我看不出如何使用该软件实现这一点.
任何帮助是极大的赞赏!
我正在寻找谷歌翻译的前端,支持使用NGETEXT样式复数转换GNU gettext PO文件,例如.msgstr [0] msgstr [n].
我找到了几个PO文件的免费翻译服务[1],但这些服务都不支持ngettext样式复数字符串.我们的PO文件有许多需要转换的复数.
注意:我们认为谷歌翻译并非接近生产质量.我们仅使用翻译的PO文件进行测试/概念验证演示.
任何建议赞赏.
马尔科姆
[1]免费,托管的PO翻译服务
我现在很难用PHP的gettext()函数进入翻译文件并用Poedit创建文件.Poedit也没有附带帮助文件,我尝试了许多在线发现但没有任何作用的东西..我在Mac OSX上使用XAMPP配置.
在OSX上,我的XAMPP目录是
/Applications/XAMPP/xamppfiles/htdocs/
Run Code Online (Sandbox Code Playgroud)
在这个目录里面我创建了gettext.php
<?php echo _("Hello World"); ?>
Run Code Online (Sandbox Code Playgroud)
和以下文件夹:
/locale/
/locale/it_IT/LC_MESSAGES/
Run Code Online (Sandbox Code Playgroud)
当我做的时候使用Poedit>文件>新目录
语言:意大利语
国家:意大利
Charset:UTF-8
源代码字符集:UTF-8
基本路径:/ Applications/XAMPP/xamppfiles/htdocs /
比我将default.po保存到/ locale/it_IT/LC_MESSAGES /
"更新目录失败.点击'更多>>'了解详情
13:04:10: Poedit did not find any files in scanned directories.
13:04:11: Entries in the catalog are probably incorrect.
13:04:11: Updating the catalog failed. Click on 'More>>' for details.
Run Code Online (Sandbox Code Playgroud) 我用德语中的所有文本启动了我的PHP应用程序,然后使用gettext提取所有字符串并将它们翻译成英语.
所以,现在我有一个.po文件,其中包含德语中的所有msgids和英语中的msgstrs.我想切换它们,以便我的源代码包含英文为msgids,原因有两个:
我可以手动执行此操作,这是一种任务,我预计它将花费更多时间为它编写一个自动例程(因为我对shell脚本非常糟糕)而不是手动执行.但我也期望鄙视手动计算机劳动的每一分钟(感觉就像矛盾,对吧?)就像我一直这样.
有人曾经这样做过吗?我认为这将是一个常见的问题,但找不到任何东西.非常感谢.
示例问题:
<title><?=_('Routinen')?></title>
#: /users/ruben/sites/v/routinen.php:43
msgid "Routinen"
msgstr "Routines"
Run Code Online (Sandbox Code Playgroud)
我以为我会把问题缩小..po文件中的开关当然没有问题,就像它一样简单
preg_replace('/msgid "(.+)"\nmsgstr "(.+)"/', '/msgid "$2"\nmsgstr "$1"/', $str);
Run Code Online (Sandbox Code Playgroud)
对我来说问题是在解析.po文件时搜索我的项目文件夹文件_('$msgid')
并替换的例程_('msgstr')
(在所有.po文件包含包含所有文件路径的注释之后,这可能不是最优雅的方式) msgstr发生).
之后鬼混与akirk的回答一点,我遇到了一些更多的问题.
_('xxx')
和_("xxx")
调用,所以我必须小心(un)转义.
msgid = ""
"line 1\n"
"line 2\n"
msgstr = ""
"line 1\n"
"line 2\n"
我今晚必须停止工作.似乎仍然使用解析器而不是RegExps不会有点矫枉过正.
我在我的应用程序中加入了类似gettext的本地化系统,但我的翻译功能如下所示:
t($category, $string, [$plural_string, $number, $vprintf_arguments])
Run Code Online (Sandbox Code Playgroud)
我的PoEdit关键字:
t:2
t:2,3
Run Code Online (Sandbox Code Playgroud)
$string
,它显然有效$string
而且$plural_string
- 但它不是:(它只能看到$string
,所以我没有得到解析的复数形式......我该如何解决?我不想将我的函数切换到不同的参数格式,因为我喜欢这个:(
此功能也像sprintf替换:
无论如何,PoEdit不应该干扰非引用的论点,对吧?我的意思是它只会解析$ plural_string作为字符串'abc abc'
我已经开始使用gettext来翻译我发送给用户的文本和消息.我使用poedit作为编辑器,但我正在努力处理动态消息.
例如,我有像登录的东西,我有一个变量,告诉错误的类型.
$this->translate('page-error-' . $error);
Run Code Online (Sandbox Code Playgroud)
当我从poedit自动更新时,它会被读取为"page-error-".我所做的是有一个文件,我可以将自己的伪调用放入translate方法,并在自动更新时将所有可能的键添加到我的poedit中.
我不是特别喜欢这种情况.你们是怎么做到的.
谢谢你的想法
我创建了一个我希望翻译的WordPress主题.
在我的主题中,我使用了woocommerce
(ie <?php _('Your cart', 'woocommerce'); ?>
)的一些翻译.
Theese woocommerce字符串,我不想再翻译,因为它们已经翻译过了.但是当我使用poedit扫描我的主题时,它当然会找到所有文本域.
所以我的问题是:
如何告诉POEdit只选择特定文本域中的字符串?
__('Something', 'my-text-domain')
_e('Something else', 'my-text-domain')
我找到了这个答案:
但它似乎对我不起作用.我已ri:1,3c
按照描述添加到列表中,但它没有改变任何内容,我也没有其他任何关于如何处理它的线索.
看看我是怎么做到的: