在 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 中不捕获可选 URL 元素

    我正在使用 Django 并且想要匹配 URLdomain com w and domain com words 我有一个以下形式的配置行 url r w ords app name views view words view words仅
  • 提供多个 Base64 图像下载

    我的 django 应用程序有一个带有 base64 编码图像的模型 我想向我的 ListView 添加选项 以将所有显示的图像下载到用户选择的位置 我应该创建一个 AJAX 视图 还是 jQuery 可以处理它 我用谷歌搜索了一下 看到了
  • 意外的缩进错误,但缩进看起来正确

    我一直在尝试运行此代码 但它引发了缩进错误 无论我尝试什么 结果都是一样的 如果我删除之前的缩进def str self 和代码的其余部分 它工作正常 但在输出时 它不显示问题 而是显示 问题对象 def str self Indentat
  • “unicode”对象没有属性“_meta”

    我正在尝试创建一个视图 用户在其中从下拉菜单中选择一个选项 提交它 然后返回一些数据 具体来说 他们将从数据库中的模型中进行选择 并返回该类的所有实例 我使用 django tables2 输出数据 以便可以排序 但这是我的症结所在 Vie
  • python 格式日期时间,带有“st”、“nd”、“rd”、“th”(英文序数后缀),如 PHP 的“S”

    我想要一个 python datetime 对象来输出 并在 django 中使用结果 如下所示 Thu the 2nd at 4 30 但我在python中找不到输出的方法st nd rd or th就像我可以使用 PHP 日期时间格式一
  • 无法在 AWS Elastic Beanstalk 上创建新的 RDS 数据库

    使用后eb create要创建新环境 我无法使用 AWS 控制台在我的环境中创建新的 RDS 数据库 它要求我从四个可用区列表中至少选择两个可用区 无论我选择哪个 我都会收到错误 DBSubnets 无效选项值 subnet 3dbb956
  • AWS Cognito 作为网站的 Django 身份验证后端

    我对 Cognito 的理解是 它可以用来代替本地 Django 管理数据库来对网站的用户进行身份验证 然而 我没有找到任何带有通过 Cognito 登录屏幕的基本 Hello World 应用程序的详细示例 如果有人可以发布一篇文章 逐步
  • Django 迁移 - 禁用系统检查

    我从 Django 1 7 升级到 Django 1 9 我有多次迁移 自从升级以来 我无法再创建新的数据库 问题是 django manage py migrate 运行检查 检查导入应用程序 URL 这些最终导入查找数据库的代码 我可以
  • DJANGO:如何列出_显示反向外键属性?

    我正在构建一个网络应用程序来跟踪一个人借阅的图书馆书籍 我有以下型号 class Person models Model name models CharField max length 100 def unicode self retur
  • 将文件上传到S3的模拟测试用例

    我们如何模拟文件上传到 S3 我尝试过这样的事情 file mock mock MagicMock spec File name FileMock mock patch storages backends s3boto S3BotoStor
  • Django 星级评定系统和 AJAX

    我正在尝试在 Django 网站上实现星级评级系统 在我的模型中存储评级是排序的 就像在页面上显示分数一样 但我希望用户能够对页面进行评分 基本上从 1 到 5 而无需刷新或更改页面 我发现了以下内容 并且喜欢这里明星的风格 http jv
  • Xamarin Forms:无法添加 RESX 进行全球化

    尝试按照以下方式使用 Xamarin 上的全球化功能guide https developer xamarin com guides xamarin forms advanced localization 但是找不到Misc类别也不Reso
  • manage.pysyncdb 不会为某些模型添加表

    今天我的第二个不太熟练的问题 我有一个 django 项目 其中安装了四个应用程序 当我运行manage py syndb时 它只为其中两个创建表 据我所知 我的任何模型文件都没有问题 并且所有应用程序都在我的设置文件中的 INSTALLE
  • 使用 Django ModelForm 上传个人资料图片

    我环顾过相关问题 但似乎没有一个答案有效 我正在尝试上传用户的个人资料图像并让它替换 覆盖 当前图像 保存图像后 我想将文件名更改为用户 ID 图像将以当前形式上传 但不会替换现有图像 例如 它将保存为 2 1 png class Phot
  • Django 管理员 - 登录

    我正在建造一个Django Web App 与 Django Suit 用于管理界面 已经让 Python 2 7 Django 1 10 和 MySQL 和谐通信并启动了一个项目 python m django admin startpr
  • Django 迁移 RunPython 无法调用模型方法

    我正在使用以下命令创建数据迁移RunPython方法 但是 当我尝试在对象上运行方法时 没有定义任何方法 是否可以使用调用模型上定义的方法RunPython 模型方法在迁移中不可用 包括数据迁移 然而 有一个解决方法 它应该与调用模型方法非
  • 我可以从另一个视图中调用一个视图吗?

    我的一个视图需要添加一个项目以及其他功能 但我已经有另一个专门添加项目的视图 我可以做类似的事情吗 def specific add item view request item Item objects create foo reques
  • 在 MacOSX10.6 上运行 python 服务器时 MySQLdb 错误

    运行我的服务器 python manage py runserver 产生以下错误 django core exceptions ImproperlyConfigured 加载 MySQLdb 模块时出错 没有名为 MySQLdb 的模块
  • 如何在 Django Admin 的“更改”页面中显示内嵌上传的图像?

    我正在尝试在中显示内联上传的图像 变更列表 页面在 Django 管理中 这是我的代码如下 models py from django db import models class Product models Model name mod
  • 如何使用JQuery和Django(ajax + HttpResponse)?

    假设我有一个 AJAX 函数 function callpage ajax method get url abc data x 3 beforeSend function success function html IF HTTPRESPO

随机推荐