问题标签 [python-babel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1269 浏览

python - 如何本地化人性化的时间格式

我如何进行本地化以获得不错的人性化输出,以便像这样的文章

今天

16:48

或者

昨天

17:10

或者

12月13日

11:20

使用上面的代码,我可以对实体的时间进行过滤,以显示人性化的输出:

但是如何本地化字符串“今天”和“昨天”以及如何从 babel 中获取缩写形式,例如 Jan 而不是 1 月、2 月而不是 2 月,以及当我知道实体所在的国家/地区时如何向该项目添加时区是在修改的时候?我有一个变量 entity.url 告诉我们它是哪个域,因为我的应用程序服务于多个域,所以它基本上只是取决于 entity.url (巴西时区和印度时区)的时区,我的基本本地化主要是巴西葡萄牙语和英语但它应该更有效,即它应该很容易添加语言并切换到一种语言。

感谢您对评论的任何回答

更新

它现在可以正确渲染,但我不能直接从 django 的时间中获取它,因为我还不能让时区工作。但现在剩下的唯一部分是时区,我认为:

我必须像上面那样得到翻译的月份的简短形式,例如 Dez。用于巴西利亚葡萄牙语的 Dezember),现在它的本地化效果更好:

在此处输入图像描述 以上是之前,以下是巴西葡萄牙语的本地化 在此处输入图像描述

0 投票
1 回答
1367 浏览

python - 如何在我的 jinja 过滤器中使用 babel 启用时区?

我想根据 babel 语言环境使用时区。我怎样才能做到这一点?我的具体情况是显示文章的日期和时间的目标以及人性化和本地化的方式,例如:

昨天

13:21

或者如果设置了瑞典语参数,它将显示

伊戈尔

13:21

如果日期不是昨天或今天,它将打印日期和 24 小时时间。我认为除了处理时区之外,我一切都成功了:

上面的代码将输出本地化和人性化:

在此处输入图像描述

我还可以将语言切换为例如巴西葡萄牙语:

在此处输入图像描述

其中“Hoje”的意思是“今天”,因此过滤器似乎可以工作。

您能否告诉我如何使我的代码也允许时区?我使用 babel 进行本地化,使用 Jinja2 进行渲染。时区应该是文章的时区还是查看者的时区?例如,巴西的巴西用户发布消息,瑞典的瑞典观众查看该消息。那么应该使用哪个时区?

我可以尝试处理时区的方法是像文档状态一样导入 pytz 库并使用 I timezone 对象。我可以通过模板代码传递时区参数,但是如何从文章或语言环境中知道时区参数?在这种情况下,语言环境和时区会有所不同,因为它是针对印度的,语言环境是英语,时区是印度:

然后我也可以像这样传递我的时区参数

筛选:

所以至少看起来我可以本地化一个时区,但我想知道如何让它动态化。

0 投票
2 回答
425 浏览

python - 将可翻译文本从外部来源获取到目录中

可能我忽略了一个明显的解决方案或以错误的方式思考......

我有有限数量的文本,数据库中的单词,我想在flask/jinja/babel webapp 中显示翻译给用户。例如。“运行”是“活动”列的一个可能值,对于我的德国用户来说应该是“劳芬”。

模板和代码中的单词被提取并放入目录中,但是我如何将其他单词放入目录中?有没有简单的文本文件提取器?

我唯一能想到的是,只需创建一个 .py 文件并在其中放入大量 _('...') 行,但这感觉不对……是吗?

0 投票
0 回答
1775 浏览

python - 如何本地化我的 wtform?

我有一个表格,我想将其从英语本地化为多种语言。我可以使用 gettext 或数据存储来完成它,我选择了 gettext 来提高性能,但我也可以使用数据存储来存储我的翻译。实际的翻译存储在 .po 文件中,我使用 poedit 将其编译为 .mo 本地化文件。表单的视图是: 在此处输入图像描述

验证也本地化,但应该需要的类别不起作用: 在此处输入图像描述

后端代码是

相关模板代码为:

我接收表单输入的方式是使用 HTTP POST:

为什么我的类别没有翻译?当该选项也应该能够被禁用并且在这些情况下获得灰色背景时,处理我的类别的最佳方法是什么?你能看到更多将渲染从硬编码的 HTML 和模板代码转移到 wtforms 的方法吗?

提前感谢您的任何回答或评论

0 投票
1 回答
1961 浏览

python - 如何在其主干版本中安装 Python Babel 库?

经过数小时找出为什么在我的 Babel 安装中缺少一些记录在案的功能后,我了解到Babel 开发有两个分支:

Babel 有两个独立的开发路径(0.9.x 分支和主干)并行了大约 4 年,尽管很少有开发人员从事该项目。我们试图通过发布稳定的 1.0 版本来解决这种情况,但是,现实生活并不总是对开源贡献友好。

Babel 的常见问题解答证实了. 我想在我的项目中使用Flask-Babel 。它的依赖setup.py说我只需要Babel. 这意味着我pip需要在我的环境中安装任何版本或在 PyPI 中搜索最新版本,其中版本为 0.9.6。不合逻辑的是,Flask-Babel 使用了 0.9.x 分支中不存在的函数。也许我遗漏了一些东西,也许我只是感到困惑,但是我怎样才能轻松安装主干版本,最多的新功能在哪里?以及如何强制在我的 中使用这样的版本setup.py对于使用 Flask-Babel 的人来说,这一切如何运作?(我知道,最后一个问题是特定于 Flask 的,应该去这里,但所有其他问题都可以回答其他任何人。)

感谢您的任何建议。大胆的问题是最重要的,其余的都是 Flask-Babel 特有的“很高兴拥有”。

0 投票
2 回答
3164 浏览

python - 使用 unix 时间戳为 babel 的 format_timedelta 生成 timedelta

我不确定我的措辞是否正确,但 python 和时间总是让我感到困惑。这就是我正在尝试的。给定一个绝对在过去(可以是几秒钟前或几年前)的 unix 时间戳(INT),我想生成一个 babel format_timedelta

我的问题是

  1. Babel format_timedelta 将 timedelta 作为第一个参数
  2. 所以我想我需要使用 time.time() (现在)和我拥有的 unix 时间戳生成一个 timedelta。

我无法弄清楚第 2 部分,我相信必须有一种更简单/正确的方法来做到这一点。请分享最好的方法来做到这一点,我也需要它快速计算,因为我必须在网页中使用它。

在 date.format_timedelta() 中给出错误 AttributeError: 'module' object has no attribute 'format_timedelta'

0 投票
4 回答
5276 浏览

javascript - 使用 Babel CLI 提取器提取 Javascript gettext 消息

这里说明Babel 可以为 Python 和 Javascript 文件提取 gettext 消息。

Babel 带有一些内置的提取器:python(从 Python 源文件中提取消息)、javascript 和 ignore(不提取任何内容)。

此处记录了命令行提取器- 但没有使用示例。

同样在上面的同一个指针中,提到了一个用于提取的配置文件,但没有太多扩展。

当我在带有 js 文件的目录上运行提取器的基本命令时,我只生成了 .PO 标头,但没有消息。

这是我试图提取消息的 js 文件中的示例片段:

I would appreciate it if someone can provide exact CLI options and config settings to make the extraction work, or a pointer to such.

0 投票
4 回答
1725 浏览

python - 如何在视图和模板之外使用 Pyramid i18n?

Pyramid 文档向我们展示了如何在视图(以及模板)中使用 i18n 。但是如何在我们无法访问当前的视图和模板之外使用它request(例如, informsmodels)?

@Michael 说要传递request给模型和表单。但这样做对吗?我的意思是如果表单字段在__init__()方法调用之前定义,与模型相同。他们从视图中看不到任何参数...

在 Pylons 中,我们可以简单地在父控制器中使用get_lang()set_lang()定义首选语言,然后在我们想要的任何地方使用ugettext()和,而无需每次都直接调用它(在视图中)。ungettext()request

如何在金字塔中做到这一点?请注意,必须从用户的设置(会话、cookie、数据库等)中设置语言。

0 投票
1 回答
1296 浏览

python - 使用 babel、django 和 jinja2 服务 i18n js

使用 django,使用 jinja2 进行渲染和 babel 进行消息提取

我有一些需要国际化的 js 文件。我一直无法弄清楚从它们中提取消息的语法,这也会让 jinja2 呈现它们。jinja2 必须学习阅读可提取的语法,或者我必须从 jinja2 可以呈现的内容中提取。(或者,完全以另一种方式执行此操作)

提取

如果我在js中标记消息

它提取得很好。

渲染

但是 jinja2 不会替换 js 中的 gettext 调用(我在返回之前用 jinja2 渲染 js 模板)——它需要类似的东西

但是,该语法不能用于提取消息。

Babel 使用来自 babel.messages 的函数 extract_javascript 来提取消息,这看起来并不适合处理这种类型的标签。

0 投票
2 回答
1054 浏览

python - python webapp2 babel在谷歌应用引擎上的lazy_gettext错误

背景:我是 gae-boilerplate 的主要贡献者之一,gae-boilerplate 是一个开源样板项目,旨在帮助用户在具有 webapp2 和最新功能的谷歌应用引擎上快速开始开发。我使用的最新功能是使用 Babel 和 gaepytz 的 i18n,这就是下面描述的问题所在。

问题:翻译正在使用gettext,但要翻译在我们的处理程序和wtforms类中产生的表单错误消息,据我所知,我需要lazy_gettext。当我调用 handlers.py 时,Lazy_gettext 不起作用from webapp2_extras.i18n import lazy_gettext as _。加载页面时,我收到以下致命错误消息。似乎创建了 Babel Lazy 代理对象,但是在传递给谷歌应用引擎服务器代码中的 json 序列化程序之前,它们没有被调用来呈现本地化字符串。我浏览了 babel 站点、webapp2 文档(我希望更彻底)、其他框架和一些 google 代码,但我无法弄清楚我缺少什么。

错误信息:

环境详细信息:有关 python、webapp2、babel 等版本的所有详细信息可以通过向下滚动到github.com/coto/gae-boilerplate 的自述文件找到。我正在运行最新的 google app engine sdk 1.7.0

如何重现

  1. 从https://github.com/coto/gae-boilerplate下载代码
  2. from webapp2_extras.i18n import gettext as _在 web/handlers.py 中替换为from webapp2_extras.i18n import lazy_gettext as _
  3. 使用应用引擎开发服务器运行(https://developers.google.com/appengine/docs/python/tools/devserver提供的说明)
  4. 注册或登录然后注销 (localhost:8080/logout/)。注销的行为将产生一条闪烁消息,指示您已注销,这将触发错误,因为它是在注销处理程序中使用lazy_gettext 包装消息产生的。

任何帮助将不胜感激,无疑会帮助该项目和 webapp2 的其他用户。此外,如果您确实查看了 github 上的代码,那么任何最佳实践技巧都会是一个奖励。谢谢!