如何在 Java 中本地化数字系统,例如用印地语还是马拉地语?
How to localize number system in Java e.g. in Hindi or in Marathi?
我使用带有属性文件的 JSTL <fmt:message>
标记来本地化 JSP 上的文本。不同语言的文本保存在与密钥关联的各自属性文件中。
然后在 JSP 中使用该密钥,例如 <fmt:message key="somekey"/>
如何以这种方式本地化数字系统?例如。当使用马拉地语语言环境时,拉丁数字 456 应打印为 ४५६。
数字的格式应使用 <fmt:numberFormat>
。请参阅 J2EE tutorial.
中的示例
马拉地语
遗憾的是,马拉地语没有标准实施。但您可以使用 ICU 的 RuleBasedNumberFormat 创建您自己的翻译。
还有一个GitHub project, which use it to format Marathi numbers, so that you don't need to write the rules你自己。您可以轻松扩展它以处理多种语言并为其创建自定义标签。
印地语
Java 的 NumberFormat
支持印地语,但 fmt:numberFormat
不直接使用它,因此您仍然需要创建自定义标签。
如果您只想将您的数字转换为马拉地语等效数字。
然后像下面这样创建 class 。 class 不仅可以帮助您将数字转换为马拉地语,还可以转换为旁遮普语、古吉拉特语、洪地语和乌尔都语。您还可以添加更多。
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") }
我使用带有属性文件的 JSTL <fmt:message>
标记来本地化 JSP 上的文本。不同语言的文本保存在与密钥关联的各自属性文件中。
然后在 JSP 中使用该密钥,例如 <fmt:message key="somekey"/>
如何以这种方式本地化数字系统?例如。当使用马拉地语语言环境时,拉丁数字 456 应打印为 ४५६。
数字的格式应使用 <fmt:numberFormat>
。请参阅 J2EE tutorial.
马拉地语
遗憾的是,马拉地语没有标准实施。但您可以使用 ICU 的 RuleBasedNumberFormat 创建您自己的翻译。
还有一个GitHub project, which use it to format Marathi numbers, so that you don't need to write the rules你自己。您可以轻松扩展它以处理多种语言并为其创建自定义标签。
印地语
Java 的 NumberFormat
支持印地语,但 fmt:numberFormat
不直接使用它,因此您仍然需要创建自定义标签。
如果您只想将您的数字转换为马拉地语等效数字。 然后像下面这样创建 class 。 class 不仅可以帮助您将数字转换为马拉地语,还可以转换为旁遮普语、古吉拉特语、洪地语和乌尔都语。您还可以添加更多。
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") }