mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2025-01-11 01:21:56 +01:00
parent
500e930237
commit
61af26d7ce
@ -57,6 +57,7 @@ import nodomain.freeyourgadget.gadgetbridge.util.language.impl.PersianTransliter
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.language.impl.PolishTransliterator;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.language.impl.RussianTransliterator;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.language.impl.ScandinavianTransliterator;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.language.impl.SerbianTransliterator;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.language.impl.TurkishTransliterator;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.language.impl.UkranianTransliterator;
|
||||
|
||||
@ -85,6 +86,7 @@ public class LanguageUtils {
|
||||
put("polish", new PolishTransliterator());
|
||||
put("russian", new RussianTransliterator());
|
||||
put("scandinavian", new ScandinavianTransliterator());
|
||||
put("serbian", new SerbianTransliterator());
|
||||
put("turkish", new TurkishTransliterator());
|
||||
put("ukranian", new UkranianTransliterator());
|
||||
put("armenian", new ArmenianTransliterator());
|
||||
|
@ -18,14 +18,19 @@ package nodomain.freeyourgadget.gadgetbridge.util.language;
|
||||
|
||||
import org.apache.commons.lang3.text.WordUtils;
|
||||
|
||||
import java.text.Normalizer;
|
||||
import java.util.Map;
|
||||
|
||||
public class SimpleTransliterator implements Transliterator {
|
||||
private final Map<Character, String> transliterateMap;
|
||||
private final boolean convertToLowercase;
|
||||
|
||||
public SimpleTransliterator(final Map<Character, String> transliterateMap, final boolean convertToLowercase) {
|
||||
this.transliterateMap = transliterateMap;
|
||||
this.convertToLowercase = convertToLowercase;
|
||||
}
|
||||
|
||||
public SimpleTransliterator(final Map<Character, String> transliterateMap) {
|
||||
this.transliterateMap = transliterateMap;
|
||||
this(transliterateMap, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -46,14 +51,14 @@ public class SimpleTransliterator implements Transliterator {
|
||||
return message;
|
||||
}
|
||||
|
||||
private String transliterate(char c) {
|
||||
final char lowerChar = Character.toLowerCase(c);
|
||||
private String transliterate(final char c) {
|
||||
final char sourceChar = convertToLowercase ? Character.toLowerCase(c) : c;
|
||||
|
||||
if (transliterateMap.containsKey(lowerChar)) {
|
||||
final String replace = transliterateMap.get(lowerChar);
|
||||
if (transliterateMap.containsKey(sourceChar)) {
|
||||
final String replace = transliterateMap.get(sourceChar);
|
||||
|
||||
if (lowerChar != c) {
|
||||
return WordUtils.capitalize(replace);
|
||||
if (sourceChar != c) {
|
||||
return convertToLowercase ? WordUtils.capitalize(replace) : replace;
|
||||
}
|
||||
|
||||
return replace;
|
||||
|
@ -0,0 +1,65 @@
|
||||
/* Copyright (C) 2024 José Rebelo
|
||||
|
||||
This file is part of Gadgetbridge.
|
||||
|
||||
Gadgetbridge is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published
|
||||
by the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Gadgetbridge is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
package nodomain.freeyourgadget.gadgetbridge.util.language.impl;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.language.SimpleTransliterator;
|
||||
|
||||
public class SerbianTransliterator extends SimpleTransliterator {
|
||||
public SerbianTransliterator() {
|
||||
super(new HashMap<Character, String>() {{
|
||||
// As per https://en.wikipedia.org/wiki/Serbian_Cyrillic_alphabet#Modern_alphabet
|
||||
put('А', "A"); put('а', "a");
|
||||
put('Б', "B"); put('б', "b");
|
||||
put('В', "V"); put('в', "v");
|
||||
put('Г', "G"); put('г', "g");
|
||||
put('Д', "D"); put('д', "d");
|
||||
put('Ђ', "Dj"); put('ђ', "dj"); // from Đ / đ - from suggestion in #3727
|
||||
put('Е', "E"); put('е', "e");
|
||||
put('Ж', "Z"); put('ж', "z"); // from Ž / ž
|
||||
put('З', "Z"); put('з', "z");
|
||||
put('И', "I"); put('и', "i");
|
||||
put('Ј', "J"); put('ј', "j");
|
||||
put('К', "K"); put('к', "k");
|
||||
put('Л', "L"); put('л', "l");
|
||||
put('Љ', "Lj"); put('љ', "lj");
|
||||
put('М', "M"); put('м', "m");
|
||||
put('Н', "N"); put('н', "n");
|
||||
put('Њ', "Nj"); put('њ', "nj");
|
||||
put('О', "O"); put('о', "o");
|
||||
put('П', "P"); put('п', "p");
|
||||
put('Р', "R"); put('р', "r");
|
||||
put('С', "S"); put('с', "s");
|
||||
put('Т', "T"); put('т', "t");
|
||||
put('Ћ', "C"); put('ћ', "c"); // from Ć / ć
|
||||
put('У', "U"); put('у', "u");
|
||||
put('Ф', "F"); put('ф', "f");
|
||||
put('Х', "H"); put('х', "h");
|
||||
put('Ц', "C"); put('ц', "c");
|
||||
put('Ч', "C"); put('ч', "c"); // from Č / č
|
||||
put('Џ', "Dz"); put('џ', "dz"); // from Dž / dž
|
||||
put('Ш', "S"); put('ш', "s"); // From Š / š
|
||||
|
||||
// Not in the table, pulled from Croatian
|
||||
put('Ć', "C"); put('ć', "c");
|
||||
put('Đ', "D"); put('đ', "d");
|
||||
put('Š', "S"); put('š', "s");
|
||||
put('Ž', "z"); put('ž', "z");
|
||||
}}, false);
|
||||
}
|
||||
}
|
@ -3492,6 +3492,7 @@
|
||||
<item>@string/polish</item>
|
||||
<item>@string/russian</item>
|
||||
<item>@string/scandinavian</item>
|
||||
<item>@string/serbian</item>
|
||||
<item>@string/turkish</item>
|
||||
<item>@string/ukranian</item>
|
||||
<item>@string/hungarian</item>
|
||||
@ -3519,6 +3520,7 @@
|
||||
<item>polish</item>
|
||||
<item>russian</item>
|
||||
<item>scandinavian</item>
|
||||
<item>serbian</item>
|
||||
<item>turkish</item>
|
||||
<item>ukranian</item>
|
||||
<item>hungarian</item>
|
||||
|
@ -1060,6 +1060,7 @@
|
||||
<string name="lithuanian">Lithuanian</string>
|
||||
<string name="persian">Persian</string>
|
||||
<string name="scandinavian">Scandinavian</string>
|
||||
<string name="serbian">Serbian</string>
|
||||
<string name="ukranian">Ukranian</string>
|
||||
<string name="armenian">Armenian</string>
|
||||
<string name="italian">Italian</string>
|
||||
|
@ -5,6 +5,8 @@ import android.content.SharedPreferences;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||
@ -44,6 +46,34 @@ public class LanguageUtilsTest extends TestBase {
|
||||
assertEquals("Transliteration failed", result, output);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStringTransliterateSerbian() throws Exception {
|
||||
final Transliterator transliterator = LanguageUtils.getTransliterator("serbian");
|
||||
|
||||
final Map<String, String> tests = new LinkedHashMap<String, String>() {{
|
||||
put("Тхе qицк брон фоx јумпед овер тхе лаз* дог", "The qick bron fox jumped over the laz* dog");
|
||||
put("Српска ћирилица", "Srpska cirilica");
|
||||
put("Novak Đoković", "Novak Dokovic");
|
||||
put("Џ, Њ and Љ", "Dz, Nj and Lj");
|
||||
put("Љуљачка", "Ljuljacka");
|
||||
put("Наковањ", "Nakovanj");
|
||||
put("Качкаваљ", "Kackavalj");
|
||||
put("Чачак", "Cacak");
|
||||
put("Ч, ч", "C, c");
|
||||
put("Ћ, ћ", "C, c");
|
||||
put("Ж, ж", "Z, z");
|
||||
put("Ш, ш", "S, s");
|
||||
put("Ђ, ђ", "D, d");
|
||||
put("Џ, џ", "Dz, dz");
|
||||
put("Њ, њ", "Nj, nj");
|
||||
put("Љ, љ", "Lj, lj");
|
||||
}};
|
||||
|
||||
for (final Map.Entry<String, String> e : tests.entrySet()) {
|
||||
assertEquals("Transliteration failed for " + e.getKey(), e.getValue(), transliterator.transliterate(e.getKey()));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStringTransliterateHebrew() throws Exception {
|
||||
final Transliterator transliterator = LanguageUtils.getTransliterator("hebrew");
|
||||
|
Loading…
Reference in New Issue
Block a user