Web 塔:使用意外字典进行本地化

Web 塔:使用意外字典进行本地化,web,clojure,localization,http-accept-language,Web,Clojure,Localization,Http Accept Language,我正在使用web应用程序中的i18n和l10n库 我的问题是必须本地化“即时”,即使用未预料到的词典,尤其是未预料到的支持地区 我收到HTTP请求,从中我可以按优先顺序提取接受的区域设置,例如: [:de:en-UK:en:fr:fr] 另一方面,我必须从从数据库获取的微型词典中进行本地化,格式如下: {:fr“En Français” :en“用英语” :en-Uk“来自英国的英语”} 在我的程序中,我想做的是从这两个元素中找到最匹配的翻译(在示例中,它是:en UK;注意,我可能事先不知

我正在使用web应用程序中的i18n和l10n库

我的问题是必须本地化“即时”,即使用未预料到的词典,尤其是未预料到的支持地区

我收到HTTP请求,从中我可以按优先顺序提取接受的区域设置,例如:

[:de:en-UK:en:fr:fr]

另一方面,我必须从从数据库获取的微型词典中进行本地化,格式如下:

{:fr“En Français”
:en“用英语”
:en-Uk“来自英国的英语”}

在我的程序中,我想做的是从这两个元素中找到最匹配的翻译(在示例中,它是
:en UK
;注意,我可能事先不知道
:de
不可用)

我还没有找到一种使用Tower库实现这一点的方法(我希望避免重新发明轮子)

有人知道我会怎么做吗


提前谢谢

您可以从映射中获取一系列键,获取两个序列共有的所有值,然后根据符合您需求的逻辑选择首选项。

刚刚在Tower
v2.1.0-SNAPSHOT
中添加了对任意区域设置回退的本机支持,如以下讨论所示:

因此,现在可以请求类似于
(t[:fr-fr:en-US]:example/foo)
的翻译


干杯!:-)

不幸的是,由于地区的层次结构,您的建议比听起来更复杂。例如,如果我接受的语言是
[:fr fr,:en]
,而我的可用区域设置是
{:fr,:en}
,那么将两个序列相交将排除
:fr
,尽管这是正确的选择。这是一种复杂的逻辑,让我不想绕过塔式库。你不能先规范化你的数据吗?你说的“规范化”是什么意思?让数据看起来像你想要的样子。