2016-11-05 8 views
1

Я использую JSTL <fmt:message> тег с файлом свойств, чтобы локализовать текст на JSP. Тексты для разных языков хранятся в соответствующем файле свойств, связанном с ключом.Как локализовать систему чисел в Java, например. на хинди или в маратхи?

Затем используется этот ключ в JSP, как, <fmt:message key="somekey"/>

Как локализовать систему счисления этот путь? Например. когда используется маратхский язык, латинский номер 456 должен печатать как 456.

+0

Существует два отдельных вопроса: 1) форматирование чисел в JSTL и 2) поддержка маратхи в Java. Если вам интереснее второй вопрос, укажите его в заголовке вопроса. – kgeorgiy

ответ

1

маратхи

К сожалению, нет стандартной реализации для маратхи. Но вы можете использовать ICA RuleBasedNumberFormat для создания собственных переводов.

Существует также GitHub project, которые используют его для форматирования чисел маратхи, так что вам не нужно писать the rules самостоятельно. Вы можете легко расширить его, чтобы обрабатывать несколько языков и создавать для него собственный тег.

Hindi

Hindi поддерживается в Java NumberFormat, но fmt:numberFormat не использовать его непосредственно, поэтому вам все равно придется создать пользовательский тег.

-1

Номера должны быть отформатированы с использованием <fmt:numberFormat>. См. Пример в J2EE tutorial.

+0

Я не хочу форматировать числа. Различные языки будут иметь разные символы для чисел e..g на английском языке = 456, In Marathi = 456 – ashishjmeshram

+0

И каков ожидаемый результат и почему? – kgeorgiy

+0

Если языковой стандарт является английским, он должен отображать 456, и если локаль является маратхи, она должна отображать 456. Конечный пользователь приложения может знать или не знать английский, в этом случае они не будут распознавать английские номера. У конечного пользователя будет возможность выбрать предпочтительный язык. Текст преобразуется с использованием файла свойств. – ashishjmeshram

0

Если вы просто хотите преобразовать свои цифры в эквивалентные числа Марати. Затем создайте класс, как показано ниже. Этот класс помогает вам преобразовывать ваши цифры не только в маратхи, но и punjabi, gujarati, hundi, но и урду. вы можете добавить еще много других.

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") }