From 3f0e33df89454a2804ece9d2ea736ed3a1b432e0 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern <yairm210@hotmail.com> Date: Fri, 20 Dec 2019 11:27:26 +0200 Subject: [PATCH] Added try/catch on reading the translation file (some phones don't support UTF-8???) You can always pass the language screen even if we don't read the percentage files We read the percentage files from the INTERNAL NOT THE LOCAL OBVIOUSLY --- android/build.gradle | 4 ++-- .../models/translations/TranslationFileReader.kt | 5 ++--- .../com/unciv/models/translations/Translations.kt | 12 ++++++++++-- .../optionstable/WorldScreenOptionsTable.kt | 4 ++-- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 366936c973..9e8fae6030 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -21,8 +21,8 @@ android { applicationId "com.unciv.app" minSdkVersion 14 targetSdkVersion 29 - versionCode 349 - versionName "3.4.1" + versionCode 350 + versionName "3.4.1-patch1" archivesBaseName = "Unciv" } diff --git a/core/src/com/unciv/models/translations/TranslationFileReader.kt b/core/src/com/unciv/models/translations/TranslationFileReader.kt index 22ecbca9e4..d2c9a25da1 100644 --- a/core/src/com/unciv/models/translations/TranslationFileReader.kt +++ b/core/src/com/unciv/models/translations/TranslationFileReader.kt @@ -66,11 +66,10 @@ class TranslationFileReader{ fun readLanguagePercentages():HashMap<String,Int>{ - val hashmap = HashMap<String,Int>() - val percentageFile = Gdx.files.local(percentagesFileLocation) + val percentageFile = Gdx.files.internal(percentagesFileLocation) if(!percentageFile.exists()) return hashmap - for(line in Gdx.files.local(percentagesFileLocation).reader().readLines()){ + for(line in percentageFile.reader().readLines()){ val splitLine = line.split(" = ") hashmap[splitLine[0]]=splitLine[1].toInt() } diff --git a/core/src/com/unciv/models/translations/Translations.kt b/core/src/com/unciv/models/translations/Translations.kt index 27b16db700..52a2d4b769 100644 --- a/core/src/com/unciv/models/translations/Translations.kt +++ b/core/src/com/unciv/models/translations/Translations.kt @@ -9,6 +9,7 @@ import kotlin.collections.HashMap class Translations : LinkedHashMap<String, TranslationEntry>(){ var percentCompleteOfLanguages = HashMap<String,Int>() + .apply { put("English",100) } // So even if we don't manage to load the percentages, we can still pass the language screen fun get(text:String,language:String): String { if(!hasTranslation(text,language)) return text @@ -35,8 +36,15 @@ class Translations : LinkedHashMap<String, TranslationEntry>(){ val translationFileName = "jsons/translationsByLanguage/$language.properties" if (!Gdx.files.internal(translationFileName).exists()) return - val languageTranslations = TranslationFileReader() - .read(translationFileName) + + val languageTranslations:HashMap<String,String> + try { // On some devices we get a weird UnsupportedEncodingException + // which is super odd because everyone should support UTF-8 + languageTranslations = TranslationFileReader() + .read(translationFileName) + }catch (ex:Exception){ + return + } for (translation in languageTranslations) { if (!containsKey(translation.key)) diff --git a/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt b/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt index 3d3fd5703f..10b75cc6bf 100644 --- a/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt +++ b/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt @@ -264,14 +264,14 @@ class WorldScreenOptionsTable(val worldScreen:WorldScreen) : PopupTable(worldScr } private fun addLanguageSelectBox(innerTable: PopupTable) { - innerTable.add("Language".toLabel()) val languageSelectBox = SelectBox<Language>(skin) val languageArray = Array<Language>() - val ruleSet = worldScreen.gameInfo.ruleSet UncivGame.Current.translations.percentCompleteOfLanguages .map { Language(it.key, if(it.key=="English") 100 else it.value) } .sortedByDescending { it.percentComplete } .forEach { languageArray.add(it) } + if(languageArray.size==0) return + innerTable.add("Language".toLabel()) languageSelectBox.items = languageArray val matchingLanguage = languageArray.firstOrNull { it.language == UncivGame.Current.settings.language } languageSelectBox.selected = if (matchingLanguage != null) matchingLanguage else languageArray.first()