【问题标题】:Django JavaScript translation empty catalog (i18n/jsi18n) [closed]Django JavaScript 翻译空目录(i18n/jsi18n)[关闭]
【发布时间】:2012-10-27 09:19:31
【问题描述】:

我的 jsi18n JavaScript 中的目录总是空的。我已经尝试了 StackOverflow 上的所有解决方案,包括 Empty catalog when internationalizing JavaScript code,但目录仍然是空的。

我的设置是这样的:

project_dir
- locale
  - nl (contains LC_MESSAGES with django.po and djangojs.po)
- app1
- app2
- main_app
  - settings.py
  - urls.py
  - wsgi.py

在 settings.py 我有

# Where to find locale
LOCALE_PATHS = (
    os.path.join(SITE_ROOT, 'locale'),
)

SITE_ROOT 是我的项目目录的绝对路径,所以这转换为

在 urls.py 我有

# i18n
js_info_dict = {
    'domain': 'djangojs',
    'packages': ('wrnpro', ),
}

    (r'^jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict),

作为我的网址的一部分。

如果我运行应用程序并调用 http://localhost:8000/jsi18n/ 我会得到

/* gettext library */
var catalog = new Array();
function pluralidx(count) { return (count == 1) ? 0 : 1; }
… 

到目前为止,我已经尝试了各种设置等。我能找到,但目录仍然是空的。

在运行make messagescompile messages 时,我的JavaScript 会找到并翻译文本字符串。 django.po 和 .mo 文件位于 locale 目录中。

有人吗?

【问题讨论】:

  • 这些建议似乎都不起作用。我把它搁置了一个星期左右,几乎对所有东西都安装了几个更新,当我在星期五早上坐下来最终解决这个问题时,它已经自行修复了。完全惊呆了,我看到 JavaScript 翻译现在可以工作了,而且从那以后它们一直在工作。我不知道是什么触发了这个。我的语言环境目录仍在项目级别。

标签: javascript django


【解决方案1】:

这就是最终对我有用的东西:

js_info_dict = {
   'domain': 'django',
   'packages': None,
}

urlpatterns = [
    url(r'^jsi18n/$', javascript_catalog, js_info_dict, name='javascript-catalog'),
    # ...
]

还是不行?疑难解答提示:

我不知道具体为什么会这样,但我可以告诉你我是如何发现如何让它发挥作用的。如果您使用相同的故障排除技术,也许您也会找到方法。我使用 Python 调试器,如下所示:

def javascript_catalog_pdb(*args, **kwargs):
    import pdb
    pdb.set_trace()
    return javascript_catalog(*args, **kwargs)

url_patterns = [
    url(r'^jsi18n/$', javascript_catalog_pdb, js_info_dict, name='javascript-catalog'),
    ...
]

然后使用 PDB,我踏入了javascript_catalog,直到我排队:

catalog, plural = get_javascript_catalog(locale, domain, packages)

然后我在调试器中尝试了 domainpackages 的不同值,直到我发现我需要的值。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,当我将我的语言环境目录从我的项目文件夹移动到我的应用程序文件夹时它起作用了,所以似乎 makemessages 需要在应用程序级别运行。我认为您的设置文件中不需要LOCALE_PATHS

    【讨论】:

      【解决方案3】:

      对于您当前用户的语言,您是否有任何已完成的翻译,或者您是否只有存根?该目录将仅包含实际已翻译的字符串的值。

      ie,如果你的英文 po 文件中有这个:

      #: static/js/events.js:159
      msgid "Open side panel"
      msgstr ""
      

      目录中不会出现任何内容(如果您使用英文访问它)。但如果你有这个:

      #: static/js/events.js:159
      msgid "Open side panel"
      msgstr "Open side panel"
      

      那么会有的。

      【讨论】:

      • 我在 django 和 djanojs 目录上都有 100% 的翻译,我将英语 (en) 翻译成荷兰语 (nl)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 2014-01-15
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多