2

我使用带有属性文件的 JSTL<fmt:message>标记来本地化 JSP 上的文本。不同语言的文本保存在与键关联的各自属性文件中。

然后在 JSP 中使用该密钥,例如,<fmt:message key="somekey"/>

如何以这种方式本地化数字系统?例如,当使用马拉地语语言环境时,拉丁数字 456 应打印为 ४५६。

4

3 回答 3

3

马拉地语

不幸的是,马拉地语没有标准实现。但是您可以使用 ICU 的RuleBasedNumberFormat来创建您自己的翻译。

还有一个GitHub 项目,用它来格式化马拉地语数字,这样你就不需要自己写规则了。您可以轻松扩展它以处理多种语言并为其创建自定义标签。

印地语

Java 支持印地语NumberFormat,但fmt:numberFormat不直接使用它,因此您仍然需要创建自定义标签。

于 2016-11-08T07:30:29.477 回答
0

如果您只想将您的数字转换为马拉地语等效数字。然后创建如下所示的类。本课程可帮助您将数字转换为不仅是马拉地语,还有旁遮普语、古吉拉特语、印度语和乌尔都语。你也可以添加更多。

HashMap<String, String> unicodeConversionList = new HashMap<>();

public void prepareList(String lang)
{
    unicodeConversionList.clear();
    if("marathi".equalsIgnoreCase(lang))
    {
        unicodeConversionList.put("0", "\u0966");
        unicodeConversionList.put("1", "\u0967");
        unicodeConversionList.put("2", "\u0968");
        unicodeConversionList.put("3", "\u0969");
        unicodeConversionList.put("4", "\u096A");
        unicodeConversionList.put("5", "\u096B");
        unicodeConversionList.put("6", "\u096C");
        unicodeConversionList.put("7", "\u096D");
        unicodeConversionList.put("8", "\u096E");
        unicodeConversionList.put("9", "\u096F");
    }
    else if("hindi".equalsIgnoreCase(lang))
    {
        unicodeConversionList.put("0", "\u0966");
        unicodeConversionList.put("1", "\u0967");
        unicodeConversionList.put("2", "\u0968");
        unicodeConversionList.put("3", "\u0969");
        unicodeConversionList.put("4", "\u096A");
        unicodeConversionList.put("5", "\u096B");
        unicodeConversionList.put("6", "\u096C");
        unicodeConversionList.put("7", "\u096D");
        unicodeConversionList.put("8", "\u096E");
        unicodeConversionList.put("9", "\u096F");
    }else if("gujarati".equalsIgnoreCase(lang))
    {
        unicodeConversionList.put("0", "\u0AE6");
        unicodeConversionList.put("1", "\u0AE7");
        unicodeConversionList.put("2", "\u0AE8");
        unicodeConversionList.put("3", "\u0AE9");
        unicodeConversionList.put("4", "\u0AEA");
        unicodeConversionList.put("5", "\u0AEB");
        unicodeConversionList.put("6", "\u0AEC");
        unicodeConversionList.put("7", "\u0AED");
        unicodeConversionList.put("8", "\u0AEE");
        unicodeConversionList.put("9", "\u0AEF");
    }else if("punjabi".equalsIgnoreCase(lang))
    {
        unicodeConversionList.put("0", "\u0AE6");
        unicodeConversionList.put("1", "\u0AE7");
        unicodeConversionList.put("2", "\u0AE8");
        unicodeConversionList.put("3", "\u0AE9");
        unicodeConversionList.put("4", "\u0AEA");
        unicodeConversionList.put("5", "\u0AEB");
        unicodeConversionList.put("6", "\u0AEC");
        unicodeConversionList.put("7", "\u0AED");
        unicodeConversionList.put("8", "\u0AEE");
        unicodeConversionList.put("9", "\u0AEF");
    }else if("urdu".equalsIgnoreCase(lang))
    {
        unicodeConversionList.put("0", "\u06F0");
        unicodeConversionList.put("1", "\u06F1");
        unicodeConversionList.put("2", "\u0682");
        unicodeConversionList.put("3", "\u0693");
        unicodeConversionList.put("4", "\u06A4");
        unicodeConversionList.put("5", "\u06B5");
        unicodeConversionList.put("6", "\u06C6");
        unicodeConversionList.put("7", "\u06D7");
        unicodeConversionList.put("8", "\u06E8");
        unicodeConversionList.put("9", "\u06F9");
    }else{
        unicodeConversionList.put("0", "0");
        unicodeConversionList.put("1", "1");
        unicodeConversionList.put("2", "2");
        unicodeConversionList.put("3", "3");
        unicodeConversionList.put("4", "4");
        unicodeConversionList.put("5", "5");
        unicodeConversionList.put("6", "6");
        unicodeConversionList.put("7", "7");
        unicodeConversionList.put("8", "8");
        unicodeConversionList.put("9", "9");
    }
}

public String convertToMarathi(String lang,String str)
{
    prepareList(lang);

    StringBuilder response = new StringBuilder("");
    if(str!=null && str.trim().length()>0 && unicodeConversionList.size()==10)
        for (int i = 0; i < str.length(); i++)
        {
            String temp = "" + str.charAt(i);
            if (unicodeConversionList.containsKey(temp))
                response.append(unicodeConversionList.get(temp));
            else
                response.append(temp);
        }
    else
        response.append(str);

    return response.toString();
}

使用这些代码非常容易EL

如果您使用过滤器,那么

//Add This code to your filters
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
        ServletException
{
    HttpServletRequest req = (HttpServletRequest) request;
    if (req.getSession().isNew())
    {
        HttpSession session=req.getSession();
        session.setAttribute("converter", new ConverterUtil());
    }
    // pass the request along the filter chain
    chain.doFilter(request, response);
}

然后你需要做的JSP就是

${converter.convertToMarathi("Gujarati","1234 u 567 z 890") }

如果您想在每个页面中手动编写,请按照下面的代码

<jsp:useBean id="converter2" class="digimation.bestowBucket.util.ConverterUtil"></jsp:useBean>
${converter2.convertToMarathi("maRatHi","1234 u 567 z 890") }
于 2016-11-13T09:48:52.697 回答
-1

数字应使用<fmt:numberFormat>. 请参阅J2EE 教程中的示例。

于 2016-11-05T11:39:16.483 回答