From fdcf02bba76f18acdb48227767202092eee1875e Mon Sep 17 00:00:00 2001 From: Mariotaku Lee Date: Thu, 23 Mar 2017 10:41:04 +0800 Subject: [PATCH] added languages selector --- .../ktextension/ConfigurationExtensions.kt | 42 +++++ .../twidere/app/TwidereApplication.kt | 153 ++++++++++-------- .../twidere/constant/PreferenceKeys.kt | 16 ++ .../preference/LanguageSelectorPreference.kt | 36 +++++ .../main/res-localized/values-ast/strings.xml | 33 +++- .../main/res-localized/values-in/strings.xml | 75 ++++----- .../src/main/res/values/arrays_languages.xml | 116 +++++++++++++ twidere/src/main/res/values/strings.xml | 1 + .../src/main/res/xml/preferences_other.xml | 10 ++ 9 files changed, 364 insertions(+), 118 deletions(-) create mode 100644 twidere/src/main/kotlin/org/mariotaku/ktextension/ConfigurationExtensions.kt create mode 100644 twidere/src/main/kotlin/org/mariotaku/twidere/preference/LanguageSelectorPreference.kt create mode 100644 twidere/src/main/res/values/arrays_languages.xml diff --git a/twidere/src/main/kotlin/org/mariotaku/ktextension/ConfigurationExtensions.kt b/twidere/src/main/kotlin/org/mariotaku/ktextension/ConfigurationExtensions.kt new file mode 100644 index 000000000..85454e8a1 --- /dev/null +++ b/twidere/src/main/kotlin/org/mariotaku/ktextension/ConfigurationExtensions.kt @@ -0,0 +1,42 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2017 Mariotaku Lee + * + * 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 3 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, see . + */ + +package org.mariotaku.ktextension + +import android.annotation.TargetApi +import android.content.res.Configuration +import android.os.Build +import java.util.* + +/** + * Created by mariotaku on 2017/3/23. + */ + +fun Configuration.setLayoutDirectionCompat(locale: Locale?) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) return + ConfigurationExtensionsApi18.setLayoutDirectionCompat(this, locale) +} + +@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) +private object ConfigurationExtensionsApi18 { + + fun setLayoutDirectionCompat(configuration: Configuration, locale: Locale?) { + configuration.setLayoutDirection(locale) + } +} \ No newline at end of file diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/app/TwidereApplication.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/app/TwidereApplication.kt index 1cf5f82fa..b3beb6c03 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/app/TwidereApplication.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/app/TwidereApplication.kt @@ -23,6 +23,7 @@ import android.app.Application import android.content.* import android.content.SharedPreferences.OnSharedPreferenceChangeListener import android.content.pm.PackageManager +import android.content.res.Configuration import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteOpenHelper import android.os.AsyncTask @@ -36,6 +37,7 @@ import org.apache.commons.lang3.ArrayUtils import org.mariotaku.kpreferences.KPreferences import org.mariotaku.kpreferences.get import org.mariotaku.kpreferences.set +import org.mariotaku.ktextension.setLayoutDirectionCompat import org.mariotaku.mediaviewer.library.MediaDownloader import org.mariotaku.restfu.http.RestHttpClient import org.mariotaku.twidere.BuildConfig @@ -90,12 +92,6 @@ class TwidereApplication : Application(), Constants, OnSharedPreferenceChangeLis @Inject lateinit internal var thumbor: ThumborWrapper - override fun attachBaseContext(base: Context) { - super.attachBaseContext(base) - MultiDex.install(this) - } - - val sqLiteDatabase: SQLiteDatabase by lazy { StrictModeUtils.checkDiskIO() sqLiteOpenHelper.writableDatabase @@ -105,12 +101,24 @@ class TwidereApplication : Application(), Constants, OnSharedPreferenceChangeLis TwidereSQLiteOpenHelper(this, Constants.DATABASES_NAME, Constants.DATABASES_VERSION) } + private val sharedPreferences: SharedPreferences by lazy { + val prefs = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE) + prefs.registerOnSharedPreferenceChangeListener(this) + return@lazy prefs + } + + override fun attachBaseContext(base: Context) { + super.attachBaseContext(base) + MultiDex.install(this) + } + override fun onCreate() { instance = this if (BuildConfig.DEBUG) { StrictModeUtils.detectAllVmPolicy() } super.onCreate() + applyLanguageSettings() startKovenant() initializeAsyncTask() initDebugMode() @@ -134,6 +142,77 @@ class TwidereApplication : Application(), Constants, OnSharedPreferenceChangeLis Analyzer.preferencesChanged(sharedPreferences) } + override fun onConfigurationChanged(newConfig: Configuration?) { + applyLanguageSettings() + super.onConfigurationChanged(newConfig) + } + + override fun onTrimMemory(level: Int) { + Glide.with(this).onTrimMemory(level) + super.onTrimMemory(level) + } + + override fun onLowMemory() { + Glide.with(this).onLowMemory() + super.onLowMemory() + } + + override fun onSharedPreferenceChanged(preferences: SharedPreferences, key: String) { + when (key) { + KEY_REFRESH_INTERVAL -> { + autoRefreshController.rescheduleAll() + } + KEY_ENABLE_PROXY, KEY_PROXY_HOST, KEY_PROXY_PORT, KEY_PROXY_TYPE, KEY_PROXY_USERNAME, + KEY_PROXY_PASSWORD, KEY_CONNECTION_TIMEOUT, KEY_RETRY_ON_NETWORK_ISSUE -> { + HttpClientFactory.reloadConnectivitySettings(this) + } + KEY_DNS_SERVER, KEY_TCP_DNS_QUERY, KEY_BUILTIN_DNS_RESOLVER -> { + reloadDnsSettings() + } + KEY_CONSUMER_KEY, KEY_CONSUMER_SECRET, KEY_API_URL_FORMAT, KEY_CREDENTIALS_TYPE, + KEY_SAME_OAUTH_SIGNING_URL, KEY_THUMBOR_ENABLED, KEY_THUMBOR_ADDRESS, KEY_THUMBOR_SECURITY_KEY -> { + preferences[apiLastChangeKey] = System.currentTimeMillis() + } + KEY_EMOJI_SUPPORT -> { + externalThemeManager.reloadEmojiPreferences() + } + KEY_THUMBOR_ADDRESS, KEY_THUMBOR_ENABLED, KEY_THUMBOR_SECURITY_KEY -> { + thumbor.reloadSettings(preferences) + } + KEY_MEDIA_PRELOAD, KEY_PRELOAD_WIFI_ONLY -> { + mediaPreloader.reloadOptions(preferences) + } + KEY_NAME_FIRST, KEY_I_WANT_MY_STARS_BACK -> { + contentNotificationManager.updatePreferences() + } + streamingEnabledKey.key, streamingPowerSavingKey.key, + streamingNonMeteredNetworkKey.key -> { + val streamingIntent = Intent(this, StreamingService::class.java) + if (activityTracker.isHomeActivityLaunched) { + startService(streamingIntent) + } else { + stopService(streamingIntent) + } + } + } + Analyzer.preferencesChanged(preferences) + } + + override fun onTerminate() { + super.onTerminate() + stopKovenant() + } + + @Suppress("DEPRECATION") + private fun applyLanguageSettings() { + val locale = sharedPreferences[overrideLanguageKey] ?: return + Locale.setDefault(locale) + val config = resources.configuration + config.locale = locale + config.setLayoutDirectionCompat(locale) + resources.updateConfiguration(config, resources.displayMetrics) + } + private fun loadDefaultFeatures() { val lastUpdated = kPreferences[defaultFeatureLastUpdated] if (lastUpdated > 0 && TimeUnit.MILLISECONDS.toHours(System.currentTimeMillis() - lastUpdated) < 12) { @@ -215,68 +294,6 @@ class TwidereApplication : Application(), Constants, OnSharedPreferenceChangeLis } } - private val sharedPreferences: SharedPreferences by lazy { - val prefs = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE) - prefs.registerOnSharedPreferenceChangeListener(this) - return@lazy prefs - } - - override fun onTrimMemory(level: Int) { - Glide.with(this).onTrimMemory(level) - super.onTrimMemory(level) - } - - override fun onLowMemory() { - Glide.with(this).onLowMemory() - super.onLowMemory() - } - - override fun onSharedPreferenceChanged(preferences: SharedPreferences, key: String) { - when (key) { - KEY_REFRESH_INTERVAL -> { - autoRefreshController.rescheduleAll() - } - KEY_ENABLE_PROXY, KEY_PROXY_HOST, KEY_PROXY_PORT, KEY_PROXY_TYPE, KEY_PROXY_USERNAME, - KEY_PROXY_PASSWORD, KEY_CONNECTION_TIMEOUT, KEY_RETRY_ON_NETWORK_ISSUE -> { - HttpClientFactory.reloadConnectivitySettings(this) - } - KEY_DNS_SERVER, KEY_TCP_DNS_QUERY, KEY_BUILTIN_DNS_RESOLVER -> { - reloadDnsSettings() - } - KEY_CONSUMER_KEY, KEY_CONSUMER_SECRET, KEY_API_URL_FORMAT, KEY_CREDENTIALS_TYPE, - KEY_SAME_OAUTH_SIGNING_URL, KEY_THUMBOR_ENABLED, KEY_THUMBOR_ADDRESS, KEY_THUMBOR_SECURITY_KEY -> { - preferences[apiLastChangeKey] = System.currentTimeMillis() - } - KEY_EMOJI_SUPPORT -> { - externalThemeManager.reloadEmojiPreferences() - } - KEY_THUMBOR_ADDRESS, KEY_THUMBOR_ENABLED, KEY_THUMBOR_SECURITY_KEY -> { - thumbor.reloadSettings(preferences) - } - KEY_MEDIA_PRELOAD, KEY_PRELOAD_WIFI_ONLY -> { - mediaPreloader.reloadOptions(preferences) - } - KEY_NAME_FIRST, KEY_I_WANT_MY_STARS_BACK -> { - contentNotificationManager.updatePreferences() - } - streamingEnabledKey.key, streamingPowerSavingKey.key, - streamingNonMeteredNetworkKey.key -> { - val streamingIntent = Intent(this, StreamingService::class.java) - if (activityTracker.isHomeActivityLaunched) { - startService(streamingIntent) - } else { - stopService(streamingIntent) - } - } - } - Analyzer.preferencesChanged(preferences) - } - - override fun onTerminate() { - super.onTerminate() - stopKovenant() - } - private fun reloadDnsSettings() { (dns as? TwidereDns)?.reloadDnsSettings() } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/constant/PreferenceKeys.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/constant/PreferenceKeys.kt index 1e8559c28..6529b7cd0 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/constant/PreferenceKeys.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/constant/PreferenceKeys.kt @@ -3,7 +3,9 @@ package org.mariotaku.twidere.constant import android.content.SharedPreferences import android.os.Build import android.text.TextUtils +import org.apache.commons.lang3.LocaleUtils import org.mariotaku.kpreferences.* +import org.mariotaku.ktextension.bcp47Tag import org.mariotaku.ktextension.toLong import org.mariotaku.twidere.BuildConfig import org.mariotaku.twidere.Constants.* @@ -18,6 +20,7 @@ import org.mariotaku.twidere.model.account.cred.Credentials import org.mariotaku.twidere.model.sync.SyncProviderInfo import org.mariotaku.twidere.preference.ThemeBackgroundPreference import org.mariotaku.twidere.util.sync.SyncProviderInfoFactory +import java.util.* /** * Created by mariotaku on 16/8/25. @@ -72,6 +75,19 @@ val streamingEnabledKey = KBooleanKey("streaming_enabled", false) val streamingNonMeteredNetworkKey = KBooleanKey("streaming_non_metered_network", true) val streamingPowerSavingKey = KBooleanKey("streaming_power_saving", true) +object overrideLanguageKey : KSimpleKey("override_language", null) { + override fun read(preferences: SharedPreferences): Locale? { + return preferences.getString(key, null)?.takeIf(String::isNotEmpty)?.replace('-', '_') + ?.let(LocaleUtils::toLocale) + } + + override fun write(editor: SharedPreferences.Editor, value: Locale?): Boolean { + editor.putString(key, value?.bcp47Tag) + return true + } + +} + val themeBackgroundOptionKey = KStringKey(KEY_THEME_BACKGROUND, VALUE_THEME_BACKGROUND_DEFAULT) object themeBackgroundAlphaKey : KSimpleKey(KEY_THEME_BACKGROUND_ALPHA, 0xFF) { diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/preference/LanguageSelectorPreference.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/preference/LanguageSelectorPreference.kt new file mode 100644 index 000000000..7072ac152 --- /dev/null +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/preference/LanguageSelectorPreference.kt @@ -0,0 +1,36 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2017 Mariotaku Lee + * + * 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 3 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, see . + */ + +package org.mariotaku.twidere.preference + +import android.content.Context +import android.util.AttributeSet + + +/** + * Created by mariotaku on 2017/3/22. + */ + +class LanguageSelectorPreference(context: Context, attrs: AttributeSet? = null) : ThemedListPreference(context, attrs) { + init { + val locales = context.assets.locales + entries = locales + entryValues = locales + } +} diff --git a/twidere/src/main/res-localized/values-ast/strings.xml b/twidere/src/main/res-localized/values-ast/strings.xml index 858c4b40f..f8b982e22 100644 --- a/twidere/src/main/res-localized/values-ast/strings.xml +++ b/twidere/src/main/res-localized/values-ast/strings.xml @@ -27,6 +27,7 @@ Encaboxar retuit encaboxando préstame + Centrar Llimpiar Componer Convertir a tuit @@ -46,6 +47,7 @@ Editar iconu Editar nome Editar regla + Favoritu marcando como favoritu Importar d\'usuarios bloquiaos Importar d\'usuarios silenciaos @@ -63,7 +65,9 @@ Más sero Dexar conversación + Préstame prestando + Marcóse como lleíu modificando llistaos Silenciar Silenciar avisos @@ -75,6 +79,7 @@ Mercar carauterístiques Citar Grabar videu + Refrescar refrescando mensaxes direutos refrescando llinia temporal d\'aniciu refrescando menciones @@ -139,8 +144,11 @@ anovando imaxe de testera del perfil anovando imaxe de perfil unviando\'l tuit + Mapa Cuentes activaes Actividaes tocante a min + %s marcó como favoritu + %1$s y %2$s marcaron como favoritu %s marcó como favortiu un tuit nel que se t\'etiquetó %1$s y %2$s marcaron como favoritu un tuit nel que se t\'etiquetó %s marcó como favortiu un tuit nel que se te mentó @@ -183,6 +191,7 @@ Twidere reaniciaráse p\'aplicar los axustes. Twidere colará p\'aplicar los axustes. Aspeutu + Básica OAuth Mou twip O xAuth @@ -366,6 +375,7 @@ Nome de conversación Nun hai soscripciones Ensin conteníu + Guetar usuarios Ensin cuentes Conseyos Refrescu na llinia temporal d\'aniciu @@ -398,6 +408,8 @@ Serviciu d\'operación de fondu Fornidor de base de datos Twidere Soscripción + El to allugamientu aproximáu + Mediu Tuit orixinal Aniciu de sesión per contraseña Semeya @@ -454,6 +466,7 @@ Datos d\'API toyíos. [DOMINIU]: Dominiu d\'API Twitter.\nExemplu: https://[DOMINIU].twitter.com/ trocaráse por https://api.twitter.com/. ¿Habilitar l\'auto-refrescu pa consiguir tuits nuevos? + Bloquióse a %s. Creóse la conversación. ¿Dexar esta conversación? Desanicióse\'l mensaxe direutu. @@ -478,6 +491,7 @@ Convertilu a un tuit normal amiesta una caráuter estra. Coneuta Twidere col almacenamientu de rede pa sincronizar datos Agora Twidere ta sincronizáu con %s ¿Desconeutate de %s? + Sincronización cabera: %s Ríquese\'l campu «%s» - Ameyores non mercaes + Nun se mercaron les ameyores Primi «+» pa importar Copióse l\'enllaz al cartafueyu Equí hai un regalu pequeñu pa ti, alcuéntralu nos axustes del sistema :) @@ -505,6 +519,7 @@ Convertilu a un tuit normal amiesta una caráuter estra. Nun s\'esbillaron usuarios El fluxu de tuits namái ta disponible cuando ta activáu pero nun ye 100% fiable. Volvi primir pa zarrar + Anovóse la imaxe de la pancarta del perfil Encaboxóse\'l retuit Precísase\'l permisu d\'almacenamientu pa guardar medios Guardóse na galería @@ -525,6 +540,8 @@ Convertilu a un tuit normal amiesta una caráuter estra. Nun puen cargase tuits anteriores Desanicióse de Peñeres Amestóse a peñeres + Axustes incorreutos d\'API + Nome d\'usuariu/contraseña incorreutos Videu perllargu Video percurtiu Esbilla múltiple @@ -606,7 +623,7 @@ Convertilu a un tuit normal amiesta una caráuter estra. Solicitú de permisos L\'aplicación ta solicitando los permisos de darréu Avisu d\'enllaz con phishing - Tas abriendo un enllaz nun mensaxe direutu que quiciabes t\'empobine a un sitiu con phishing.\n\nComprueba la direición del sitiu dos vegaes enantes d\'apurrir cualesquier informaicón personal. + Tas abriendo un enllaz nun mensaxe direutu que quiciabes t\'empobine a un sitiu con phishing.\n\nComprueba la direición del sitiu dos vegaes enantes d\'apurrir cualesquier información personal. ¿De xuru que quies siguir? Avísate cuando teas intentando abrir un enllaz sospechosu con phishing nun mensaxe direutu. Semeya @@ -617,13 +634,16 @@ Convertilu a un tuit normal amiesta una caráuter estra. Peñerar tuits sensibles Peñerar cites non disponibles Multi-xera + Abre\'l perfil y medios nuna xera nueva Nome de cuenta al debalu Nun permite qu\'otres aplicaciones consigan el to nome lleendo les cuentes, ameyora la privacidá. ¿Renomar cuentes esistentes? Habilitar pa un intervalu de refrescu más rápidu, aumenta\'l consumu d\'enerxía n\'Android 5.0+ + Para l\'auto-refrescu tando la batería baxa Primi ANICIU en cuentes d\'ATRÁS pa caltener abiertu\'l fluxu de tuits Abre enllaces nel restolador integráu (cola potencia de Chromium) Llende cimera d\'elementos atroxaos nes bases de datos pa cada cuenta. Afitar a un valor más pequeñu p\'aforrar espaciu y aumentar la velocidá de carga. + Precarga medios namái en redes llibres como Wi-Fi El fluxu de tuits namái en redes llibres como Wi-Fi Fluxu de tuita namái al cargar Agora pues afitar l\'allugamientu de mou separtáu na llingüeta d\'axustes. @@ -649,6 +669,7 @@ Convertilu a un tuit normal amiesta una caráuter estra. Mou d\'aforru d\'enerxía Mou tableta Tamañu del testu + Tornar Allugamientu de tendencies Precargar usando namái Wi-Fi Previsualización @@ -760,6 +781,7 @@ Convertilu a un tuit normal amiesta una caráuter estra. Esbilla d\'usuariu Esbillar llistáu d\'usuariu Unviar de toes toes + Unviar en Unviu d\'informe de fallu de Twidere Unviar MD Unviar solicitú de siguimientu @@ -817,6 +839,7 @@ Convertilu a un tuit normal amiesta una caráuter estra. Aniciu Interaiciones Mensaxes + Los usuarios habilitaron los avisos Tuits en tiempu real Estilu Soscribiéstite al llistáu «%s». @@ -853,6 +876,8 @@ Convertilu a un tuit normal amiesta una caráuter estra. Serviciu de sincronización de llinia temporal Tocante a Cuentes + Amestar o desaniciar del llistáu + Bloquiar a %s Usuarios bloquiaos Aniciu de sesión col restolador Componer @@ -868,6 +893,7 @@ Convertilu a un tuit normal amiesta una caráuter estra. Carauterístiques ameyoraes + Favoritos Peñeres Soscripción non válida URL @@ -895,6 +921,8 @@ Convertilu a un tuit normal amiesta una caráuter estra. Axustes de sincronización Usuariu Colores d\'usuariu + Perteneces a + Creóse Soscripciones Usuarios que marcaron esto como favoritu Usuarios que-yos prestó esto @@ -940,6 +968,7 @@ Convertilu a un tuit normal amiesta una caráuter estra. Descripción + Públicu Nome Llistaos diff --git a/twidere/src/main/res-localized/values-in/strings.xml b/twidere/src/main/res-localized/values-in/strings.xml index 9e826f69a..dc84cc630 100644 --- a/twidere/src/main/res-localized/values-in/strings.xml +++ b/twidere/src/main/res-localized/values-in/strings.xml @@ -8,7 +8,7 @@ Fanfou Twitter Setuju - 同意並授權 + Setuju menyetujui permintaa mengikuti Tambahkan Tambah Anggota @@ -16,8 +16,6 @@ Tambah aturan Tambah Anggota Tambah tab - 新增到過濾器 - 新增到列表 menambahkan anggota Blok @@ -34,7 +32,6 @@ menghapus menghapus pencarian tolak permintaan mengikuti - 不重啟 Sunting Favorit @@ -81,10 +78,8 @@ Simpan menyimpan pencarian - 搜尋 Pilih semua Tidak memilih - 選擇使用者 Kirim Mengirim pesan langsung @@ -277,7 +272,7 @@ Kata kunci Tautan Sumber - 使用者 + Pengguna Tambahkan pada penyaringan? Permintaan mengikuti terkirim %s diikuti. @@ -311,7 +306,6 @@ Sorot dan garis bawah Geser dari ujung layar untuk membuka panel akun. Panel Akun - 沒有內容 Tidak ada akun Petunjuk Segarkan pada timeline @@ -343,9 +337,7 @@ Latar Belakang layanan operasi Penyedia database Twidere Lokasi anda secara kasar - 媒體 Cuit asli - 照片 Pemungutan suara Muat ulang & Menyinkronisasikan layanan Segarkan layanan @@ -357,7 +349,7 @@ Banyak Tombol susun di kiri Pasang tombol susun di kiri. - 亮色 + Terang Opsi menyoroti link Tautan ke kutipan twit Daftarkan anggota @@ -423,7 +415,7 @@ Gagal Menverifikasi Login. Masalah Jaringan. - 沒有帳號 + Tidak ada akun Tidak ada akun yang dipilih. Tidak ada pengguna yang dipilih Tekan sekali lagi untuk keluar @@ -457,7 +449,7 @@ %1$s dan %2$d lainnya me-retweet Tampilkan nama lebih dahulu Tampilkan @screenname dahulu - 優先顯示名字 + Tampilkan nama depan %s tidak diatur %s me-retweet %1$s (%2$s) @@ -469,8 +461,8 @@ Buka profil dan media pada tugas baru Daftar baru - 下一條 - 下一步 + Lanjutkan + Lanjut Tab berikutnya Tetap \"Menulis\" terbuka setelah tweet terkirim Sebuah hadiah kecil untuk chatterbox @@ -479,7 +471,7 @@ Tak ada aturan Tidak ada konten Tidak terdapat tab - 沒有標籤頁 + Tidak ada tab Tidak, terima kasih Tidak menemukan pengguna Tidak ada akhiran versi @@ -493,8 +485,6 @@ Nada dering Tweet baru oleh %s Tweet baru oleh %1$s dan %2$d lainnya - 首頁 - 互動 Pesan Notifikasi Jenis pemberitahuan @@ -541,7 +531,6 @@ Hasilkan nama akun secara acak Menghalau aplikasi lain untuk mengambil nama Anda dengan cara membaca akun, meningkatkan privasi. Ganti nama akun yang ada? - 電量低時停止自動更新 Batas atas item yang disimpan pada database untuk tiap akun, berikan nilai kecil untuk menghemat ruang dan meningkatkan kecepatan muat. Akun Lanjutan @@ -551,9 +540,8 @@ Lanskap Layar Tegak Penyimpanan - 啟用實時流 Ukuran teks - 翻譯 + Terjemahkan Lokasi tren Preload menggunakan Wi-Fi saja Pratinjau @@ -580,7 +568,7 @@ Twidere - 飯否 + Fanfou GNU Social.de GNU Social.net LoadAverage.org @@ -612,8 +600,6 @@ Interval refresh Muat ulang di awal Muat ulang timeline dan mention saat memulai. - 首頁 - 互動 Pesan Tren Registrasi @@ -655,7 +641,7 @@ Pencarian tweets atau pengguna Cari Kicauan Kicauan - 用戶 + Pengguna Kunci keamanan Pilih akun Pilih akun @@ -675,8 +661,7 @@ Pengaturan Antarmuka Notifikasi - 更新 - 實時流 + Segarkan Bagikan format \"[TITLE]\" = Konten title\n\"[TEXT]\" = Teks konten Bagikan tautan @@ -716,9 +701,7 @@ Penyingkat tweet Tidak ada (Batal mengirim) - 轉推 - 首頁 - 互動 + Retweet Pesan Streaming Gaya @@ -731,7 +714,7 @@ Ikon Gambar dan tanda Tanda - 名字 + Nama Tab TCP DNS Query Gunakan Protokol TCP untuk membuat permintaan DNS untuk menghindari DNS spoofing. @@ -747,18 +730,17 @@ Gelap Bar aksi gelap Tema font keluarga - 燈光 + Terang Integrasi dengan Thumbor %1$s · %2$s Timeline streaming yang berjalan Layanan sinkronisasi timeline Tentang - 帳號 - 從列表新增或移除 + Akun Blok %s Pengguna diblokir Masuk melalui browser - 撰寫 + Susun Percakapan Menghubungkan ke… Pesan @@ -777,25 +759,22 @@ Beranda Suka - 過濾器訂閱 + Menyaring langganan Menyebutkan Nama panggilan Lisensi Open Source Twidere ∞ - 搜尋 Pilih pengguna - 設定暱稱 + Tentukan nama panggilan Tweet - 推文 - 實時流 - 名稱 - 網址 + Kicauan + Nama + Alamat web %1$s : %2$s Sinkronasi Data Sinkronisasi pengaturan Pengguna Warna pengguna - 屬於 Disukai para pengguna Pengguna menyukai ini Pengguna yang me-retweet ini @@ -842,14 +821,14 @@ Publik - 名字 - 列表 + Nama + Daftar-dafar %s me-mention anda Mention pengguna - 簡介 + Deskripsi Lokasi - 名字 - 網址 + Nama + Alamat web Anda perlu mengirim permintaan mengikuti kepada pengguna yang diproteksi ini untuk melihat tweetnya Dilindungi Diverifikasi diff --git a/twidere/src/main/res/values/arrays_languages.xml b/twidere/src/main/res/values/arrays_languages.xml new file mode 100644 index 000000000..2613c5aa1 --- /dev/null +++ b/twidere/src/main/res/values/arrays_languages.xml @@ -0,0 +1,116 @@ + + + + + + "" + af + an + ar + ast + ca + cs + da + de + el + en_GB + es + fa + fi + fr + gl + hi + hr + hu + in + it + iw + ja + ko + lo + ms + nl + no + pl + pt + ro + ru + sk + sr + sv + ta + te + th + tr + uk + vi + zh + zh_CN + zh_HK + zu + + + System Default + Afrikaans + Aragonese + Arabic + Asturian + Catalan + Czech + Danish + German + Greek + English (UK) + Spanish + Persian + Finnish + French + Galician + Hindi + Croatian + Hungarian + Indonesian + Italian + Hebrew + Japanese + Korean + Lao + Malay + Dutch + Norwegian + Polish + Portuguese + Romanian + Russian + Slovak + Serbian + Swedish + Tamil + Telugu + Thai + Turkish + Ukrainian + Vietnamese + Chinese + Chinese (Simplified) + Chinese (Hong Kong) + Zulu + + \ No newline at end of file diff --git a/twidere/src/main/res/values/strings.xml b/twidere/src/main/res/values/strings.xml index eea416b46..71807227c 100644 --- a/twidere/src/main/res/values/strings.xml +++ b/twidere/src/main/res/values/strings.xml @@ -807,6 +807,7 @@ Preload on free network Multi column tab width Multi column tabs + Override language Portrait Storage Streaming content diff --git a/twidere/src/main/res/xml/preferences_other.xml b/twidere/src/main/res/xml/preferences_other.xml index 8138dda7c..a9de772db 100644 --- a/twidere/src/main/res/xml/preferences_other.xml +++ b/twidere/src/main/res/xml/preferences_other.xml @@ -32,5 +32,15 @@ android:name="should_recreate" android:value="true"/> + + + \ No newline at end of file