python - 为什么 JavaScript 文件在 Django 中应该以不同的方式本地化?

标签 python django localization

本地化 Django 应用程序时,makemessages 命令只是解析所有 TXT、HTML 和 PY 文件并为它们生成 PO 文件,但本地化 JS 文件时,您需要运行 djangojs命令。我还没有深入研究 Django 源代码来弄清楚为什么这样做会有所不同。有人可以解释一下吗?

我读到,在生产环境中,Apache 用于提供应用程序文件,而像 Nginx 这样的简单代理则用于提供静态文件,因为这大大减少了应用程序服务器上的负载。在这种情况下,我猜它的工作原理是这样的:渲染模板时,Django 检查请求的区域设置,加载适当的本地化文件并提供模板,但另一方面,作为静态媒体的 JS 不会被 Django 解析。是这个吗?

(这是我第一次涉足 Django 本地化世界,我充满了疑问,其中许多人的答案我似乎找不到,因此写了这篇文章。)

谢谢

最佳答案

处理方式不同的原因在docs中。

Adding translations to JavaScript poses some problems:

  • JavaScript code doesn't have access to a gettext implementation.
  • JavaScript code doesn't have access to .po or .mo files; they need to be delivered by the server.
  • The translation catalogs for JavaScript should be kept as small as possible.

所以本质上,Python 的内部翻译是在服务器上完成的。但对于 JS,服务器提供另一个文件,其中包含用户语言所需的所有翻译。并且翻译是在用户端完成的。正如您所看到的,这是一个完全不同的策略。 Django 通过为 JS 文件添加类似的接口(interface)来提供帮助,即使它们的处理方式完全不同。

I guess it works like this: when rendering a template, Django checks the requested locale, loads the appropriate localisation file and serves the template but JS on the other hand being served as static media doesn't get parsed by Django. Is this it?

关于处理模板,您在第一部分中是正确的。处理 JS 的工作方式正如我上面所解释的。

请注意,Django JS 翻译机制将 JS 翻译视为静态文件。它每次都使用 Django View 生成 JS 文件(第一行链接的文档中提到的 javascript_catalog )。 这是我遇到的问题之一。不需要针对每个请求生成此类文件。有一些项目实际上可以让您将这些 JS 翻译打包为静态文件,并允许您正确缓存它们(例如 django-mediagenerator )。

关于python - 为什么 JavaScript 文件在 Django 中应该以不同的方式本地化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7945098/

相关文章:

python - 第一个请求不会终止(无 FIN)uWSGI + nginx

python - 如何缓存 Django Rest Framework API 调用?

java - I18n 和日历 - 日历系统可以保留为公历吗?

python - 如何将 python 的谷歌云端点与现有的 GAE 项目集成?

python - Python 中的优化——该做的、不该做的和经验法则

python - 按外键计数和分组并返回模型django

database-design - 在 NoSQL 解决方案中支持多种语言吗?

iphone - 为 iPhone 添加本地化语言 - 这可能吗?

python - Python 的最佳 Cassandra 库/包装器?

python - Django - 在 ModelForm 中添加密码验证