首页
学习
活动
专区
圈层
工具
发布

(译) Understanding Elixir Macros, Part 1 Basics

元编程 (Meta-programming) 或许你已经对 Elixir 中的元编程有一点了解. 其主要的思想就是我们可以编写一些代码, 它们会根据某些输入来生成代码....如果把该表述插入到某些 a 和 b 是有效标识符的 AST 中, 刚才发生错误的代码 a+b, 才是正确的....理解 unquote 的另一种方式是, 可以把它看做是字符串的插值 (#{}). 对于字符串你可以这样写: "....#{some_expression}...."...在第三行, 我们使用 Macro.to_string/1 来求出我们所收到的 AST 片段的字符串表达形式. 这是你在运行时不能够对一个普通函数做的事之一....虽然我们能在运行时调用 Macro.to_string/1, 但问题在于我们没办法再访问 AST 了, 因此不能够知道某些表达式的字符串形式了.

61030
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    软件本地化中的 10 个常见错误

    使用 gettext 函数完成翻译: import gettext de_DE = gettext.translation('messages', localedir='locales', languages...拼接字符串 有些开发者喜欢将字符串拼接,虽然字段的常量部分是从资源文件取出的,但整个句子的单词顺序和措辞结构还是被按某种特定语言硬编码了。...忽略竖版和从右到左阅读 阿拉伯文、希伯来文和一些其他语言是从右到左书写的;一些东亚语言比如某些中文文本,或传统蒙古文,也会让你大开眼界 -- 它们有着竖版书写的悠长历史。...从右到左可能还能通过反向字符串解决;但当字符串竖版排练时,并非简单地旋转 90 度。比较正确的方式是基于 locale 在资源文件中包含一个指示方向的字符串,并根据其调用不同的 CSS 样式。...缺少上下文造成的困惑和歧义 当字符串包含变量,且被用在一个特定上下文或使用了有歧义的措辞时,你的翻译团队就不好过了。翻译者通常基于无上下文格式的文件和字符串工作。

    1K10

    gettext安装及使用

    :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`文件,填写每个原始字符串的翻译。

    23210

    gettext模块实现Python国际化

    ---- 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文件时,可以用

    2.8K10

    Elixir: 编程语言的未来

    这篇文章谈一谈最近火爆的 Elixir,同时说一下对编程语言选择的看法。同时作为 Erlang 发烧友,Elixir 不可不提。即使有了那么多编程语言 Elixir 也值得接触。...有人说,学那么多编程语言是想做”翻译”吗?其实事情并不那么简单。 不同的语言背后是风格截然不同的类库群、技术堆栈、生态和工具链。不同的语言针对了不同类型的问题。...某些语言解决某些问题的成本会比其他语言低非常多。回归本质,学习编程语言还是为了低成本高效的解决实际的业务问题。 个人喜欢的编程语言风格 可以近实时更新变更 最好不需要长时间编译才能执行、应用启动快。...轻量级执行进程或者线程 由于某些限制,某些业务逻辑不可避免的会因为大量计算、网络磁盘 IO 等占用一个执行进程或者线程。...这可能不能算一个编程语言的特性了,要看这个语言是不是有很好的日志类库。 Java 的 SLF 就是一个比较好的日志系统类库。 工具链 项目构建、编译、测试工具比较完善。

    3.4K40

    【Django | 开发】 (国际化项目&支持多语言)

    推荐一款找工作神器网站: 宝藏网站 |笔试题库|面试经验|实习招聘内推| 该文章收录专栏 ✨—【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

    1.1K10

    从命名约定到特殊方法,Python下划线符号的妙用!

    临时变量或忽略值在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

    84210

    掌握Linux Shell参数本地化(轻松实现多语言支持的脚本开发)

    这通常涉及使用 gettext 工具或简单的变量替换机制,让脚本能“说”用户的母语。为什么需要本地化?提升用户体验:用户看到自己熟悉的语言,操作更顺畅。增强脚本专业性:适用于国际团队或多语言部署环境。...进阶方法:使用 gettext 实现专业本地化对于更复杂的项目,推荐使用 GNU gettext 工具链。它支持完整的翻译流程,包括提取字符串、生成 .po 文件、编译为 .mo 文件等。...步骤简述:在脚本中用 gettext "字符串" 包裹所有需翻译的文本。使用 xgettext 提取这些字符串生成 .pot 模板文件。为每种语言创建 .po 文件并翻译。...运行脚本时自动加载对应语言的翻译。虽然 gettext 学习曲线稍陡,但它是实现 Shell 脚本国际化 的标准方案,值得深入学习。...无论是使用简单的 case 判断,还是专业的 gettext 方案,都能有效提升脚本的可用性。记住,良好的本地化是专业 Linux Shell 参数 处理的重要一环。

    17310

    如何在Ubuntu上部署Elixir-Phoenix MySQL应用程序

    数据库驱动程序是一个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...从应用程序部署到生产服务器到迁移生产数据库的时间,这可能导致应用程序的某些部分在生产中失败。在此间隔期间,应用程序代码可能引用数据库中不存在的表或列。

    7K20

    django2.2 国际化实践

    = [ 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 实践效果图 其他用途 把三方库某些显示的文案翻译成本地语言

    98240

    flask babel使用(flask 107)

    首先我们将这个 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 就会看到翻译的中文页面了。 更新翻译 有时我们需要对程序和模板做修改,翻译也要随之更新。

    1.1K20

    (译) Understanding Elixir Macros, Part 3 - Getting into the AST

    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 片段.

    54850
    领券