Настройка турецкого и английского языков: перевод турецких символов на латинские эквиваленты
Я хочу перевести мои турецкие строки в строчные буквы как на английском, так и на турецком языках. Я делаю это:
String myString="YAŞAT BAYRI";
Locale trlocale= new Locale("tr-TR");
Locale enLocale = new Locale("en_US");
Log.v("mainlist", "en source: " +myString.toLowerCase(enLocale));
Log.v("mainlist", "tr source: " +myString.toLowerCase(trlocale));
Вывод:
en source: yaşar bayri
tr source: yaşar bayri
Но я хочу иметь такой вывод:
en source: yasar bayri
tr source: yaşar bayrı
Возможно ли это на Java?
Ответы
Ответ 1
Если вы используете конструктор Locale
, вы можете и должны указать язык, страну и вариант как отдельные аргументы:
new Locale(language)
new Locale(language, country)
new Locale(language, country, variant)
Поэтому ваша тестовая программа создает локали с языком "tr-TR" и "en_US". Для вашей тестовой программы вы можете использовать new Locale("tr", "TR")
и new Locale("en", "US")
.
Если вы используете Java 1.7+, то вы также можете анализировать языковой тег с помощью Locale.forLanguageTag
:
String myString="YASAT BAYRI";
Locale trlocale= Locale.forLanguageTag("tr-TR");
Locale enLocale = Locale.forLanguageTag("en_US");
Создает строки, которые имеют соответствующий строчный регистр для языка.
Ответ 2
Я думаю, что это проблема:
Locale trlocale= new Locale("tr-TR");
Попробуйте это вместо:
Locale trlocale= new Locale("tr", "TR");
Чтобы конструктор мог указать страну и язык.
Ответ 3
Если вам просто нужна строка в ASCII без акцентов, это может сделать следующее.
Сначала акцентированный символ может быть разделен на ASCII char и сочетать диакритическую метку (акцент с нулевой шириной). Тогда только эти акценты могут быть удалены путем замены регулярного выражения.
public static String withoutDiacritics(String s) {
// Decompose any ş into s and combining-,.
String s2 = Normalizer.normalize(s, Normalizer.Form.NFD);
return s2.replaceAll("(?s)\\p{InCombiningDiacriticalMarks}", "");
}
Ответ 4
вы можете сделать это:
Locale trlocale= new Locale("tr","TR");
Первым параметром является ваш язык, а другой - ваша страна.
Ответ 5
Символы ş
и s
- разные символы. Изменение языка не может помочь вам перевести один в другой. Вам нужно создать таблицу символов с турецкими языками и сделать это самостоятельно. Я однажды сделал это для вьетнамского языка, у которого много таких персонажей. Вам нужно иметь дело с 4 из 5, не так ли? Итак, удачи!