问题标签 [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.
java - 使用 ICU4j 格式化内容时如何不使用语言环境数字
我最近升级到 Java 8 并遇到了格式化日期的“问题”。JDK 8 允许提供程序用于某些 g11n/i18n 功能,如果类路径上有 ICU,它应该选择它。这不是一个意想不到的曲线问题,因为我的大部分功能都像以前一样工作。
我想显示今天的日期,但使用语言环境的日期格式、小数点分隔符等。这很好,但是当我使用具有不同数字集的某些语言环境时,例如ar_OM,它使用印度教-阿拉伯语Numeral System,我将日期格式化,但也使用此数字系统中的数字。
代码:
我希望看到它打印出2015/04/11,但是它打印出 ١١/٠٤/ ٢٠١٥
有没有办法让它不改变数字系统/符号,但仍然提供特定于语言环境的格式?
c++ - icu::BreakIterator 类中是否有任何 API 以“字节”数给出令牌偏移量?
使用上面的 API setText() 可以得到 unicode 字符数的结果。BreakIterator 类中是否有任何 API 可以根据字节数给出令牌偏移量?
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_STANDARD
和TimeZoneNames.NameType.SHORT_DAYLIGHT
),与 IANA tz 数据库的区域缩写(未本地化)兼容。
这几乎正是我想要的——但在大多数情况下,这不会早于 1970 年,也不包括所有相关数据:
鉴于此时几乎没有间接性-我正在告诉ICU4J我想要什么-我怀疑信息不可用:(
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
?
java - 使用 icu4j 将德语变音符号音译到他们的 DIN 5007-2 替代方案中
我希望能够音译德语变音符号
进入他们的DIN 5007-2替代品
就像在这种情况下:
他们在第 208 行的位置
我想避免创建复杂的 Java 代码,比如定义定制和所有需要的东西。我想让代码尽可能简单,因为我必须在 ColdFusion 应用程序中使用此代码。
我做了一些实验
和
及其变体,它们都导致:
如果可能的话,我想坚持使用 .getInstance() 方法。这里的问题是 .getInstance() 方法的 ID 字符串会导致将变音符号音译成它们的 DIN 5007-2 等效项?
java - 如何在 ICU4J 中合并音译规则?
我正在使用 ICU4J 并尝试合并音译规则。对于最终结果,我需要将所有德语 umalaut 字符转换为其 DIN 5007-2 替代品,并将所有非 ASCII 字符转换为其 ASCII 版本。
当我尝试这样做时:
我得到:
这是不正确的,因为德语变音符号没有被转换
如果我像这样恢复 GermanASCIIRules 的顺序:
我得到:
如果我不结合规则,并且用户只有 German_DIN_5007_2Rules 像这样:
我得到:
这里的变音符号被正确音译,但所有剩余的字符都搞砸了:(
java - java.lang.NoClassDefFoundError:在 Web Sphere WAS 8.5 上部署期间
我在 WAS 8.5 上部署期间收到 java.lang.NoClassDefFoundError 错误。我已经包含了 icu4j jar,但仍然出现以下错误。我已将 jar 放在 lib 文件夹中。请您指教。
icu4j - Android N:我如何从 Android SDK API 迁移到 Android ICU API
ICU4J
如果我想将我的应用程序版本升级到支持,我对此感到困惑Android N
。如何从以前的 Android SDK 迁移到 Android ICU API。例如,如果我在我的应用程序中使用了日历,我java.util.Calendar
会用 Android ICU API 再次实现吗?还是有最短的方法?
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
?如果我能在不切换库的情况下找到解决方案,那就太好了。
java - 如何在使用 PDFBox 生成的 pdf 文件中显示阿拉伯字符
我正在尝试在使用 PDFBox 生成的 pdf 文件中显示阿拉伯字符串,实际上我可以使用 ICU4J 和特定字体显示来自 RTL 的阿拉伯字符串,但问题是这样的:即使字符串从 RTL 中正确显示,字符仍然分开即使我尝试了一些字体,问题还没有解决。这是用于测试的代码片段:
这段代码给我的结果字符串是这样的: ال س ل ام ع ل ي ك م </p>
注意:我在结果字符串中添加空格字符只是为了清楚起见。