Tho*_*ard 9 ocaml gettext internationalization
我想让i18n使用我的OCaml代码(将短信翻译成用户的首选语言).大多数可翻译字符串是一小组函数之一的第一个非标记参数.例如
print "Feed '%s':" new_feedraise_safe "Local feed file '%s' does not exist" pathlog_warning ~ex "Error checking signature for %s" feed在GUI代码中,也~label应该提取参数中的字符串.
有什么方法可以自动提取这些字符串吗?为了使事情变得更有趣,我也使用了一些语法扩展(例如Lwt).
我看到有一个ocaml-gettext包,但是:
f_,s_,等).$NAME),然后也无法卸载,这也表明它没有被大量使用.人们实际使用/推荐什么?
这是我想在我的汽油项目(一个应用程序工具包)中解决的一个问题。
\n\n在示例中,有一个过度设计的字数统计程序,它用作该库的用例。该函数Component.Message.cannot_open使用其格式字符串作为国际化消息数据库中的键:
let cannot_open name reason =\n send sink Error "${FILENAME:s}: cannot open (${REASON:s})"\n [ "FILENAME", make String name;\n "REASON", make String reason;\n ]\nRun Code Online (Sandbox Code Playgroud)\n\n这sink是它所属的软件组件的全局状态,它绑定到国际化消息的数据库,在该数据库中查找翻译并用于准备实际消息。
由示例建议,该工具支持格式化指示,就像printf我们可以编写的那样${FILENAME:+20s}。
目前,还没有实现实际的数据库查找。该函数在由模块参数化的send函子中定义。当前的实现使用以下数据库实现:Generic_message.Sink.MakeDatabasewordcount
module Database =\nstruct\n type t = unit\n type connection_token = unit\n let opendb () = ()\n let find () id = id\n let close () = ()\nend\nRun Code Online (Sandbox Code Playgroud)\n\n但是,可以用积压中的实际数据库查找 \xe2\x80\x94 替换此定义。
\n\n在我看来,消息国际化应该由软件组件\xe2\x80\x94(整个应用程序\xe2\x80\x94下面最大的组织统一体)来完成,并且库或类似设施应该使用标准常量和类型来报告错误。
\n| 归档时间: |
|
| 查看次数: |
206 次 |
| 最近记录: |