在Django模板中,我如何翻译包含HTML的块?例如:
{% trans "Please" %}
<a href="{% url login %}?next={{ currentUrlPath }}">
{% trans "log in" %}
</a>
{% trans "in order to use MyApplicationName." %}
Run Code Online (Sandbox Code Playgroud)
拆分翻译的字符串允许我随时更改模板中的HTML,但我想将它放入单个翻译字符串会更有意义,如下所示:
{% url login as loginUrl %}
{% blocktrans %}
Please
<a href="{{ loginUrl }}?next={{ currentUrlPath }}">
log in
</a>
in order to use MyApplicationName.
{% endblocktrans %}
Run Code Online (Sandbox Code Playgroud)
但是HTML标记在翻译字符串中,即如果我想更改HTML(例如锚的CSS类),我必须重新翻译每种语言的字符串.
还有更好的选择吗?
我正试图让我的OSX Leopard上的Django工作
django_manage.py makemessages -l nl
Importing Django settings module settings
processing language nl
Error: errors happened while running xgettext on __init__.py
/bin/sh: xgettext: command not found
Run Code Online (Sandbox Code Playgroud)
在终端我得到相同的错误,除非我把它放在我的bash配置文件中:
PATH=$PATH:/Applications/Poedit.app/Contents/MacOS/
Run Code Online (Sandbox Code Playgroud)
但后来我得到了这个错误:
Error: errors happened while running msguniq
/bin/sh: msguniq: command not found os x
Run Code Online (Sandbox Code Playgroud) 我gettext在我的PHP代码中使用,但我有一个很大的问题.我的所有JavaScript文件都不受翻译的影响,有人可以告诉我一种简单的方法来将所选语言的翻译成JavaScript.
我想这样做:
$this->get('translator')->trans('notice.unregistered', array(), 'index');
Run Code Online (Sandbox Code Playgroud)
在Twig模板内部,所以我不必将其作为参数传递.怎么样?
gettext是否有任何通用的本地化/翻译替代方案?
开源或专有无关紧要.
当我说替代gettext时,我的意思是一个国际化的图书馆,有一个本地化的后端.
我问的原因是因为(除其他外)我发现gettext的方式稍微麻烦和静态,主要是在后端位.
当.po文件不再可用时,有没有办法将.mo文件转换为.po文件源?我需要编辑.mo文件的内容,但我没有.po文件.可能吗?
Django的国际化非常好(基于gettext,LocaleMiddleware),但是翻译模型名称和管理页面属性的正确方法是什么?我在文档中没有找到任何相关内容:
我想要"Выберитезаказдляизменения"而不是"Выберитеorderдляизменения".请注意,"订单"未翻译.
首先,我定义了一个USE_I18N = True在settings.py中激活的模型,运行django-admin makemessages -l ru.默认情况下,不会为模型名称和属性创建任何条目.
在Django源代码中,我发现:
$ ack "Select %s to change"
contrib/admin/views/main.py
70: self.title = (self.is_popup and ugettext('Select %s') % force_unicode(self.opts.verbose_name) or ugettext('Select %s to change') % force_unicode(self.opts.verbose_name))
Run Code Online (Sandbox Code Playgroud)
所以verbose_name元属性似乎在这里发挥了一些作用.试图用它:
class Order(models.Model):
subject = models.CharField(max_length=150)
description = models.TextField()
class Meta:
verbose_name = _('order')
Run Code Online (Sandbox Code Playgroud)
现在更新的po文件包含msgid 'order'可以翻译的文件.所以我把翻译放进去.不幸的是,运行管理页面会显示"Выберитеorderдляизменения"的相同组合.
我目前正在使用Django 1.1.1.有人可以指点我的相关文件吗?因为谷歌不能.;-)同时我将深入研究django源代码......
我目前正在将Web应用程序从基于数据库的国际化方法(每个单词在翻译表中有一个条目,以及实际翻译)迁移到基于Zend_Translate和CSV文件的方法.
我需要提供一种最终用户友好的方式来快速轻松地更新这些翻译.理想情况下,为了最大限度地降低破坏内容的风险,用户不会直接编辑CSV文件,而是显示带有字段的漂亮表单.
您是否知道一个独立的,基于PHP的,最终用户兼容的转换前端,它支持其中一个适配器Zend_Translate必须提供 - 理想情况下是gettext或csv?
像Python的/ Django的Rosetta, 但在PHP?Rosetta正是我所需要的:

但出于服务器设置原因,我非常希望继续使用PHP.
SimplePO看起来正朝着正确的方向发展,但过于简单 - 它似乎无法处理多种语言和目录以及复数形式.
是否有一个既定的方法嵌入的gettext locale/xy/LC_MESSAGES/*在PYZ捆绑?特别是让Gtks自动小部件翻译从 ZIP存档中获取它们.
对于其他嵌入式资源pkgutil.get_deta或inspect/ get_source工作得足够好.但系统和 Python gettext API依赖于bindtextdomain提供一个简单的旧localedir; 没有资源或字符串等
所以我无法设计一个可行的甚至是远程实用的解决方法:
虚拟gvfs/ gio路径
现在使用archive://file%3A%2F%2Fmypkg.pyz%2Fmessages%2FIRI可以直接从zip读取其他文件.但是glibs g_dgettext仍然只是系统库的一个薄包装器.因此,任何此类URL都不能用作localedir.
部分提取拉链
这就是我认为PyInstaller的工作方式.但是将.pyz应用程序捆绑在一起当然有点荒谬,只是在每次调用时都预先提取.
Userland gettext .mo/ .poextraction
现在手动读取消息目录或者只是使用普通的dicts来代替它.但仅适用于应用程序中的字符串.再也没办法让Gtk/GtkBuilder暗中接他们了.
因此,我不得不手动遍历整个小部件树,标签,文本,内部小部件,markup_text等.可能,但是meh.
FUSE安装
这将是超薄的.但是当然,拉链内容可以被访问gvfs-mount等等.就好像是某种记忆力.而且我怀疑它会保持可靠性,例如两个应用程序实例正在运行,或者之前的不正确终止.(就像dunno一样,由于系统库,比如gettext,在一个脆弱的拉链保险丝点上磕磕绊绊......)
用于翻译的Gtk信号/事件(?)
我发现蹲下了,所以我有点确定在Gtk/PyGtk/GI中没有替代机制来进行小部件翻译.Gtk/Builder期望并与 gettext相关联.
是否有更可靠的方法?
我正在建立一个大型的多语种网站,我正在考虑采用不同的方法使其多语言化.我能想到的可能的替代方案是:
据我所知,Gettext函数应该是最有效的,但我的要求是应该可以更改原始参考语言(英语)中的文本字符串,而不会将该字符串的其他翻译自动恢复为英语只是因为几句话改变了.Gettext可以实现吗?
什么是资源要求最低的解决方案?
使用Gettext函数或PHP文件与数组或多或少同等资源要求?
有关更有效解决方案的其他建议吗?
gettext ×10
django ×3
python ×3
localization ×2
php ×2
translation ×2
django-admin ×1
glib ×1
javascript ×1
multilingual ×1
mysql ×1
performance ×1
pygtk ×1
pyz ×1
symfony ×1
translate ×1
twig ×1
unix ×1