【问题标题】:Number shaping for Bengali and Marathi in ibm icu libraryibm icu 库中孟加拉语和马拉地语的数字整形
【发布时间】:2021-06-19 04:02:32
【问题描述】:

我想知道为什么只有当我使用 ibm.icu 库尝试各种其他语言时,数字才对孟加拉语和马拉地语进行整形(不以拉丁格式显示),请参阅下面的代码及其结果-

代码 -

import com.ibm.icu.text.DateFormat;

import java.util.Date;
import java.util.Locale;

public static void main() {

        final Locale english = new Locale("en", "IN");
        final Locale hindi = new Locale("hi", "IN");
        final Locale tamil = new Locale("ta", "IN");
        final Locale telugu = new Locale("te", "IN");
        final Locale kannada = new Locale("kn", "IN");
        final Locale malayalam = new Locale("ml", "IN");
        final Locale marathi = new Locale("mr", "IN");
        final Locale bengali = new Locale("bn", "IN");
        final Locale gujrati = new Locale("gu", "IN");

        Locale[] availableLocales = new Locale[]{english, hindi, tamil, telugu, kannada, malayalam, marathi, bengali, gujrati};

        for (Locale availableLocale : availableLocales) {
            System.out.println(availableLocale.getDisplayLanguage());
            printer(availableLocale);
            System.out.println("--------");
        }
    }


    private static void printer(final Locale locale) {
        DateFormat df = DateFormat.getInstanceForSkeleton("EEEE, MMMM d, YYYY", locale);
        System.out.println(df.format(new Date()));
    }

结果 -

English
Friday 19 March 2021
--------
Hindi
शुक्रवार, 19 मार्च 2021
--------
Tamil
வெள்ளி, 19 மார்ச், 2021
--------
Telugu
19, మార్చి 2021, శుక్రవారం
--------
Kannada
ಶುಕ್ರವಾರ, ಮಾರ್ಚ್ 19, 2021
--------
Malayalam
2021, മാർച്ച് 19, വെള്ളിയാഴ്‌ച
--------
Marathi
शुक्रवार, १९ मार्च, २०२१
--------
Bengali
শুক্রবার, ১৯ মার্চ, ২০২১
--------
Gujarati
શુક્રવાર, 19 માર્ચ, 2021

用例 -

  • 我希望仅针对所有语言以拉丁格式显示数字。

查询 -

  • 如何解决这个问题?
  • 为什么这些语言环境的数字没有以拉丁格式格式化?

【问题讨论】:

    标签: java java-8 websphere java-11 icu


    【解决方案1】:

    您可以通过使用standard Unicode extension nu 创建您的区域设置来强制使用拉丁数字,其标准值包括latn。我不知道它是否适用于 ibm.icu 库,但我知道这适用于 java.text.SimpleDateFormat

    final Locale english = Locale.forLanguageTag("en-IN-u-nu-latn");
    final Locale hindi = Locale.forLanguageTag("hi-IN-u-nu-latn");
    final Locale tamil = Locale.forLanguageTag("ta-IN-u-nu-latn");
    final Locale telugu = Locale.forLanguageTag("te-IN-u-nu-latn");
    final Locale kannada = Locale.forLanguageTag("kn-IN-u-nu-latn");
    final Locale malayalam = Locale.forLanguageTag("ml-IN-u-nu-latn");
    final Locale marathi = Locale.forLanguageTag("mr-IN-u-nu-latn");
    final Locale bengali = Locale.forLanguageTag("bn-IN-u-nu-latn");
    final Locale gujrati = Locale.forLanguageTag("gu-IN-u-nu-latn");
    

    【讨论】:

    • 感谢 VGR@ 的建议,我会尝试解决方案并通知您,如果您知道,请告知,数字未格式化为拉丁格式的原因是什么?
    • 我不知道。我假设每个地区都是基于相应地区流行的文化习俗。 The CLDR 网站有很多关于他们决定的文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2015-04-17
    相关资源
    最近更新 更多