元编程 (Meta-programming) 或许你已经对 Elixir 中的元编程有一点了解. 其主要的思想就是我们可以编写一些代码, 它们会根据某些输入来生成代码....如果把该表述插入到某些 a 和 b 是有效标识符的 AST 中, 刚才发生错误的代码 a+b, 才是正确的....理解 unquote 的另一种方式是, 可以把它看做是字符串的插值 (#{}). 对于字符串你可以这样写: "....#{some_expression}...."...在第三行, 我们使用 Macro.to_string/1 来求出我们所收到的 AST 片段的字符串表达形式. 这是你在运行时不能够对一个普通函数做的事之一....虽然我们能在运行时调用 Macro.to_string/1, 但问题在于我们没办法再访问 AST 了, 因此不能够知道某些表达式的字符串形式了.
惰性翻译:gettext_lazy会延迟翻译计算,直到实际渲染时才会根据当前请求语言动态加载,而 gettext 在模块加载时即固定翻译结果二、安装配置安装 gettext下载64位 share 安装包...() 来指定翻译字符串。...gettext_lazy() 来指定翻译字符串。...required": "密码不能为空", "min_length": _("密码长度至少为8位"), "max_length": "密码长度不能超过16位",...msgstr :翻译后的字符串。
为了使得 Babel 知道这个文本,只要把这个字符串传入到 gettext 函数: from flask.ext.babel import gettext # ... if resp.email is...我们不能允许这样的事情,因此我们需要避免这种情况。 最有效的解决方案就是对 nickname 字段中使用的字符进行严格的限制。...如果 messages.po 文件不完整会发生些什么,比如某些文本忘记了翻译?...任何没有放入 gettext() 或者 _() 的字符串都不会在翻译文件中,因此 Babel 不会感知这些,它们依然保持英文。...幸好,Flask-Babel 提供另外一个函数 lazy_gettext,它不会像 gettext() 和 _() 一样立即翻译,相反它会推迟翻译直到字符串实际上被使用的时候才会翻译。
使用 gettext 函数完成翻译: import gettext de_DE = gettext.translation('messages', localedir='locales', languages...拼接字符串 有些开发者喜欢将字符串拼接,虽然字段的常量部分是从资源文件取出的,但整个句子的单词顺序和措辞结构还是被按某种特定语言硬编码了。...忽略竖版和从右到左阅读 阿拉伯文、希伯来文和一些其他语言是从右到左书写的;一些东亚语言比如某些中文文本,或传统蒙古文,也会让你大开眼界 -- 它们有着竖版书写的悠长历史。...从右到左可能还能通过反向字符串解决;但当字符串竖版排练时,并非简单地旋转 90 度。比较正确的方式是基于 locale 在资源文件中包含一个指示方向的字符串,并根据其调用不同的 CSS 样式。...缺少上下文造成的困惑和歧义 当字符串包含变量,且被用在一个特定上下文或使用了有歧义的措辞时,你的翻译团队就不好过了。翻译者通常基于无上下文格式的文件和字符串工作。
:TXTAI代码解释#编译.po文件为.mo文件msgfmtzh_CN.po-ozh_CN.mo使用gettext实现多语言支持gettext是一个用于国际化(i18n)和本地化(l10n)的工具,主要用于管理软件中的文本翻译...──LINGUAS#支持语言文件└──locale#存储翻译产物├──en_US│└──LC_MESSAGES│└──myapp.mo└──zh_CN└──LC_MESSAGES└──myapp.mo标记可翻译字符串...:在源代码中,使用`gettext`函数标记需要翻译的字符串:`src/main.c`:收起代码语言:TXTAI代码解释#include#include#include...;提取翻译字符串:使用`xgettext`工具从源码中提取标记的字符串,生成`.pot`(PortableObjectTemplate)文件。这个文件包含了所有需要翻译的原始字符串。...翻译字符串:使用文本编辑器或专用的翻译工具(如Poedit)打开`.po`文件,填写每个原始字符串的翻译。
---- 2.通用步骤 (1)无论是使用哪一套API,都必须提取可以翻译的字符串并且生成一个翻译模板文件.pot (2)然后生成对应于不同语言翻译的文件.po (3)我们在应用程序中使用是的二进制格式的...__main__": print _("hello world") 这里用_()括起来的字符串就是需要翻译的字符串 (c)用xgetext来提取需要翻译的字符串生成翻译模板 ?...注意过程中,可能会询问你的email地址,直接回车即可 (e)编辑po文件,填写需要翻译的字符串对应的译文字符串,例如zh_CN.po: ?...这里msgid后面的字符串就是需要翻译的字符串,msgstr后面就是译文字符串。对en.po重复(e)操作 (f)使用msgfmt命令从po生成二进制文件mo,也是应用程序需要使用的文件。...到目前为止所有准备工作完成 补充: 注:上面的步骤也可以用poedit这款软件完成,官网上有详细的使用教程 另外,一旦python代码中要翻译的字符串发生变化(修改、增删),需要重新生成po文件时,可以用
这篇文章谈一谈最近火爆的 Elixir,同时说一下对编程语言选择的看法。同时作为 Erlang 发烧友,Elixir 不可不提。即使有了那么多编程语言 Elixir 也值得接触。...有人说,学那么多编程语言是想做”翻译”吗?其实事情并不那么简单。 不同的语言背后是风格截然不同的类库群、技术堆栈、生态和工具链。不同的语言针对了不同类型的问题。...某些语言解决某些问题的成本会比其他语言低非常多。回归本质,学习编程语言还是为了低成本高效的解决实际的业务问题。 个人喜欢的编程语言风格 可以近实时更新变更 最好不需要长时间编译才能执行、应用启动快。...轻量级执行进程或者线程 由于某些限制,某些业务逻辑不可避免的会因为大量计算、网络磁盘 IO 等占用一个执行进程或者线程。...这可能不能算一个编程语言的特性了,要看这个语言是不是有很好的日志类库。 Java 的 SLF 就是一个比较好的日志系统类库。 工具链 项目构建、编译、测试工具比较完善。
第1步 - 在本地开发机器上安装Elixir和Phoenix 因为Elixir在Erlang VM上运行,所以我们需要先安装VM才能安装Elixir。...sudo apt-get install elixir 接下来,使用Mix - 与Elixir捆绑在一起的构建工具来创建Elixir项目和管理依赖项 - 安装Elixir自己的包管理器Hex,稍后您将使用它来安装...HostName example.com User sammy IdentityFile ~/.ssh/private_key_file 注意:如果您的config文件中已包含某些内容...gettext "Welcome to %{name}", name: "Phoenix!" %> ... 现在,用以下内容替换该行: Hello, World!...: elixirc_paths(Mix.env), compilers: [:phoenix, :gettext] ++ Mix.compilers, build_embedded:
建立翻译文件路径,在主文件目录下建立中文翻译路径 ..../usr/bin/env pythonimport gettext gettext.install('lang', '....处理要翻译的字符串,例: print “Hello world!”print “Python is a good Language.” 改之: print _(“Hello world!”)...,因为en目录下lang.mo文件未做任何的翻译,默认字符串不被替换....注意:如果使用utf格式保存,po文件不能有BOM头。
使用gettext库: gettext 是Python的一个标准库,用于处理国际化问题。它允许你将应用程序中的字符串标记为可本地化的,并提供翻译文件以支持不同的语言。...import gettext # 设置本地化信息 lang = 'zh_CN' locale_path = 'path/to/locale' locale = gettext.translation('...使用babel库: babel 是一个强大的国际化和本地化库,它支持日期、时间、数字、货币等的本地化,同时也支持翻译文本。...你可以使用 gettext 来标记和翻译字符串。 4....在实际项目中,通常需要创建翻译文件,包含不同语言的翻译字符串,并使用相应的工具进行翻译和管理。 收藏 | 0点赞 | 0打赏
推荐一款找工作神器网站: 宝藏网站 |笔试题库|面试经验|实习招聘内推| 该文章收录专栏 ✨—【Django | 项目开发】从入门到上线 专栏—✨ 文章目录 一、国际化项目介绍 二、实现步骤 2.1 为翻译字符串添加钩子...这个翻译不是浏览器翻译的,Django也不会帮你翻译。...二、实现步骤 2.1 为翻译字符串添加钩子 1) py文件 将需要翻译的字符串统一使用gettext_lazy或gettext包裹 from django.utils.translation import...gettext_lazy as _ class Candidate(models.Model): # * 基础信息 (对于整形数值一定要定义null=true,因为如果没有赋值,数据库会声明不能为...(.po和.mo格式的) 在终端输入 ( 大坑插入: 由于在gettext版本低于0.15, 报错:Make sure you have GNU gettext tools 0.15 or newer
临时变量或忽略值在Python中,单下划线常用作临时变量名,表示该变量不重要或将被忽略:# 忽略不需要的返回值for _ in range(10): print("Hello")# 解包时忽略某些值...国际化(i18n)中的翻译函数在gettext模块中,_常用作翻译函数的别名:import gettextgettext.bindtextdomain('myapp', '/path/to/locale...')gettext.textdomain('myapp')_ = gettext.gettextprint(_('Hello World')) # 根据locale返回翻译后的字符串3....+运算符 return Vector(self.x + other.x, self.y + other.y) def __str__(self): # 定义对象的字符串表示...return f"Vector({self.x}, {self.y})"常见特殊方法:__init__: 构造函数__str__: 字符串表示__len__: 定义len()行为__getitem
比较直观的解释了这三者的关系: xgettext 在介绍图中的三种文件之前,先要了解一下xgettext这个工具,它是在 Linux 上的一个程序,Ubuntu 下可以直接使用(命令行中),其功能是抽取给定的文件中可供翻译的字符串...(text) { return translateMap[text]; } gettext('oh my god'); xgettext会抽取gettext里的字符串作为是可以被翻译的内容,我们也可以将...模板文件中所有翻译字符串留空,一个 POT 文件本质上是一个没有翻译的空 PO 文件,只有原始字符串。...下图是 GNU gettext 程序在多语言中的协作关系。...另一种 flag 是类似下面这种,代表着原始内容中包含 php 风格的字符串。
这通常涉及使用 gettext 工具或简单的变量替换机制,让脚本能“说”用户的母语。为什么需要本地化?提升用户体验:用户看到自己熟悉的语言,操作更顺畅。增强脚本专业性:适用于国际团队或多语言部署环境。...进阶方法:使用 gettext 实现专业本地化对于更复杂的项目,推荐使用 GNU gettext 工具链。它支持完整的翻译流程,包括提取字符串、生成 .po 文件、编译为 .mo 文件等。...步骤简述:在脚本中用 gettext "字符串" 包裹所有需翻译的文本。使用 xgettext 提取这些字符串生成 .pot 模板文件。为每种语言创建 .po 文件并翻译。...运行脚本时自动加载对应语言的翻译。虽然 gettext 学习曲线稍陡,但它是实现 Shell 脚本国际化 的标准方案,值得深入学习。...无论是使用简单的 case 判断,还是专业的 gettext 方案,都能有效提升脚本的可用性。记住,良好的本地化是专业 Linux Shell 参数 处理的重要一环。
数据库驱动程序是一个Elixir应用程序,负责处理使用数据库的普通任务,例如建立连接,关闭连接和执行查询。...数据库包装器是数据库驱动程序之上的一个层,允许Elixir程序员使用Elixir代码创建数据库查询,并提供其他功能,如查询组合。 这种分离使模块化应用成为可能。...1.0"}, {:phoenix_html, "~> 2.10"}, {:phoenix_live_reload, "~> 1.0", only: :dev}, {:gettext...1.0"}, {:phoenix_html, "~> 2.10"}, {:phoenix_live_reload, "~> 1.0", only: :dev}, {:gettext...从应用程序部署到生产服务器到迁移生产数据库的时间,这可能导致应用程序的某些部分在生产中失败。在此间隔期间,应用程序代码可能引用数据库中不存在的表或列。
此外,新兴语言Kotlin、Elixir和Hack在本月并没有太大的进步,Kotlin和Elixir同时下跌了5名,Hack下跌了6名,Elixir再次失去进入50名的机会。...APL, AutoLISP, bc, Bourne shell, C shell, CFML, CL (OS/400), Clipper, Clojure, Common Lisp, Crystal, Elixir...请注意这个排行榜只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少。...排行榜的详细定义可以参考这里:https://www.tiobe.com/tiobe-index/ 来源丨TIOBE、CSDN 翻译丨苗稳 END 投稿和反馈请发邮件至hzzy@hzbook.com。
= [ os.path.join(BASE_DIR, 'locale'), # 翻译文件所在目录,请手动创建目录 ] 安装 gettext Django 框架具有很好的 I18N 和 L10N...Make sure you have GNU gettext tools 0.15 意思是提示需要安装 gettext) brew install gettext brew link gettext -...那么可能是:gettext 版本不对 或者 安装后没有加入到环境变量 手工翻译需要的 msgid 找到 settings 里面配置的 LOCALE_PATHS 下的 django.po 文件,开始你的编辑之路...msgid: 需要翻译的文案 msgstr: 翻译后的文案 在代码中看到:_("这种就是国际化的标志,我们只需要翻译下就 OK") 例子: 最后一步就是 编译 编译成功后会在 django.po 的对应目录生成...processing file django.po in E:\yinzhuoqun\djangos\joyoo\captcha\locale\sk\LC_MESSAGES 实践效果图 其他用途 把三方库某些显示的文案翻译成本地语言
首先我们将这个 app “国际化”,为模板和 .py 文件中的每一个字符串添加一个 gettext 函数,由于 gettext 函数被引用的次数太多了,为了方便手写,就将其 import 为 “_”:...image 你可以注意到我们对 app 的 locale 做了配置,然后用 babel 扩展将 app 再次初始化,并且将 .py 和 .html 中的字符串做了配置,让它们都使用gettext这个函数...其中值得注意的是gettext的格式化字符串的参数。如果直接用类似"It's %s today"% day是不行的。 这么一来,app 的语言其实是被写死成中文了。...image 生成翻译模板 这样 babel 就知道要从哪些位置搜索要翻译的字符串了。...这时执行 python hello.py 就会看到翻译的中文页面了。 更新翻译 有时我们需要对程序和模板做修改,翻译也要随之更新。
Elixir Macros 系列文章译文 [1] (译) Understanding Elixir Macros, Part 1 Basics [2] (译) Understanding Elixir...是时候继续探索 Elixir 的宏了. 上次我介绍了一些关于宏的基本原理, 今天, 我将进入一个较少谈及的领域, 并讨论Elixir AST 的一些细节....然而, 有时候我们需要解析输入的 AST 片段以获取某些特殊信息. 一个简单的例子是 ExUnit 的断言....你可能认为我可以使用 left unquote(operator) right 来替代, 但它并不能运算. 原因是 operator 变量保存的是一个原子(如:==)....因此, 这个天真的 quoted 会产生 left :== right, 这甚至不符合 Elixir 的语法规定. 记住, 在 quoted 时, 我们不组装字符串, 而是组装 AST 片段.
struct 翻译成 vega-lite 里的 JSON object。...为了达到这个目标,我们需要提供对 vega-lite 语法在 Elixir 上的封装。...传递给 deneb 要绘制的数据,和绘制这个数据所用的 elixir structs,deneb 将其组合并翻译成一个可以展示的 JSON 数据。...就算我脑子里有个 Python-to-Elixir 的代码转换器可以逐行翻译,让我抄四万多行代码一天也抄不完。 所以,我打算一步步来。先实现第一层,让 deneb 用最小的代价跑起来。...我虽然很喜欢使用 altair,但学会了 altair 并不能保证我同时会写 vega-lite 语法,因为 altair 自己已经成为一个厚重的 DSL,完全包裹住了 vega-lite。