mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-03 01:39:18 +02:00
interface language option
This commit is contained in:
parent
061c9d9b68
commit
4a2909b19f
69 changed files with 374 additions and 113 deletions
|
@ -1,6 +1,7 @@
|
|||
===== 1.7.4 (Mar ??, 2013) =====
|
||||
* Book/bookmark deserializer: SAX instead of our own XML parser
|
||||
* Georgian localization (by Bookland.ge)
|
||||
* Interface language option
|
||||
|
||||
===== 1.7.3 (Mar 04, 2013) =====
|
||||
* Library service does not work in background after program closing
|
||||
|
|
|
@ -12,5 +12,6 @@
|
|||
<p>უფრო მეტი ინფორმაციისთვის პროგრამა FBReader-ის შესახებ, ასევე, სხვადასხვა მოწყობილობებისთვის ვერსიების გადმოსაწერად ეწვიეთ<a l:href="http://www.fbreader.org/FBReaderJ">ჩვენ საიტს</a>.</p>
|
||||
<p>შეტყობინებეი ახალი ვერსიების და სხვა ინფორმაციების შესახებ ქვეყნდება <a l:href="http://twitter.com/fbreader_ru">twitter'ზე</a>.</p>
|
||||
<p>თუ გსურთ ავტორებთან დაკავშირება, <a l:href="mailto:contact@geometerplus.com">მოგვწერეთ</a> ელექტრონული წერილი.</p>
|
||||
<p>ქართული თარგმანის ავტორია კომპანია წიგნის სამყარო <a href="www.bookland.ge">www.bookland.ge</a>.</p>
|
||||
</body>
|
||||
</FictionBook>
|
||||
|
|
|
@ -288,6 +288,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Выгляд">
|
||||
<node name="summary" value="Налады экрану, паліцы стану, сьвятла кнопак"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Арыентацыя экрану">
|
||||
<node name="system" value="Сыстэмная"/>
|
||||
<node name="sensor" value="Адпаведна з арыентацыяй прылады"/>
|
||||
|
@ -322,8 +323,8 @@
|
|||
</node>
|
||||
<node name="dontTurnScreenOff" value="Не даваць экрану гаснуць">
|
||||
<node name="0" value="Заўсёды"/>
|
||||
<node name="25" value="Калі зарад батарэі большы за 25%"/>
|
||||
<node name="50" value="Калі зарад батарэі большы за 50%"/>
|
||||
<node name="25" value="Калі зарад батарэі большы за 25%%"/>
|
||||
<node name="50" value="Калі зарад батарэі большы за 50%%"/>
|
||||
<node name="100" value="Ніколі"/>
|
||||
</node>
|
||||
<node name="dontTurnScreenOffDuringCharging" value="Не даваць экрану гаснуць падчас зараджаньня">
|
||||
|
|
|
@ -287,6 +287,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Външен вид">
|
||||
<node name="summary" value="Екран за настройки, статус бар, светещи бутони"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Ориентация на екрана">
|
||||
<node name="system" value="системна"/>
|
||||
<node name="sensor" value="зависи от ориентацията на устройството"/>
|
||||
|
|
|
@ -286,6 +286,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Apariència">
|
||||
<node name="summary" value="Ajustes de pantalla, barra de estado, luz de botones" toBeTranslated="true"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Orientació de la pantalla">
|
||||
<node name="system" value="Sistema"/>
|
||||
<node name="sensor" value="Sensible a la orientación del dispositivo" toBeTranslated="true"/>
|
||||
|
|
|
@ -291,6 +291,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Vzhled">
|
||||
<node name="summary" value="Otáčení, stavový řádek"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Orientace obrazovky">
|
||||
<node name="system" value="Systém"/>
|
||||
<node name="sensor" value="Podle orientace zařízení"/>
|
||||
|
|
|
@ -276,6 +276,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Aussehen">
|
||||
<node name="summary" value="Ausrichtung, Statuszeile"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Bildschirm Ausrichtung">
|
||||
<node name="system" value="System"/>
|
||||
<node name="sensor" value="Sensor"/>
|
||||
|
|
|
@ -282,6 +282,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Appearance">
|
||||
<node name="summary" value="Display settings, status bar, button lights"/>
|
||||
<node name="language" value="Interface language"/>
|
||||
<node name="screenOrientation" value="Screen orientation">
|
||||
<node name="system" value="System"/>
|
||||
<node name="sensor" value="Device orientation sensitive"/>
|
||||
|
|
|
@ -286,6 +286,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Apariencia">
|
||||
<node name="summary" value="Ajustes de pantalla, barra de estado, luz de botones"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Orientación de la pantalla">
|
||||
<node name="system" value="Sistema"/>
|
||||
<node name="sensor" value="Sensible a la orientación del dispositivo"/>
|
||||
|
|
|
@ -275,6 +275,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Apparence">
|
||||
<node name="summary" value="Rotation, barre de statut"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Orientation de l'écran">
|
||||
<node name="system" value="Système"/>
|
||||
<node name="sensor" value="Détectée par les capteurs"/>
|
||||
|
|
|
@ -272,6 +272,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Aparencia">
|
||||
<node name="summary" value="Rotación, barra de estado"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Screen orientation" toBeTranslated="true">
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
<node name="sensor" value="Device orientation sensitive" toBeTranslated="true"/>
|
||||
|
|
|
@ -272,6 +272,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Megjelenés">
|
||||
<node name="summary" value="Elforgatás, állapotsor"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Kijelző iránya">
|
||||
<node name="system" value="Rendszerbeállítás"/>
|
||||
<node name="sensor" value="A készülék irányától függ"/>
|
||||
|
|
|
@ -273,6 +273,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Aspetto">
|
||||
<node name="summary" value="Rotazione, barra di stato"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Screen orientation" toBeTranslated="true">
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
<node name="sensor" value="Device orientation sensitive" toBeTranslated="true"/>
|
||||
|
|
|
@ -287,6 +287,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="გარეგნობა">
|
||||
<node name="summary" value="ეკრანი, სტატუს ბარი, ღილაკების განათება"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="ეკრანის ორიენტაცია">
|
||||
<node name="system" value="სისტემური"/>
|
||||
<node name="sensor" value="დამოკიდებულია მოწყობილობის ორიენტაციაზე"/>
|
||||
|
|
|
@ -282,6 +282,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Utseende">
|
||||
<node name="summary" value="Visningsinnstillinger, statuslinje, knappelys"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Visningsretning">
|
||||
<node name="system" value="System"/>
|
||||
<node name="sensor" value="Følger retningen til enhet"/>
|
||||
|
|
|
@ -282,6 +282,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Weergave">
|
||||
<node name="summary" value="Draaien, statusbalk"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Schermorientatie">
|
||||
<node name="system" value="Systeem"/>
|
||||
<node name="sensor" value="Afhankelijk van stand apparaat"/>
|
||||
|
|
|
@ -272,6 +272,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Wygląd">
|
||||
<node name="summary" value="Rotacja i pasek statusu"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Screen orientation" toBeTranslated="true">
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
<node name="sensor" value="Device orientation sensitive" toBeTranslated="true"/>
|
||||
|
|
|
@ -284,6 +284,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Aparência">
|
||||
<node name="summary" value="Definições do visor, barra de status, luzes das teclas"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Orientação da tela">
|
||||
<node name="system" value="Sistema"/>
|
||||
<node name="sensor" value="Orientação do dispositivo sensível"/>
|
||||
|
|
|
@ -272,6 +272,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Aspect">
|
||||
<node name="summary" value="Rotire, bara de stare"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Orientarea ecranului">
|
||||
<node name="system" value="Sistem"/>
|
||||
<node name="sensor" value="Device orientation sensitive" toBeTranslated="true"/>
|
||||
|
|
|
@ -287,6 +287,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Внешний вид">
|
||||
<node name="summary" value="Экран, строка состояния, подсветка кнопок"/>
|
||||
<node name="language" value="Язык интерфейса"/>
|
||||
<node name="screenOrientation" value="Ориентация экрана">
|
||||
<node name="system" value="системная"/>
|
||||
<node name="sensor" value="зависит от ориентации устройства"/>
|
||||
|
|
|
@ -282,6 +282,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Изглед">
|
||||
<node name="summary" value="Приказ подешавања, траке стања и осветљења дугмади."/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Усмерење екрана">
|
||||
<node name="system" value="Систем"/>
|
||||
<node name="sensor" value="Осетљивост на усмерење"/>
|
||||
|
|
|
@ -272,6 +272,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="ลักษณะการแสดงผล">
|
||||
<node name="summary" value="การหมุนหน้าจอ, แถบสถานะ"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Screen orientation" toBeTranslated="true">
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
<node name="sensor" value="Device orientation sensitive" toBeTranslated="true"/>
|
||||
|
|
|
@ -282,6 +282,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Görünüm">
|
||||
<node name="summary" value="Ekran ayarları, durum çubuğu, düğme ışıkları"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Ekran döndürme">
|
||||
<node name="system" value="Sistem"/>
|
||||
<node name="sensor" value="Cihaz dönüş hassasiyeti"/>
|
||||
|
|
|
@ -272,6 +272,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Зовнішній вигляд">
|
||||
<node name="summary" value="Орієнтація, панель стану"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Орієнтація екрану">
|
||||
<node name="system" value="Системна"/>
|
||||
<node name="sensor" value="Залежна від положення пристрою"/>
|
||||
|
|
|
@ -272,6 +272,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="Giao diện">
|
||||
<node name="summary" value="Xoay, thanh trạng thái"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Screen orientation" toBeTranslated="true">
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
<node name="sensor" value="Device orientation sensitive" toBeTranslated="true"/>
|
||||
|
|
|
@ -272,6 +272,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="呈现方式">
|
||||
<node name="summary" value="旋转,状态工具条"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="屏幕方向">
|
||||
<node name="system" value="系统"/>
|
||||
<node name="sensor" value="感知设备方向"/>
|
||||
|
|
|
@ -272,6 +272,7 @@
|
|||
</node>
|
||||
<node name="appearance" value="外觀">
|
||||
<node name="summary" value="旋轉, 狀態列"/>
|
||||
<node name="language" value="Interface language" toBeTranslated="true"/>
|
||||
<node name="screenOrientation" value="Screen orientation" toBeTranslated="true">
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
<node name="sensor" value="Device orientation sensitive" toBeTranslated="true"/>
|
||||
|
|
30
assets/resources/lang.xml
Normal file
30
assets/resources/lang.xml
Normal file
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources>
|
||||
<node name="language-self">
|
||||
<node name="be" value="Беларуская"/>
|
||||
<node name="bg" value="Български"/>
|
||||
<node name="ca" value="Català"/>
|
||||
<node name="cs" value="Česky"/>
|
||||
<node name="de" value="Deutsch"/>
|
||||
<node name="en" value="English"/>
|
||||
<node name="es" value="Español"/>
|
||||
<node name="fr" value="Français"/>
|
||||
<node name="gl" value="Galego"/>
|
||||
<node name="hu" value="Magyar"/>
|
||||
<node name="it" value="Italiano"/>
|
||||
<node name="ka" value="ქართული"/>
|
||||
<node name="nb" value="Norsk"/>
|
||||
<node name="nl" value="Nederlands"/>
|
||||
<node name="pl" value="Polski"/>
|
||||
<node name="pt" value="Português"/>
|
||||
<node name="ro" value="Romana"/>
|
||||
<node name="ru" value="Русский"/>
|
||||
<node name="sr" value="Српски"/>
|
||||
<node name="th" value="ไทย"/>
|
||||
<node name="tr" value="Türkçe"/>
|
||||
<node name="uk" value="Українська"/>
|
||||
<node name="vi" value="Tiếng Việt"/>
|
||||
<node name="zh" value="中文"/>
|
||||
<node name="zh_TW" value="Chinese (traditional)" toBeTranslated="true"/>
|
||||
</node>
|
||||
</resources>
|
|
@ -65,6 +65,7 @@
|
|||
<node name="zh" value="Кітайская мова"/>
|
||||
<node name="other" value="Іншая мова"/>
|
||||
<node name="multi" value="Некалькі моваў"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="уключана"/>
|
||||
|
|
|
@ -64,6 +64,7 @@
|
|||
<node name="zh" value="китайски"/>
|
||||
<node name="other" value="друг"/>
|
||||
<node name="multi" value="многоезичен"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="включи"/>
|
||||
|
|
|
@ -68,6 +68,7 @@
|
|||
<node name="zh" value="Chino" toBeTranslated="true"/>
|
||||
<node name="other" value="Otro" toBeTranslated="true"/>
|
||||
<node name="multi" value="Multilingüe" toBeTranslated="true"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="encès"/>
|
||||
|
|
|
@ -65,6 +65,7 @@
|
|||
<node name="zh" value="Čínsky"/>
|
||||
<node name="other" value="Jiný"/>
|
||||
<node name="multi" value="Vícejazyčná"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="zap"/>
|
||||
|
|
|
@ -67,6 +67,7 @@
|
|||
<node name="zh" value="Chinesisch"/>
|
||||
<node name="other" value="Andere"/>
|
||||
<node name="multi" value="Mehrsprachig"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="ein"/>
|
||||
|
|
|
@ -64,6 +64,7 @@
|
|||
<node name="zh" value="Chinese"/>
|
||||
<node name="other" value="Other"/>
|
||||
<node name="multi" value="Multilanguage"/>
|
||||
<node name="system" value="System"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="on"/>
|
||||
|
|
|
@ -69,6 +69,7 @@
|
|||
<node name="zh" value="Chino"/>
|
||||
<node name="other" value="Otro"/>
|
||||
<node name="multi" value="Multilingüe"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="encendido"/>
|
||||
|
|
|
@ -69,6 +69,7 @@
|
|||
<node name="zh" value="Chinois"/>
|
||||
<node name="other" value="Autre"/>
|
||||
<node name="multi" value="Multi-langage"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="activé"/>
|
||||
|
|
|
@ -64,6 +64,7 @@
|
|||
<node name="zh" value="Chinés"/>
|
||||
<node name="other" value="Outro"/>
|
||||
<node name="multi" value="Multiidioma"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="activado"/>
|
||||
|
|
|
@ -65,6 +65,7 @@
|
|||
<node name="zh" value="Kínai"/>
|
||||
<node name="other" value="Egyéb"/>
|
||||
<node name="multi" value="Többnyelvű"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="be"/>
|
||||
|
|
|
@ -65,6 +65,7 @@
|
|||
<node name="zh" value="Cinese"/>
|
||||
<node name="other" value="Altro"/>
|
||||
<node name="multi" value="Multilanguage" toBeTranslated="true"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="on"/>
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
<node name="hu" value="უნგრული"/>
|
||||
<node name="id" value="ინდონეზიური"/>
|
||||
<node name="it" value="იტალიური"/>
|
||||
<node name="ka" value="Georgian" toBeTranslated="true"/>
|
||||
<node name="ka" value="ქართული"/>
|
||||
<node name="lt" value="ლიტვური"/>
|
||||
<node name="nl" value="ჰოლანდიური"/>
|
||||
<node name="nb" value="ნორვეგიული"/>
|
||||
|
@ -64,6 +64,7 @@
|
|||
<node name="zh" value="ჩინური"/>
|
||||
<node name="other" value="სხვა"/>
|
||||
<node name="multi" value="მრავალენოვანი"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="ჩართვა"/>
|
||||
|
|
|
@ -64,6 +64,7 @@
|
|||
<node name="zh" value="Kinesisk"/>
|
||||
<node name="other" value="Annet"/>
|
||||
<node name="multi" value="Flerspråklig"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="på"/>
|
||||
|
|
|
@ -65,6 +65,7 @@
|
|||
<node name="zh" value="Chinees"/>
|
||||
<node name="other" value="Anders"/>
|
||||
<node name="multi" value="Meertalig"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="aan"/>
|
||||
|
|
|
@ -64,6 +64,7 @@
|
|||
<node name="zh" value="Chiński"/>
|
||||
<node name="other" value="Inny"/>
|
||||
<node name="multi" value="Wielojęzyczny"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="włączone"/>
|
||||
|
|
|
@ -64,6 +64,7 @@
|
|||
<node name="zh" value="Chinês"/>
|
||||
<node name="other" value="Outro"/>
|
||||
<node name="multi" value="Multi-idioma"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="ligado"/>
|
||||
|
|
|
@ -64,6 +64,7 @@
|
|||
<node name="zh" value="Chineza"/>
|
||||
<node name="other" value="Altele"/>
|
||||
<node name="multi" value="Multi limba"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="deschis"/>
|
||||
|
|
|
@ -64,6 +64,7 @@
|
|||
<node name="zh" value="китайский"/>
|
||||
<node name="other" value="другой"/>
|
||||
<node name="multi" value="многоязычный"/>
|
||||
<node name="system" value="системный"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="включить"/>
|
||||
|
|
|
@ -65,6 +65,7 @@
|
|||
<node name="zh" value="кинески"/>
|
||||
<node name="other" value="други"/>
|
||||
<node name="multi" value="вишејезични"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="укључено"/>
|
||||
|
|
|
@ -65,6 +65,7 @@
|
|||
<node name="zh" value="จีน"/>
|
||||
<node name="other" value="อื่นๆ"/>
|
||||
<node name="multi" value="หลายภาษา"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="เปิด"/>
|
||||
|
|
|
@ -58,12 +58,13 @@
|
|||
<node name="sv" value="Swedish" toBeTranslated="true"/>
|
||||
<node name="ta" value="Tamil" toBeTranslated="true"/>
|
||||
<node name="th" value="Thai" toBeTranslated="true"/>
|
||||
<node name="tr" value="Türkçe" toBeTranslated="true"/>
|
||||
<node name="tr" value="Türkçe"/>
|
||||
<node name="uk" value="Ukrainian" toBeTranslated="true"/>
|
||||
<node name="vi" value="Vietnamese" toBeTranslated="true"/>
|
||||
<node name="zh" value="Chinese" toBeTranslated="true"/>
|
||||
<node name="other" value="Diğer"/>
|
||||
<node name="multi" value="Çoklu dil"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="açık"/>
|
||||
|
|
|
@ -65,6 +65,7 @@
|
|||
<node name="zh" value="китайська"/>
|
||||
<node name="other" value="інша"/>
|
||||
<node name="multi" value="Мультимовна"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="увімкнути"/>
|
||||
|
|
|
@ -65,6 +65,7 @@
|
|||
<node name="zh" value="Tiếng Tàu"/>
|
||||
<node name="other" value="Khác"/>
|
||||
<node name="multi" value="Multilanguage" toBeTranslated="true"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="bật"/>
|
||||
|
|
|
@ -65,6 +65,7 @@
|
|||
<node name="zh" value="中文"/>
|
||||
<node name="other" value="其他"/>
|
||||
<node name="multi" value="多语言"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="开"/>
|
||||
|
|
|
@ -65,6 +65,7 @@
|
|||
<node name="zh" value="中文"/>
|
||||
<node name="other" value="其他"/>
|
||||
<node name="multi" value="多種語言"/>
|
||||
<node name="system" value="System" toBeTranslated="true"/>
|
||||
</node>
|
||||
<node name="boolean3">
|
||||
<node name="on" value="開"/>
|
||||
|
|
|
@ -8,6 +8,7 @@ fi
|
|||
|
||||
for file in ../../assets/resources/$part/*.xml; do
|
||||
xsltproc clean.xslt $file > `basename $file`;
|
||||
egrep "[^%]%[^%s01]" $file
|
||||
done
|
||||
for file in *.xml; do
|
||||
diff $file en.xml > `basename $file .xml`.diff;
|
||||
|
|
|
@ -529,6 +529,7 @@ public final class FBReader extends Activity {
|
|||
case REQUEST_PREFERENCES:
|
||||
case REQUEST_BOOK_INFO:
|
||||
if (resultCode != RESULT_DO_NOTHING) {
|
||||
invalidateOptionsMenu();
|
||||
final Book book = BookInfoActivity.bookByIntent(data);
|
||||
if (book != null) {
|
||||
getCollection().bindToService(this, new Runnable() {
|
||||
|
|
|
@ -39,6 +39,7 @@ import org.geometerplus.zlibrary.core.filesystem.ZLPhysicalFile;
|
|||
import org.geometerplus.zlibrary.core.image.ZLImage;
|
||||
import org.geometerplus.zlibrary.core.image.ZLLoadableImage;
|
||||
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
||||
import org.geometerplus.zlibrary.core.language.Language;
|
||||
import org.geometerplus.zlibrary.core.language.ZLLanguageUtil;
|
||||
|
||||
import org.geometerplus.zlibrary.ui.android.R;
|
||||
|
@ -261,9 +262,9 @@ public class BookInfoActivity extends Activity {
|
|||
setupInfoPair(R.id.book_tags, "tags", buffer, tagNames.size());
|
||||
String language = book.getLanguage();
|
||||
if (!ZLLanguageUtil.languageCodes().contains(language)) {
|
||||
language = ZLLanguageUtil.OTHER_LANGUAGE_CODE;
|
||||
language = Language.OTHER_CODE;
|
||||
}
|
||||
setupInfoPair(R.id.book_language, "language", ZLLanguageUtil.languageName(language));
|
||||
setupInfoPair(R.id.book_language, "language", new Language(language).Name);
|
||||
}
|
||||
|
||||
private void setupAnnotation(Book book) {
|
||||
|
|
|
@ -25,6 +25,7 @@ import android.app.Activity;
|
|||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
|
||||
import org.geometerplus.zlibrary.core.language.Language;
|
||||
import org.geometerplus.zlibrary.core.language.ZLLanguageUtil;
|
||||
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
||||
|
||||
|
@ -42,16 +43,20 @@ public class LanguageFilterAction extends RootAction {
|
|||
public void run(NetworkTree tree) {
|
||||
final NetworkLibrary library = NetworkLibrary.Instance();
|
||||
|
||||
final List<String> allLanguageCodes = library.languageCodes();
|
||||
Collections.sort(allLanguageCodes, new ZLLanguageUtil.CodeComparator());
|
||||
final List<Language> allLanguages = new ArrayList<Language>();
|
||||
for (String code : library.languageCodes()) {
|
||||
allLanguages.add(new Language(code));
|
||||
}
|
||||
Collections.sort(allLanguages);
|
||||
final Collection<String> activeLanguageCodes = library.activeLanguageCodes();
|
||||
final CharSequence[] languageNames = new CharSequence[allLanguageCodes.size()];
|
||||
final boolean[] checked = new boolean[allLanguageCodes.size()];
|
||||
final CharSequence[] languageNames = new CharSequence[allLanguages.size()];
|
||||
final boolean[] checked = new boolean[allLanguages.size()];
|
||||
|
||||
for (int i = 0; i < allLanguageCodes.size(); ++i) {
|
||||
final String code = allLanguageCodes.get(i);
|
||||
languageNames[i] = ZLLanguageUtil.languageName(code);
|
||||
checked[i] = activeLanguageCodes.contains(code);
|
||||
int index = 0;
|
||||
for (Language language : allLanguages) {
|
||||
languageNames[index] = language.Name;
|
||||
checked[index] = activeLanguageCodes.contains(language.Code);
|
||||
++index;
|
||||
}
|
||||
|
||||
final DialogInterface.OnMultiChoiceClickListener listener =
|
||||
|
@ -66,13 +71,17 @@ public class LanguageFilterAction extends RootAction {
|
|||
.setTitle(dialogResource.getResource("languageFilterDialog").getResource("title").getValue())
|
||||
.setPositiveButton(dialogResource.getResource("button").getResource("ok").getValue(), new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
final TreeSet<String> newActiveCodes = new TreeSet<String>(new ZLLanguageUtil.CodeComparator());
|
||||
final TreeSet<Language> newActiveLanguages = new TreeSet<Language>();
|
||||
for (int i = 0; i < checked.length; ++i) {
|
||||
if (checked[i]) {
|
||||
newActiveCodes.add(allLanguageCodes.get(i));
|
||||
newActiveLanguages.add(allLanguages.get(i));
|
||||
}
|
||||
}
|
||||
library.setActiveLanguageCodes(newActiveCodes);
|
||||
final List<String> codes = new ArrayList<String>(newActiveLanguages.size());
|
||||
for (Language language : newActiveLanguages) {
|
||||
codes.add(language.Code);
|
||||
}
|
||||
library.setActiveLanguageCodes(codes);
|
||||
library.synchronize();
|
||||
}
|
||||
})
|
||||
|
|
|
@ -26,6 +26,7 @@ import android.content.Intent;
|
|||
|
||||
import org.geometerplus.zlibrary.core.filesystem.ZLFile;
|
||||
import org.geometerplus.zlibrary.core.encodings.Encoding;
|
||||
import org.geometerplus.zlibrary.core.language.Language;
|
||||
import org.geometerplus.zlibrary.core.language.ZLLanguageUtil;
|
||||
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
||||
|
||||
|
@ -57,40 +58,35 @@ class BookTitlePreference extends ZLStringPreference {
|
|||
}
|
||||
}
|
||||
|
||||
class LanguagePreference extends ZLStringListPreference {
|
||||
class BookLanguagePreference extends LanguagePreference {
|
||||
private final Book myBook;
|
||||
|
||||
LanguagePreference(Context context, ZLResource rootResource, String resourceKey, Book book) {
|
||||
super(context, rootResource, resourceKey);
|
||||
myBook = book;
|
||||
final TreeSet<String> set = new TreeSet<String>(new ZLLanguageUtil.CodeComparator());
|
||||
set.addAll(ZLTextHyphenator.Instance().languageCodes());
|
||||
set.add(ZLLanguageUtil.OTHER_LANGUAGE_CODE);
|
||||
|
||||
final int size = set.size();
|
||||
String[] codes = new String[size];
|
||||
String[] names = new String[size];
|
||||
int index = 0;
|
||||
for (String code : set) {
|
||||
codes[index] = code;
|
||||
names[index] = ZLLanguageUtil.languageName(code);
|
||||
++index;
|
||||
private static List<Language> languages() {
|
||||
final TreeSet<Language> set = new TreeSet<Language>();
|
||||
for (String code : ZLTextHyphenator.Instance().languageCodes()) {
|
||||
set.add(new Language(code));
|
||||
}
|
||||
setLists(codes, names);
|
||||
set.add(new Language(Language.OTHER_CODE));
|
||||
return new ArrayList<Language>(set);
|
||||
}
|
||||
|
||||
BookLanguagePreference(Context context, ZLResource rootResource, String resourceKey, Book book) {
|
||||
super(context, rootResource, resourceKey, languages());
|
||||
myBook = book;
|
||||
final String language = myBook.getLanguage();
|
||||
if (language == null || !setInitialValue(language)) {
|
||||
setInitialValue(ZLLanguageUtil.OTHER_LANGUAGE_CODE);
|
||||
setInitialValue(Language.OTHER_CODE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDialogClosed(boolean result) {
|
||||
super.onDialogClosed(result);
|
||||
if (result) {
|
||||
final String value = getValue();
|
||||
myBook.setLanguage(value.length() > 0 ? value : null);
|
||||
((EditBookInfoActivity)getContext()).updateResult();
|
||||
}
|
||||
protected void init() {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setLanguage(String code) {
|
||||
myBook.setLanguage(code.length() > 0 ? code : null);
|
||||
((EditBookInfoActivity)getContext()).updateResult();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -186,7 +182,7 @@ public class EditBookInfoActivity extends ZLPreferenceActivity {
|
|||
myInitialized = true;
|
||||
|
||||
addPreference(new BookTitlePreference(EditBookInfoActivity.this, Resource, "title", myBook));
|
||||
addPreference(new LanguagePreference(EditBookInfoActivity.this, Resource, "language", myBook));
|
||||
addPreference(new BookLanguagePreference(EditBookInfoActivity.this, Resource, "language", myBook));
|
||||
addPreference(new EncodingPreference(EditBookInfoActivity.this, Resource, "encoding", myBook));
|
||||
}
|
||||
});
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2013 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
* 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package org.geometerplus.android.fbreader.preferences;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import org.geometerplus.zlibrary.core.language.Language;
|
||||
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
||||
|
||||
abstract class LanguagePreference extends ZLStringListPreference {
|
||||
LanguagePreference(
|
||||
Context context, ZLResource rootResource, String resourceKey, List<Language> languages
|
||||
) {
|
||||
super(context, rootResource, resourceKey);
|
||||
|
||||
final int size = languages.size();
|
||||
String[] codes = new String[size];
|
||||
String[] names = new String[size];
|
||||
int index = 0;
|
||||
for (Language l : languages) {
|
||||
codes[index] = l.Code;
|
||||
names[index] = l.Name;
|
||||
++index;
|
||||
}
|
||||
setLists(codes, names);
|
||||
init();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDialogClosed(boolean result) {
|
||||
super.onDialogClosed(result);
|
||||
if (result) {
|
||||
setLanguage(getValue());
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract void init();
|
||||
protected abstract void setLanguage(String code);
|
||||
}
|
|
@ -20,11 +20,13 @@
|
|||
package org.geometerplus.android.fbreader.preferences;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.view.KeyEvent;
|
||||
|
||||
import org.geometerplus.zlibrary.core.application.ZLKeyBindings;
|
||||
import org.geometerplus.zlibrary.core.options.ZLIntegerOption;
|
||||
import org.geometerplus.zlibrary.core.options.ZLIntegerRangeOption;
|
||||
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
||||
|
||||
import org.geometerplus.zlibrary.text.view.style.*;
|
||||
|
||||
|
@ -83,6 +85,24 @@ public class PreferenceActivity extends ZLPreferenceActivity {
|
|||
directoriesScreen.addOption(Paths.WallpapersDirectoryOption(), "wallpapers");
|
||||
|
||||
final Screen appearanceScreen = createPreferenceScreen("appearance");
|
||||
appearanceScreen.addPreference(new LanguagePreference(
|
||||
this, appearanceScreen.Resource, "language", ZLResource.languages()
|
||||
) {
|
||||
@Override
|
||||
protected void init() {
|
||||
setInitialValue(ZLResource.LanguageOption.getValue());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setLanguage(String code) {
|
||||
if (!code.equals(ZLResource.LanguageOption.getValue())) {
|
||||
ZLResource.LanguageOption.setValue(code);
|
||||
startActivity(new Intent(
|
||||
Intent.ACTION_VIEW, Uri.parse("fbreader-action:preferences#appearance")
|
||||
));
|
||||
}
|
||||
}
|
||||
});
|
||||
appearanceScreen.addPreference(new ZLStringChoicePreference(
|
||||
this, appearanceScreen.Resource, "screenOrientation",
|
||||
androidLibrary.OrientationOption, androidLibrary.allOrientations()
|
||||
|
|
|
@ -21,7 +21,7 @@ package org.geometerplus.fbreader.network;
|
|||
|
||||
import java.util.*;
|
||||
|
||||
import org.geometerplus.zlibrary.core.language.ZLLanguageUtil;
|
||||
import org.geometerplus.zlibrary.core.language.Language;
|
||||
import org.geometerplus.zlibrary.core.network.ZLNetworkRequest;
|
||||
|
||||
import org.geometerplus.fbreader.network.urlInfo.*;
|
||||
|
@ -141,7 +141,7 @@ public abstract class AbstractNetworkLink implements INetworkLink {
|
|||
}
|
||||
|
||||
private static int getLanguageOrder(String language) {
|
||||
if (ZLLanguageUtil.MULTI_LANGUAGE_CODE.equals(language)) {
|
||||
if (Language.MULTI_CODE.equals(language)) {
|
||||
return 1;
|
||||
}
|
||||
if (language.equals(Locale.getDefault().getLanguage())) {
|
||||
|
|
|
@ -26,8 +26,10 @@ import org.geometerplus.zlibrary.core.library.ZLibrary;
|
|||
import org.geometerplus.zlibrary.core.util.ZLNetworkUtil;
|
||||
import org.geometerplus.zlibrary.core.util.MimeType;
|
||||
import org.geometerplus.zlibrary.core.image.ZLImage;
|
||||
import org.geometerplus.zlibrary.core.options.ZLStringListOption;
|
||||
import org.geometerplus.zlibrary.core.options.ZLStringOption;
|
||||
import org.geometerplus.zlibrary.core.network.ZLNetworkException;
|
||||
import org.geometerplus.zlibrary.core.language.Language;
|
||||
import org.geometerplus.zlibrary.core.language.ZLLanguageUtil;
|
||||
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
||||
|
||||
|
@ -99,44 +101,42 @@ public class NetworkLibrary {
|
|||
return new ArrayList<String>(languageSet);
|
||||
}
|
||||
|
||||
private ZLStringOption myActiveLanguageCodesOption;
|
||||
private ZLStringOption activeLanguageCodesOption() {
|
||||
private ZLStringListOption myActiveLanguageCodesOption;
|
||||
private ZLStringListOption activeLanguageCodesOption() {
|
||||
if (myActiveLanguageCodesOption == null) {
|
||||
final TreeSet<String> defaultCodes = new TreeSet<String>(new ZLLanguageUtil.CodeComparator());
|
||||
defaultCodes.addAll(ZLibrary.Instance().defaultLanguageCodes());
|
||||
myActiveLanguageCodesOption =
|
||||
new ZLStringOption(
|
||||
new ZLStringListOption(
|
||||
"Options",
|
||||
"ActiveLanguages",
|
||||
commaSeparatedString(defaultCodes)
|
||||
ZLibrary.Instance().defaultLanguageCodes(),
|
||||
","
|
||||
);
|
||||
}
|
||||
return myActiveLanguageCodesOption;
|
||||
}
|
||||
|
||||
public Collection<String> activeLanguageCodes() {
|
||||
return Arrays.asList(activeLanguageCodesOption().getValue().split(","));
|
||||
public List<String> activeLanguageCodes() {
|
||||
return activeLanguageCodesOption().getValue();
|
||||
}
|
||||
|
||||
public void setActiveLanguageCodes(Collection<String> codes) {
|
||||
final TreeSet<String> allCodes = new TreeSet<String>(new ZLLanguageUtil.CodeComparator());
|
||||
final TreeSet<String> allCodes = new TreeSet<String>();
|
||||
allCodes.addAll(ZLibrary.Instance().defaultLanguageCodes());
|
||||
allCodes.removeAll(languageCodes());
|
||||
allCodes.addAll(codes);
|
||||
activeLanguageCodesOption().setValue(commaSeparatedString(allCodes));
|
||||
invalidateChildren();
|
||||
}
|
||||
|
||||
private String commaSeparatedString(Collection<String> codes) {
|
||||
final StringBuilder builder = new StringBuilder();
|
||||
for (String code : codes) {
|
||||
builder.append(code);
|
||||
builder.append(",");
|
||||
// sort codes
|
||||
final TreeSet<Language> languages = new TreeSet<Language>();
|
||||
for (String code : allCodes) {
|
||||
languages.add(new Language(code));
|
||||
}
|
||||
if (builder.length() > 0) {
|
||||
builder.delete(builder.length() - 1, builder.length());
|
||||
final ArrayList<String> codesList = new ArrayList<String>(languages.size());
|
||||
for (Language l : languages) {
|
||||
codesList.add(l.Code);
|
||||
}
|
||||
return builder.toString();
|
||||
|
||||
activeLanguageCodesOption().setValue(codesList);
|
||||
invalidateChildren();
|
||||
}
|
||||
|
||||
List<INetworkLink> activeLinks() {
|
||||
|
|
77
src/org/geometerplus/zlibrary/core/language/Language.java
Normal file
77
src/org/geometerplus/zlibrary/core/language/Language.java
Normal file
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
* Copyright (C) 2009-2013 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
* 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package org.geometerplus.zlibrary.core.language;
|
||||
|
||||
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
||||
|
||||
public class Language implements Comparable<Language> {
|
||||
public static final String OTHER_CODE = "other";
|
||||
public static final String MULTI_CODE = "multi";
|
||||
public static final String SYSTEM_CODE = "system";
|
||||
|
||||
private static enum Order {
|
||||
Before,
|
||||
Normal,
|
||||
After
|
||||
}
|
||||
|
||||
public final String Code;
|
||||
public final String Name;
|
||||
private final String mySortKey;
|
||||
private final Order myOrder;
|
||||
|
||||
public Language(String code) {
|
||||
this(code, ZLResource.resource("language").getResource(code).getValue());
|
||||
}
|
||||
|
||||
public Language(String code, String name) {
|
||||
Code = code;
|
||||
Name = name;
|
||||
mySortKey = name;
|
||||
if (SYSTEM_CODE.equals(code)) {
|
||||
myOrder = Order.Before;
|
||||
} else if (MULTI_CODE.equals(code) || OTHER_CODE.equals(code)) {
|
||||
myOrder = Order.After;
|
||||
} else {
|
||||
myOrder = Order.Normal;
|
||||
}
|
||||
}
|
||||
|
||||
public int compareTo(Language other) {
|
||||
final int diff = myOrder.compareTo(other.myOrder);
|
||||
return diff != 0 ? diff : mySortKey.compareTo(other.mySortKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object lang) {
|
||||
if (this == lang) {
|
||||
return true;
|
||||
}
|
||||
if (!(lang instanceof Language)) {
|
||||
return false;
|
||||
}
|
||||
return Code.equals(((Language)lang).Code);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Code.hashCode();
|
||||
}
|
||||
}
|
|
@ -25,41 +25,11 @@ import org.geometerplus.zlibrary.core.filesystem.*;
|
|||
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
||||
|
||||
public abstract class ZLLanguageUtil {
|
||||
public static final String OTHER_LANGUAGE_CODE = "other";
|
||||
public static final String MULTI_LANGUAGE_CODE = "multi";
|
||||
|
||||
private static ArrayList<String> ourLanguageCodes = new ArrayList<String>();
|
||||
|
||||
private ZLLanguageUtil() {
|
||||
}
|
||||
|
||||
public static class CodeComparator implements Comparator<String> {
|
||||
public int compare(String code0, String code1) {
|
||||
if (code0 == null) {
|
||||
return code1 == null ? 0 : -1;
|
||||
}
|
||||
if (code1 == null) {
|
||||
return 1;
|
||||
}
|
||||
if (code0.equals(code1)) {
|
||||
return 0;
|
||||
}
|
||||
if (MULTI_LANGUAGE_CODE.equals(code0)) {
|
||||
return 1;
|
||||
}
|
||||
if (MULTI_LANGUAGE_CODE.equals(code1)) {
|
||||
return -1;
|
||||
}
|
||||
if (OTHER_LANGUAGE_CODE.equals(code0)) {
|
||||
return 1;
|
||||
}
|
||||
if (OTHER_LANGUAGE_CODE.equals(code1)) {
|
||||
return -1;
|
||||
}
|
||||
return languageName(code0).compareTo(languageName(code1));
|
||||
}
|
||||
}
|
||||
|
||||
public static String defaultLanguageCode() {
|
||||
return Locale.getDefault().getLanguage();
|
||||
}
|
||||
|
@ -86,10 +56,6 @@ public abstract class ZLLanguageUtil {
|
|||
return Collections.unmodifiableList(ourLanguageCodes);
|
||||
}
|
||||
|
||||
public static String languageName(String code) {
|
||||
return ZLResource.resource("language").getResource(code).getValue();
|
||||
}
|
||||
|
||||
public static ZLFile patternsFile() {
|
||||
return ZLResourceFile.createResourceFile("languagePatterns");
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
package org.geometerplus.zlibrary.core.library;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.geometerplus.zlibrary.core.filesystem.ZLResourceFile;
|
||||
import org.geometerplus.zlibrary.core.options.ZLStringOption;
|
||||
|
@ -55,7 +55,7 @@ public abstract class ZLibrary {
|
|||
abstract public int getDisplayDPI();
|
||||
abstract public int getPixelWidth();
|
||||
abstract public int getPixelHeight();
|
||||
abstract public Collection<String> defaultLanguageCodes();
|
||||
abstract public List<String> defaultLanguageCodes();
|
||||
|
||||
abstract public boolean supportsAllOrientations();
|
||||
public String[] allOrientations() {
|
||||
|
|
|
@ -19,9 +19,37 @@
|
|||
|
||||
package org.geometerplus.zlibrary.core.resources;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import org.geometerplus.zlibrary.core.filesystem.ZLFile;
|
||||
import org.geometerplus.zlibrary.core.filesystem.ZLResourceFile;
|
||||
import org.geometerplus.zlibrary.core.language.Language;
|
||||
import org.geometerplus.zlibrary.core.options.ZLStringOption;
|
||||
|
||||
abstract public class ZLResource {
|
||||
public final String Name;
|
||||
|
||||
public static final ZLStringOption LanguageOption =
|
||||
new ZLStringOption("LookNFeel", "Language", Language.SYSTEM_CODE);
|
||||
|
||||
private static final List<Language> ourLanguages = new LinkedList<Language>();
|
||||
public static List<Language> languages() {
|
||||
if (ourLanguages.isEmpty()) {
|
||||
final ZLResource resource = ZLResource.resource("language-self");
|
||||
final ZLFile dir = ZLResourceFile.createResourceFile("resources/application");
|
||||
for (ZLFile file : dir.children()) {
|
||||
final String name = file.getShortName();
|
||||
if (name.endsWith(".xml")) {
|
||||
final String code = name.substring(0, name.length() - 4);
|
||||
ourLanguages.add(new Language(code, resource.getResource(code).getValue()));
|
||||
}
|
||||
}
|
||||
ourLanguages.add(new Language(Language.SYSTEM_CODE));
|
||||
Collections.sort(ourLanguages);
|
||||
}
|
||||
return Collections.unmodifiableList(ourLanguages);
|
||||
}
|
||||
|
||||
public static ZLResource resource(String key) {
|
||||
ZLTreeResource.buildTree();
|
||||
if (ZLTreeResource.ourRoot == null) {
|
||||
|
|
|
@ -21,9 +21,10 @@ package org.geometerplus.zlibrary.core.resources;
|
|||
|
||||
import java.util.*;
|
||||
|
||||
import org.geometerplus.zlibrary.core.filesystem.*;
|
||||
import org.geometerplus.zlibrary.core.language.Language;
|
||||
import org.geometerplus.zlibrary.core.xml.ZLStringMap;
|
||||
import org.geometerplus.zlibrary.core.xml.ZLXMLReaderAdapter;
|
||||
import org.geometerplus.zlibrary.core.filesystem.*;
|
||||
|
||||
final class ZLTreeResource extends ZLResource {
|
||||
private static interface Condition {
|
||||
|
@ -132,20 +133,39 @@ final class ZLTreeResource extends ZLResource {
|
|||
}
|
||||
}
|
||||
|
||||
private static void setInterfaceLanguage() {
|
||||
final String custom = LanguageOption.getValue();
|
||||
final String language;
|
||||
final String country;
|
||||
if (Language.SYSTEM_CODE.equals(custom)) {
|
||||
final Locale locale = Locale.getDefault();
|
||||
language = locale.getLanguage();
|
||||
country = locale.getCountry();
|
||||
} else {
|
||||
final int index = custom.indexOf('_');
|
||||
if (index == -1) {
|
||||
language = custom;
|
||||
country = null;
|
||||
} else {
|
||||
language = custom.substring(0, index);
|
||||
country = custom.substring(index + 1);
|
||||
}
|
||||
}
|
||||
if ((language != null && !language.equals(ourLanguage)) ||
|
||||
(country != null && !country.equals(ourCountry))) {
|
||||
ourLanguage = language;
|
||||
ourCountry = country;
|
||||
loadData();
|
||||
}
|
||||
}
|
||||
|
||||
private static void updateLanguage() {
|
||||
final long timeStamp = System.currentTimeMillis();
|
||||
if (timeStamp > ourTimeStamp + 1000) {
|
||||
synchronized (ourLock) {
|
||||
if (timeStamp > ourTimeStamp + 1000) {
|
||||
ourTimeStamp = timeStamp;
|
||||
final String language = Locale.getDefault().getLanguage();
|
||||
final String country = Locale.getDefault().getCountry();
|
||||
if ((language != null && !language.equals(ourLanguage)) ||
|
||||
(country != null && !country.equals(ourCountry))) {
|
||||
ourLanguage = language;
|
||||
ourCountry = country;
|
||||
loadData();
|
||||
}
|
||||
setInterfaceLanguage();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -154,6 +174,7 @@ final class ZLTreeResource extends ZLResource {
|
|||
private static void loadData(ResourceTreeReader reader, String fileName) {
|
||||
reader.readDocument(ourRoot, ZLResourceFile.createResourceFile("resources/zlibrary/" + fileName));
|
||||
reader.readDocument(ourRoot, ZLResourceFile.createResourceFile("resources/application/" + fileName));
|
||||
reader.readDocument(ourRoot, ZLResourceFile.createResourceFile("resources/lang.xml"));
|
||||
}
|
||||
|
||||
private static void loadData() {
|
||||
|
|
|
@ -21,6 +21,7 @@ package org.geometerplus.zlibrary.text.hyphenation;
|
|||
|
||||
import java.util.*;
|
||||
|
||||
import org.geometerplus.zlibrary.core.language.Language;
|
||||
import org.geometerplus.zlibrary.core.language.ZLLanguageUtil;
|
||||
import org.geometerplus.zlibrary.core.filesystem.ZLFile;
|
||||
import org.geometerplus.zlibrary.core.filesystem.ZLResourceFile;
|
||||
|
@ -54,7 +55,7 @@ final class ZLTextTeXHyphenator extends ZLTextHyphenator {
|
|||
}
|
||||
|
||||
public void load(String language) {
|
||||
if (language == null || ZLLanguageUtil.OTHER_LANGUAGE_CODE.equals(language)) {
|
||||
if (language == null || Language.OTHER_CODE.equals(language)) {
|
||||
language = ZLLanguageUtil.defaultLanguageCode();
|
||||
}
|
||||
if (language == null || language.equals(myLanguage)) {
|
||||
|
|
|
@ -188,7 +188,7 @@ public final class ZLAndroidLibrary extends ZLibrary {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> defaultLanguageCodes() {
|
||||
public List<String> defaultLanguageCodes() {
|
||||
final TreeSet<String> set = new TreeSet<String>();
|
||||
set.add(Locale.getDefault().getLanguage());
|
||||
final TelephonyManager manager = (TelephonyManager)myApplication.getSystemService(Context.TELEPHONY_SERVICE);
|
||||
|
@ -211,7 +211,7 @@ public final class ZLAndroidLibrary extends ZLibrary {
|
|||
}
|
||||
}
|
||||
set.add("multi");
|
||||
return set;
|
||||
return new ArrayList<String>(set);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue