如何在 Clojure 中编写多语言应用程序?

     2023-03-04     52

关键词:

【中文标题】如何在 Clojure 中编写多语言应用程序?【英文标题】:How to write multilingual applications in Clojure? 【发布时间】:2011-05-27 14:31:05 【问题描述】:

我正在尝试弄清楚如何创建一个基于 Compojure 且支持多语言的网站。有没有像 i18n 之类的解决方案?

【问题讨论】:

【参考方案1】:

有一个新的 i18n 库:https://github.com/ptaoussanis/tower,理由如下:

Tower 试图为 Clojure 呈现一个简单、惯用的国际化和本地化故事。它在可能的情况下封装了标准 Java 功能,但在有充分理由的情况下,它不惧怕脱离 Java 约定。

【讨论】:

【参考方案2】:

最简单的方法是将所有本地化字符串替换为如下函数调用:

(i18n lang "help")

并实现该函数以从由lang 参数确定的.properties 文件中读取本地化字符串。

为此,您不需要任何库。这是一个简单的函数。

为了避免一直读取文件,您可以在应用程序期间将它们从内存中读取,从 def 开始到名为 loaded-property-files 的映射中,lang 是键,值是消息键的映射,并且适当的本地化消息。

这可以这样完成:

(defn load-property-files [langs]
  (let [default (into  (read-properties "locale.properties"))]
      (apply merge 
       (for [lang langs] 
        (assoc  lang
         (merge default 
          (into  (read-properties (str "locale_" lang ".properties")))))))))

(def loaded-property-files 
      (load-property-files ["en" "es" "de"]))

如果文件加载性能不是问题,但您希望能够在运行时更轻松地更改文件,只需将def 更改为函数即可。

函数read-properties(最初来自旧的clojure.contrib)如下所示:

(defn read-properties
  "Read properties from file-able."
  ([fileable]
   (into  (map #(vector (keyword (key %)) (val %))
    (try
      (with-open [f (java.io.FileInputStream. (new java.io.File fileable))]
        (doto (new java.util.Properties)
          (.load f)))
    (catch java.io.FileNotFoundException e )))))
  ([fileable defaults] (merge (read-properties fileable) defaults)))

default 文件中的本地化字符串将在指定映射中找不到该键时使用,即刚刚添加的新字符串,并且还没有人将其翻译成西班牙语,将以语言显示默认locale.properties

那么您的i18n 函数如下所示:

(defn i18n [lang code]
  ((loaded-property-files lang) code))

【讨论】:

在此函数中重用现有的 JVM 资源包基础设施可能是合理的。它并不漂亮,但至少它定义了众所周知的命名方案的机制以及如何找到具有一系列后备选择的捆绑包,以便您可以优雅地降级并减少重叠。 @Alex:我同意,但我对直接使用内置捆绑支持不是很熟悉。大多数时候,我要么使用框架来完成,要么自己解析文本文件,就像这里一样。【参考方案3】:

kotarak 的 j18n(请注意,还有另一个用于 Java 的 j18n 库,但它们是不同的)看起来不错。

https://bitbucket.org/kotarak/j18n

【讨论】:

【参考方案4】:

我为此创建了clji18n,但在完成之前我必须切换到其他项目。它“几乎”可用,您可以尝试一下。

【讨论】:

如何在单个 EXE 中嵌入多语言 *.resx(或 *.resources)文件?

】如何在单个EXE中嵌入多语言*.resx(或*.resources)文件?【英文标题】:Howtoembedmultilanguage*.resx(or*.resources)filesinsingleEXE?【发布时间】:2010-12-2001:53:33【问题描述】:有很多教程如何创建多语言RESX文件以及如何使用AL.exe创建附属... 查看详情

IBM Worklight - 如何添加多语言支持?

...发布时间】:2013-07-2208:00:33【问题描述】:如何在Worklight应用程序中添加多语言支持?谁能举个例子?【问题讨论】:【参考方案1】:有关于如何使用Worklight执行此操作的文档:http://pic.dhe.ibm.com/infocenter/wrklight 查看详情

Flutter:多语言应用程序 - 如何覆盖语言环境?

】Flutter:多语言应用程序-如何覆盖语言环境?【英文标题】:Flutter:Multi-lingualapplication-howtooverridethelocale?【发布时间】:2018-09-0115:09:49【问题描述】:我按照Flutter官方页面(参见here)中给出的说明使我的应用程序可以在不同的... 查看详情

多语言编译中的 I/O 问题

...由两部分组成,一个在C中,另一个在C++中。它们通过用C+编写的main()进行接口,而对于这种情况,可以忽略fortran代码。我遇到了很多 查看详情

在winform应用程序中快速实现多语言的处理--开发框架模块的整合(代码片段)

我在上篇随笔《在WinForm应用程序中快速实现多语言的处理》里面介绍了Winform开发中多语言的处理解决方案,整个多语言解决方案是以实际需求为驱动,以减少代码改动,高效处理为目的,通过基类继承的方式减少代码修改,通... 查看详情

在 Zend 中使用多语言路由器

...在开发一个包含两个模块(管理员和公共)的多语言Zend应用程序,我想在url中传递语言代码,所以在我的引导程序中我有:受保护的函数_initAutoload()$this->bootstrap(\'frontController\');$this- 查看详情

在 Windows 中,如何输入 Unicode 基本多语言平面之外的字符?

】在Windows中,如何输入Unicode基本多语言平面之外的字符?【英文标题】:InWindows,howdoyouenteracharacteroutsideoftheUnicodeBasicMultilingualPlane?【发布时间】:2012-04-0301:44:08【问题描述】:我知道Windows从WindowsXP开始就支持补充平面。我有一... 查看详情

如何在 NestJS 中使用多语言电子邮件模板?

】如何在NestJS中使用多语言电子邮件模板?【英文标题】:HowtousemultilingualemailtemplatesinNestJS?【发布时间】:2021-05-1222:34:24【问题描述】:我正在使用GCPpubsub发布者将一些消息发布到一个主题,该主题又用于通过sendgridAPI发送电子... 查看详情

MFC/C#.NET混合模式本地化(多语言/多语言应用)

...】:2014-02-1213:47:03【问题描述】:我们这里有一个复杂的应用程序,它是用MFC和C#编写并以混合模式运行的。我们现在正在尝试设置此应用程序的多语言版本。因此,我为每个现有资源文件创建了英文资源文件(在 查看详情

Mac App Store 的多语言应用程序 - 在哪里设置 Mac App Store 中显示的语言?

】MacAppStore的多语言应用程序-在哪里设置MacAppStore中显示的语言?【英文标题】:MultilingualAppfortheMacAppStore-wheretosetlanguagesdisplayedinMacAppStore?【发布时间】:2013-12-0912:16:50【问题描述】:我有一个MacOsx应用程序要提交到MacAppStore-它... 查看详情

使用 Laravel 进行多语言数据库管理

...00:03:03【问题描述】:我正在Laravel中创建一个带有后端的应用程序。后端需要管理下载到应用程序的对象集合。对象必须根据设备语言进行本地化。在Laravel中是否有一种简单的方法可以做到这一点?也许是一个雄辩的或Laravel插... 查看详情

chatgpt的应用场景和创新应用

...的应用和发展。同时,ChatGPT还需要面对许多挑战,例如如何解决语言和文化差异带来的理解和表达问题,如何保证交互的准确性和流畅性等等。13.2ChatGPT在虚拟人物设计中的应用ChatGPT在虚拟人物设计中的应用越来越受到关注,... 查看详情

如何在 AWS Forgot Password 场景中支持多语言电子邮件

】如何在AWSForgotPassword场景中支持多语言电子邮件【英文标题】:Howtosupportmulti-lingualemailinAWSForgotPasswordscenario【发布时间】:2019-06-1506:42:24【问题描述】:我正在使用AWSCognito管理我的用户,并希望控制在“忘记密码”流程中发送... 查看详情

java中如何实现多语言切换

请问用jbuider开发,java中可以实现多语言转换么可以的话如何实现比如想在一个主界面中加一个切换语言的按钮,一点击界面语言即切换成英文一、国际化开发概述  软件的国际化:软件开发时,要使它能同时应对世界不同地... 查看详情

将 TEXT 字段拆分为多个表是不是可以在多语言应用程序中提供性能优化?

】将TEXT字段拆分为多个表是不是可以在多语言应用程序中提供性能优化?【英文标题】:DoessplittingTEXTfieldsintomultipletablesprovideperformanceoptimizationinmulti-languageapplication?将TEXT字段拆分为多个表是否可以在多语言应用程序中提供性能... 查看详情

在 MySQL 中存储多语言地理数据

...tainMySQL【发布时间】:2010-01-0812:52:25【问题描述】:我的应用程序需要使用地理数据来显示位置名称。我通常对大规模复杂地理数据(例如Geonames.org)非常熟悉,但对可能的MySQL实现不太熟悉。我有一个四层的自定义数据集,包... 查看详情

如何在多语言 asp.net MVC 网站的 URL 中支持有语言和无语言的路由

】如何在多语言asp.netMVC网站的URL中支持有语言和无语言的路由【英文标题】:HowtosupportrouteswithandwithoutlanguageinURLinmultilingualasp.netMVCwebsite【发布时间】:2013-12-1113:36:01【问题描述】:尝试为我当前的mvc项目设置本地化。我需要配... 查看详情

多语言 wpf 应用程序

】多语言wpf应用程序【英文标题】:multilingualwpfapplication【发布时间】:2012-07-0421:13:12【问题描述】:我有一个WPF应用程序(英文),我想让用户选择不同的语言。我已经阅读了一些在运行时应用程序中更改语言的可能性,但我... 查看详情