在 Django 中提供 Rails-way i18n 支持的好方法

2024-04-25

(新)Rails 中有一件事让我羡慕:国际化支持(Django 也有一项,但我更喜欢 Rails 的风格)。

Rails 和 Django 方法之间的主要区别在于哪种字符串的行为类似于键值转换映射中的键,即

Django 版本(键 - “主要”语言的字符串,例如英语):

msgid "Save and quit"
msgstr "Zapisz i wyjdź"

Rails 版本等效(键 - 抽象字符串;独立无法使用 - 需要提供至少 1 个“翻译”) - 实际上,Rails 使用 YAML 格式,但以下示例展示了这一想法:

// english translation file

msgid "SAVE_QUIT_MESSAGE"
msgstr "Save and quit"

and

// polish translation file

msgid "SAVE_QUIT_MESSAGE"
msgstr "Zapisz i wyjdź"

Rails 支持 i18n 的方式恕我直言要好得多(想想关键的不变性 - 抵抗语法/拼写更正;语言不可知论等)。

在 Django 中利用此模式的一种方法是使用某种抽象语言,其唯一目的是进行翻译(该语言中的字符串将生成不可变的键),但 Django 仅支持固定的语言集。另一种解决方案 - 牺牲一种支持的(未使用的)语言来扮演这个角色 - 但这很糟糕:P

有什么想法/第三方应用程序/技术来解决这个问题吗?


旁注:扩展 i18n 对 artibrary 语言的支持将带来有趣的机会:

// slang translation file

msgid "SAVE_QUIT_MESSAGE"
msgstr "Save shit 'n' quit, bro"

后退一两分钟。你在这里做三重工作。首先你必须想出一个UNIQUE_ID然后你强迫人们从代码或其他语言文件中查找上下文,以找出正确的消息AMBIGUOUS_ARGUMENT_PROVIDED直到您开始提供实际的翻译。谁曾说过创建能够有意义地传达上下文并提供良好消息提示的 ID 是一件容易的事?

你想做的是一些荒谬的事情,兄弟!抛开笑话不谈,原因是 gettextis最流行和最广泛使用的 i18n 和 l10n API 是因为每条消息都会从其内容中分配一个唯一的消息目录 ID,并且因为事实证明,您翻译消息的时间比提供 ID 的翻译要好,这让人想起每个人都尝试过的情况他们自己的 key->value i18n 框架,因为它的设计是最简单的。

您最终会得出结论,以不恰当的方式使用 gettext 是一个坏主意,您现在可以通过忘记整个想法来拯救自己。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Django 中提供 Rails-way i18n 支持的好方法 的相关文章

  • Django:什么时候运行 makemigrations?

    除了向模型添加 删除 修改字段之外 当我向模型添加或修改方法时 Django 还会检测到更改 所以我的问题是我应该跑步吗makemigrations每次我在模型中更改或添加新方法时 当您添加 更改模型方法时 您不需要运行 manage ma
  • 在 Django 管理界面中更改模型类名称[重复]

    这个问题在这里已经有答案了 可能的重复 django 中管理模型类的详细名称 https stackoverflow com questions 5959462 verbose name for admin model class in d
  • 获取 django 的本地时区

    我有一个mysqlDATETIME存储在系统时间 UTC 中的值 我需要将其转换为 django 中的本地时区 这是我目前拥有的 value in mysql timestamp 2013 02 01 22 48 45 settings p
  • 使用 django Rest 框架 ModelViewSet 类而不是 APIView 渲染表单

    我想使用其余框架为我的 django 模型创建样板表单 文档显示它使用 APIView http www django rest framework org topics html and forms rendering forms htt
  • Django:djcelery 从 celery import current_app as celery in virtualenv 导入错误

    好吧 我已经尝试了我和谷歌能想到的一切 我正在尝试在 Macbook Pro OSX 10 8 4 上的 virtualenv 下运行 django celery 我在激活 virtualenv 时使用 pip 安装了 django cel
  • django 2.0 中的错误 404 静态文件

    我试图在 django 2 0 中找到我的所有静态文件 但是当我只运行服务器时 我收到 404 错误 这是我的设置代码 STATIC URL static STATIC ROOT var www example com static STA
  • 在 OrderedDict 中如何按特定属性排序? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我正在尝试通过执行以下操作对以下 OrderedDict 进行排序 gt gt gt gt from collectio
  • Django - 使用 get_FOO_display 进行聚合

    考虑以下 status queryset values status annotate count Count status where status字段是一个CharField with choices 这将产生一个字典列表statusD
  • 如何从序列化器字段订购 Django Rest Framework 查询集?

    我如何订购 DjangoQuerySet来自序列化器字段 由于字段太复杂 我无法订购QuerySet using annotate我也无法将值存储在模型中 Edit 串行器 class DrinkListModelSerializer se
  • 有皮茨时区列表吗?

    我想知道 Python 库 pytz 中时区参数的所有可能值是什么 怎么做 您可以列出所有可用的时区pytz all timezones In 40 import pytz In 41 pytz all timezones Out 42 A
  • Django 表单验证消息未显示

    我试图限制可以以表单上传的文件类型 大小和扩展名 该功能似乎有效 但未显示验证错误消息 我意识到if file size gt 4 1024 1024可能不是最好的方法 但我稍后会处理这个问题 这是 forms py class Produ
  • 嵌套重组 - Django

    我有一个包含以下字段的模型 日期 员工 和 计划时间 每个员工对于不同的日期都有不同的计划工作时间 我正在尝试构建我的模板 其中员工按行列出 他们的计划工作时间列在正确的相应日期下的列中 像这样的东西 https i stack imgur
  • @monthly cron 作业不可靠

    我们的客户希望我们每月创建一份报告 过去 我们使用 monthly cron 作业来完成此任务 但这并不可靠 服务器可能会在这一分钟内宕机 Cron 不会重新运行这些作业 如果服务器已启动 此时数据库可能无法访问 如果服务器已启动且数据库已
  • Django:在表单中初始化小部件时获取当前网址

    当我初始化表单以在其中找到我想要检查的字符串时 我想获取当前的 url 根据这个字符串 我想更改放入单选小部件中的数据 我想根据 url 显示不同的 radioselect 选项 class FunctionForm forms Model
  • Django:使用 python-magic 在模型中进行文件字段验证

    我有一个包含文件字段的模型 我想将其限制为 pdf 文件 我在模型中编写了干净的方法 因为我还想检查管理和 shell 级别模型的创建 但它不适用于模型清理方法 然而 形式清洁方法正在发挥作用 class mymodel models Mo
  • 无法安装 psycopg2 Ubuntu

    试图为 django 项目准备好服务器 但我在设置 postgres 时遇到了一些问题 我正在遵循本指南 https jee appy blogspot com 2017 01 deply django with nginx html ht
  • 管理文件字段当前 url 不正确

    在 Django 管理中 只要有 FileField 编辑页面上就会有一个 当前 框 其中包含指向当前文件的超链接 但是 此链接会附加到当前页面 url 因此会导致 404 因为不存在这样的页面 例如 http 127 0 0 1 8000
  • Django CreateView:在验证之前设置用户

    我有一个模型 根据对象是由用户还是系统创建 对其名称字段使用不同的验证 class Symbol models Model name models CharField name unique True max length 64 creat
  • django模板中获取用户信息

    从 django 模板获取用户信息的最佳方法是什么 例如 如果我只想 如果用户已登录 则显示 欢迎 用户名 否则 显示登录按钮 我正在使用 django 注册 身份验证 当前 Django 版本的替代方法 if user is authen
  • django管理员登录后重定向到另一个页面

    我正在 Django 中制作一个自定义管理页面 我不想重新发明轮子 因此想使用 Django 管理登录表单让员工登录并随后将他们重定向到 my url 但是 我无法找到在 admin 成功登录后将用户重定向到自定义网址的方法 因为我偶然发现

随机推荐