标签: icu4j

如何在ICU4J中获得"当前"IANA时区缩写?

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

我定位的输出格式包括特定时间的有效缩写 - 例如"英国夏令时"的"BST"或"太平洋标准时间"的"PST".

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

使用纽约的简短示例:

import java.util.Date;
import java.util.Locale;
import com.ibm.icu.util.TimeZone;
import com.ibm.icu.text.SimpleDateFormat;

public class Test {
    public static void main(String[] args) {
        TimeZone zone = TimeZone.getTimeZone("America/New_York");
        SimpleDateFormat format = new SimpleDateFormat("zzz", Locale.US);
        format.setTimeZone(zone);

        // One month before the unix epoch
        System.out.println(format.format(new Date(-2678400000L))); // GMT-5

        // At the unix epoch
        System.out.println(format.format(new Date(0L))); // EST
    }
}
Run Code Online (Sandbox Code Playgroud)

(我正在使用ICU4J 55.1运行,包括库存下载和使用2015e数据发布更新后.)

我不清楚ICU4J是从tz数据还是从CLDR得到它的缩写 - 我怀疑它是后者,因为tz数据中没有任何东西可以暗示这里有所不同.

它似乎也受到语言环境的影响,我认为这是合理的 - 使用美国语言环境我可以看到美国/纽约的EST/EDT,但欧洲/伦敦没有; 在英国的地方,我看到欧洲/伦敦的GMT/BST,但美国/纽约没什么:(

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

更新

感谢RealSkeptic的评论,它看起来 …

java timezone icu4j

25
推荐指数
1
解决办法
1644
查看次数

HTML ASCII Case不敏感的ICU Collat​​or

我需要创建一个对应于https://www.w3.org/2005/xpath-functions/collat​​ion/html-ascii-case-insensitive/的Collat​​or,即在进行比较时忽略ASCII A-Za-z字符的区分大小写.

我尝试使用以下ICU4j RuleBasedCollator:

final RuleBasedCollator collator =
        new RuleBasedCollator("&a=A, b=B, c=C, d=D, e=E, f=F, g=G, h=H, "
                + "i=I, j=J, k=K, l=L, m=M, n=N, o=O, p=P, q=Q, r=R, s=S, t=T, "
                + "u=U, v=V, u=U, v=V, w=W, x=X, y=Y, z=Z").freeze();
Run Code Online (Sandbox Code Playgroud)

但是,以下比较似乎失败了,我希望它能成功(即返回true):

final SearchIterator searchIterator = new StringSearch(
        "pu", new StringCharacterIterator("iNPut"), collator);
return searchIterator.first() >= 0;
Run Code Online (Sandbox Code Playgroud)

我的规则中缺少什么?

java icu icu4j

7
推荐指数
1
解决办法
294
查看次数

应该使用哪种罗马化标准来改进阿拉伯语 - 拉丁语的ICU4j音译?

我们要求将阿拉伯语文本音译为拉丁字符(不带变音符号)并将其显示给用户.

我们目前正在使用IBM ICU4j.API不能很好地将阿拉伯文本转换成适当的可读拉丁字符.请参考以下示例:

  • 阿拉伯文:

    صدامحسينالتكريتي

  • 谷歌的音译输出

    : Sadaam Hussein al-tikriti

  • ICU4J的音译输出

    : ?d?m ?syn ?ltkryty

我们如何提高ICU4j库的音译输出?

ICU4J为我们提供了编写我们自己的规则的选项,但我们目前陷入困境,因为我们团队中没有人知道阿拉伯语,并且无法找到任何可以遵循的正确标准.

java nlp transliteration transcription icu4j

6
推荐指数
1
解决办法
309
查看次数

在库中使用时从 ICU4J 中剥离数据文件

我有一个包含在不同 android 应用程序中的内部库。这个库依赖于 ICU4J。这意味着我们向最终 APK 添加了约 10MB。

lib 使用 ICU4J 的一个子集,所以我想删除所有不必要的数据文件。

ICU文档

目前 ICU4J 没有提供任何工具来揭示数据文件之间的这些依赖关系,因此直接在 ICU4J 项目中修剪数据是一件难事。删除数据时的关键点是确保也删除对该数据的所有依赖项。

我想在构建应用程序时删除数据文件。

StackOverflow 上的一个问题是相关的:Exclude specific resources from a aar dep。不幸的是,该exploded-aar目录不再存在。

您知道我可以在哪一步从 ICU4J 依赖项中删除文件吗?这是我尝试删除cjdict.dict文件的内容:

tasks.create("excludeTask") << {
    ["java/com/ibm/icu/impl/data/icudt60b/brkitr/cjdict.dict"]
            .collect { "${getGroup()}/${getName()}/${getVersion()}/${it}"}
            .each {
        // Question 2. From which dir should I remove the files?
        File file = file("${buildDir}/intermediates/exploded-aar/${it}")
        println("Excluding file " + file)
        if (file.exists()) {
            file.delete();
        }
    }
}

tasks.whenTaskAdded({
    // Question 1. Before which task …
Run Code Online (Sandbox Code Playgroud)

android android-gradle-plugin icu4j

5
推荐指数
1
解决办法
435
查看次数

如何在Java中使用不受支持的Locale

作为国际化的一部分,得到了支持少数国家的要求

安提瓜和巴布达 - ISO3166代码 - AG和多米尼加共和国 - ISO3166代码 - DO

    Locale loc = new Locale("en", "AG");
    DateFormat df1 = DateFormat.getDateInstance(DateFormat.SHORT, loc); 
    System.out.println("Short format: " + df1.format(new Date()));
Run Code Online (Sandbox Code Playgroud)

Java将以mm/dd/yy格式显示日期,其中这些国家/地区的日期格式为dd/mm/yy.

有什么方法可以达到dd/mm/yy的模式吗?甚至ICU4J图书馆也不支持这些国家?

提前致谢

java locale date-formatting icu4j

4
推荐指数
1
解决办法
677
查看次数

Java 的音译

我需要Transliterate使用谷歌音译器或任何其他替代工具将任何语言中的任何给定单词转换为英语。我尝试寻找解决方案,但找不到任何解决方案。Google Translate API 有很多解决方案,但我需要的是Transliteration.

我需要的只是提供一个字符串(例如:阿拉伯语)作为输入,然后 Google Transliterator API 将其转换为英语作为输出。

发现这个可能的重复,但无法让它工作,并且大多数链接不再工作...找到这个,但我需要在 java 控制台应用程序中使用它。

有什么建议吗?我需要在JAVA程序中使用它。

java gwt google-api transliteration icu4j

1
推荐指数
1
解决办法
4617
查看次数