问题标签 [icu4j]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
158 浏览

java - 使用 ICU4j 格式化内容时如何不使用语言环境数字

我最近升级到 Java 8 并遇到了格式化日期的“问题”。JDK 8 允许提供程序用于某些 g11n/i18n 功能,如果类路径上有 ICU,它应该选择它。这不是一个意想不到的曲线问题,因为我的大部分功能都像以前一样工作。

我想显示今天的日期,但使用语言环境的日期格式、小数点分隔符等。这很好,但是当我使用具有不同数字集的某些语言环境时,例如ar_OM,它使用印度教-阿拉伯语Numeral System,我将日期格式化,但也使用此数字系统中的数字。

代码:

我希望看到它打印出2015/04/11,但是它打印出 ١١‏/٠٤‏/ ٢٠١٥

有没有办法让它不改变数字系统/符号,但仍然提供特定于语言环境的格式?

0 投票
0 回答
43 浏览

c++ - icu::BreakIterator 类中是否有任何 API 以“字节”数给出令牌偏移量?

使用上面的 API setText() 可以得到 unicode 字符数的结果。BreakIterator 类中是否有任何 API 可以根据字节数给出令牌偏移量?

0 投票
1 回答
1918 浏览

java - 如何在 ICU4J 中获得“当前”IANA 时区缩写?

我目前正在尝试编写一套时区验证程序,以查看各种平台是否解释IANA 时区数据

我的目标输出格式包括对特定时间有效的缩写 - 例如“英国夏令时间”的“BST”或“太平洋标准时间”的“PST”。

在大多数平台上,这很容易——但奇怪的是,ICU4J 似乎不起作用。根据SimpleDateFormat文档,我应该能够使用“zzz”模式来获得我正在寻找的东西,但这似乎在很多时候都回到了 GMT+X 的“O”模式。对于某些时区,根本没有缩写。

使用纽约的简短示例:

(我正在使用 ICU4J 55.1 运行,包括股票下载和使用 2015e 数据版本更新后。)

我不清楚 ICU4J 是从 tz 数据还是从 CLDR 获得缩写词——我怀疑是后者,因为 tz 数据中没有任何内容表明这里有差异。

它似乎也受到语言环境的影响,我认为这是合理的 - 使用美国语言环境,我可以看到美国/纽约的 EST/EDT,但对于欧洲/伦敦则没有;在英国地区,我看到欧洲/伦敦的格林威治标准时间/英国夏令时,但美国/纽约没有:(

有没有办法说服 ICU4J 回退到 tz 缩写?在我非常具体的情况下,这就是我正在寻找的全部。

更新

感谢 RealSkeptic 的评论,它看起来TimeZoneNames是一种无需格式化即可获取此数据的更清洁方法。这一切听起来很有希望——甚至还有TimeZoneNames.getTZDBInstance

返回一个 TimeZoneNames 实例,其中仅包含特定的短区域名称 (TimeZoneNames.NameType.SHORT_STANDARDTimeZoneNames.NameType.SHORT_DAYLIGHT),与 IANA tz 数据库的区域缩写(未本地化)兼容。

这几乎正​​是我想要的——但在大多数情况下,这不会早于 1970 年,也不包括所有相关数据:

鉴于此时几乎没有间接性-我正在告诉ICU4J我想要什么-我怀疑信息不可用:(

0 投票
2 回答
172 浏览

unicode - 为什么 ICU4J 不匹配 UTF-8 排序顺序?

我很难理解 unicode 排序顺序。

当我Collator.getInstance(Locale.ENGLISH).compare("_", "#")在 ICU4J 55.1 下运行时,我得到一个返回值,-1表明它_#.

但是,查看http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=dec我看到#(U+0023) 在_(U+005F) 之前。为什么 ICU4J 返回值-1

0 投票
2 回答
1486 浏览

java - 使用 icu4j 将德语变音符号音译到他们的 DIN 5007-2 替代方案中

我希望能够音译德语变音符号

进入他们的DIN 5007-2替代品

就像在这种情况下:

https://german.stackexchange.com/questions/4992/conversion-table-for-diacritics-eg-%C3%BC-%E2%86%92-ue

我发现的最相关的用例是: https ://github.com/elastic/elasticsearch-analysis-icu/blob/master/src/test/java/org/elasticsearch/index/analysis/SimpleIcuCollat​​ionTokenFilterTests.java

他们在第 208 行的位置

我想避免创建复杂的 Java 代码,比如定义定制和所有需要的东西。我想让代码尽可能简单,因为我必须在 ColdFusion 应用程序中使用此代码。

我做了一些实验

及其变体,它们都导致:

如果可能的话,我想坚持使用 .getInstance() 方法。这里的问题是 .getInstance() 方法的 ID 字符串会导致将变音符号音译成它们的 DIN 5007-2 等效项?

0 投票
1 回答
778 浏览

java - 如何在 ICU4J 中合并音译规则?

我正在使用 ICU4J 并尝试合并音译规则。对于最终结果,我需要将所有德语 umalaut 字符转换为其 DIN 5007-2 替代品,并将所有非 ASCII 字符转换为其 ASCII 版本。

当我尝试这样做时:

我得到:

这是不正确的,因为德语变音符号没有被转换

如果我像这样恢复 GermanASCIIRules 的顺序:

我得到:

如果我不结合规则,并且用户只有 German_DIN_5007_2Rules 像这样:

我得到:

这里的变音符号被正确音译,但所有剩余的字符都搞砸了:(

0 投票
1 回答
2079 浏览

java - java.lang.NoClassDefFoundError:在 Web Sphere WAS 8.5 上部署期间

我在 WAS 8.5 上部署期间收到 java.lang.NoClassDefFoundError 错误。我已经包含了 icu4j jar,但仍然出现以下错误。我已将 jar 放在 lib 文件夹中。请您指教。

0 投票
3 回答
927 浏览

icu4j - Android N:我如何从 Android SDK API 迁移到 Android ICU API

ICU4J如果我想将我的应用程序版本升级到支持,我对此感到困惑Android N。如何从以前的 Android SDK 迁移到 Android ICU API。例如,如果我在我的应用程序中使用了日历,我java.util.Calendar会用 Android ICU API 再次实现吗?还是有最短的方法?

0 投票
1 回答
577 浏览

java - icu4j 返回货币代码而不是符号

背景

我有一个 Android 应用程序,我想根据 ISO 代码和当前语言环境将整数值格式化为货币字符串。为此,我正在使用 ICU 库 1.8.1。

例如,如果我有一个值 75 并且 ISO 代码是“USD”,我希望在美国语言环境中看到“$75”,而在法语语言环境中看到“USD75”。

问题

问题是即使我将语言环境明确设置为美国,我也总是看到“75 美元”。我认为问题出在我的NumberFormat货币实例中,但后来我尝试简单地获取货币符号并注意到它不正确。由于某种原因,getSymbol()方法总是返回货币代码。

我还检查了这个链接:Java: Currency symbol based on ISO 4217 currency cod。看来我的应用程序的工作方式有点不同。不确定这是否是库中的错误。

问题

currency.getSymbol()如果您的语言环境是,则返回“USD”对我来说是有意义的Locale.FRANCE。但是为什么当我的语言环境是时它会返回“USD” Locale.US?如果我能在不切换库的情况下找到解决方案,那就太好了。

0 投票
0 回答
888 浏览

java - 如何在使用 PDFBox 生成的 pdf 文件中显示阿拉伯字符

我正在尝试在使用 PDFBox 生成的 pdf 文件中显示阿拉伯字符串,实际上我可以使用 ICU4J 和特定字体显示来自 RTL 的阿拉伯字符串,但问题是这样的:即使字符串从 RTL 中正确显示,字符仍然分开即使我尝试了一些字体,问题还没有解决。这是用于测试的代码片段:

这段代码给我的结果字符串是这样的: ال س ل ام ع ل ي ك م </p>

注意:我在结果字符串中添加空格字符只是为了清楚起见。