我们有两个.po文件,每个文件来自一个软件的不同分支.
我们需要将它们组合成一个.po文件.
这两个文件之间存在重复,理想的处理方式是使一个文件的字符串受到青睐(一致).
我们有一个SUSE系统,因此--output-file似乎没有根据我从网络搜索中找到的手册页忽略/合并Sun版本所具有的重复项的行为.(我们没有太阳机方便!)
有谁知道一个Java库,它会让我解析.PO文件?我只想创建一个ID和值的Map,这样我就可以将它们加载到数据库中.
我们正在使我们的网站国际化,允许多种语言.
我已经研究过php的"gettext"但是,如果我理解正确,我会看到一个很大的缺陷:
如果我的网页让"Hello World"作为静态文本.我可以把字符串作为<?php echo gettext("Hello World"); ?>
,使用工具生成po/mo文件.然后我会把文件交给译员继续工作.
几天后,我们想用英文改成文字说"Hello Small World"?我是否更改了gettext中的值?我是否创建了一个英文PO文件并在那里进行更改?如果您更改了gettext,它会将其视为一个新字符串,您将立即松开当前的翻译...
在我看来,渐渐地,php文件的内容到处都会有旧文本.或者翻译人员可能必须被告知"当你看到Hello World,而不是翻译Hello Small World".
我不知道我感到困惑.
在其他编程语言中,我看到他们使用的关键字如web.home.featured.HelloWorld
.
在PHP中处理翻译的最佳方法是什么?
谢谢
我正在制作一个多语言的Django网站.我创建了一个消息文件,填充并编译它.我用我想要的语言(希伯来语)检查了网站(在这种情况下是管理员),并且大多数短语都像希伯来语一样出现,但有些则没有.我检查了源代码,这些仍然显示为_('Whatever')
他们应该,它们也被翻译在消息文件中,是的,我记得这样做compilemessages
.
翻译的一些常见原因是什么?
随着gettext
你要么可以使用默认的系统范围内的区域设置目录,或使用指定一个自己bindtextdomain
.当编译的.mo转换文件在系统的默认位置不可用时,直接从源运行程序时这很有用.
在Python中你会这样做:
import gettext
from gettext import gettext as _
gettext.bindtextdomain('nautilus-image-manipulator', '/path/to/mo/folder')
gettext.textdomain('nautilus-image-manipulator')
Run Code Online (Sandbox Code Playgroud)
其中/path/to/mo/folder
包含熟悉的fr/LC_MESSAGES/nautilus-image-manipulator.mo
结构.这样的电话:
print _("Delete this profile")
Run Code Online (Sandbox Code Playgroud)
从本地.mo文件返回正确翻译的字符串,非常感谢.
在GTK + 2/pygtk中,存在gtk.glade.bindtextdomain
,但我想知道GTK + 3/PyGObject中是否有任何等价物.
为了给你一个具体的例子,这是Nautilus Image Manipulator的UI是如何从它的Glade文件创建的:
from gi.repository import Gtk
builder = Gtk.Builder()
builder.set_translation_domain('nautilus-image-manipulator')
builder.add_from_file(ui_filename)
return builder
Run Code Online (Sandbox Code Playgroud)
不是从Glade文件构建的UI部分(即从代码中设置)显示正确翻译,但Glade文件中的字符串仍显示为英文.
在我看来,在打电话builder.bind_text_domain('nautilus-image-manipulator', '/path/to/mo/folder')
之前我错过了某种呼叫builder.set_translation_domain
......任何想法如何执行此操作?
这是php手册中的一小段代码片段:
putenv('LC_ALL=zh_CN');
setlocale(LC_ALL, 'zh_CN');
bindtextdomain('domain', './locale');
textdomain('domain');
echo gettext('Hello');
Run Code Online (Sandbox Code Playgroud)
哪个会输出你在domain.mo
文件中定义的,但问题是只要Apache正在运行,gettext()
总是返回缓存的结果.
如果我改变的翻译你好到您好的domain.mo
,它仍将输出你好.
但是,通过更改和新名称的domain
参数可以解决此问题.像到.但是每次更新文件时编辑php文件真的很痛苦.bindtextdomain()
textdomain()
"domain"
"domain2"
.mo
有没有更好的方法来做这个,比如删除一些文件夹或调用一些PHP函数来完成这项工作?这样我就可以为此编写一个小脚本.
在线编辑gettext文件,有可能吗?
我对我所有的PHP项目使用gettext,但是有一个小问题的方面,想要我的用户可能会将我的语言从丹麦语翻译成挪威语,但是在这种情况下它是enste我知道是我需要从Poedit导出我的文件有任何.其他可以导出/导入我的文件的软件?对于Poedit我可以用export作为.
希望我能帮助我一点.
我手动创建了一个文件:test.po,内容如下:
msgstr"问候"
msgstr"Hello World"
现在我可以在编辑器中编辑翻译(hello world),如"poedit"和"GTranslated"(我正在使用Ubuntu).我甚至可以为该翻译添加评论.然而,"poedit"和"GTranslated"都不会让我添加一个新的翻译字符串 - 我在网上看起来没有用,看着其他编辑的截图,似乎没有一个"新"按钮.
我错过了什么?使用"普通"文本编辑器编辑新密钥然后在这些PO编辑器中编辑它们(无论它们可能是什么)似乎很愚蠢.(如果你不能说我是这个'gettext'世界的新手 - 我正在用Zend/PHP构建一个网站.)
我正在尝试通过遵循精彩的Django文档来国际化Django应用程序.问题是当我尝试运行命令来创建语言文件时:
python manage.py makemessages -l fr
Run Code Online (Sandbox Code Playgroud)
它输出一个错误:
CommandError: Can't find msguniq. Make sure you have GNU gettext tools 0.15 or newer installed.
Run Code Online (Sandbox Code Playgroud)
我的配置:
以前您将使用gettext
以下内容:
_('Hey {},').format(username)
Run Code Online (Sandbox Code Playgroud)
但是新的Python的f-string怎么样?
f'Hey {username}'
Run Code Online (Sandbox Code Playgroud)