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
This commit is contained in:
Yair Morgenstern 2019-12-20 11:27:26 +02:00
parent 6d666e168b
commit 3f0e33df89
4 changed files with 16 additions and 9 deletions

View File

@ -21,8 +21,8 @@ android {
applicationId "com.unciv.app" applicationId "com.unciv.app"
minSdkVersion 14 minSdkVersion 14
targetSdkVersion 29 targetSdkVersion 29
versionCode 349 versionCode 350
versionName "3.4.1" versionName "3.4.1-patch1"
archivesBaseName = "Unciv" archivesBaseName = "Unciv"
} }

View File

@ -66,11 +66,10 @@ class TranslationFileReader{
fun readLanguagePercentages():HashMap<String,Int>{ fun readLanguagePercentages():HashMap<String,Int>{
val hashmap = 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 if(!percentageFile.exists()) return hashmap
for(line in Gdx.files.local(percentagesFileLocation).reader().readLines()){ for(line in percentageFile.reader().readLines()){
val splitLine = line.split(" = ") val splitLine = line.split(" = ")
hashmap[splitLine[0]]=splitLine[1].toInt() hashmap[splitLine[0]]=splitLine[1].toInt()
} }

View File

@ -9,6 +9,7 @@ import kotlin.collections.HashMap
class Translations : LinkedHashMap<String, TranslationEntry>(){ class Translations : LinkedHashMap<String, TranslationEntry>(){
var percentCompleteOfLanguages = HashMap<String,Int>() 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 { fun get(text:String,language:String): String {
if(!hasTranslation(text,language)) return text if(!hasTranslation(text,language)) return text
@ -35,8 +36,15 @@ class Translations : LinkedHashMap<String, TranslationEntry>(){
val translationFileName = "jsons/translationsByLanguage/$language.properties" val translationFileName = "jsons/translationsByLanguage/$language.properties"
if (!Gdx.files.internal(translationFileName).exists()) return 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) { for (translation in languageTranslations) {
if (!containsKey(translation.key)) if (!containsKey(translation.key))

View File

@ -264,14 +264,14 @@ class WorldScreenOptionsTable(val worldScreen:WorldScreen) : PopupTable(worldScr
} }
private fun addLanguageSelectBox(innerTable: PopupTable) { private fun addLanguageSelectBox(innerTable: PopupTable) {
innerTable.add("Language".toLabel())
val languageSelectBox = SelectBox<Language>(skin) val languageSelectBox = SelectBox<Language>(skin)
val languageArray = Array<Language>() val languageArray = Array<Language>()
val ruleSet = worldScreen.gameInfo.ruleSet
UncivGame.Current.translations.percentCompleteOfLanguages UncivGame.Current.translations.percentCompleteOfLanguages
.map { Language(it.key, if(it.key=="English") 100 else it.value) } .map { Language(it.key, if(it.key=="English") 100 else it.value) }
.sortedByDescending { it.percentComplete } .sortedByDescending { it.percentComplete }
.forEach { languageArray.add(it) } .forEach { languageArray.add(it) }
if(languageArray.size==0) return
innerTable.add("Language".toLabel())
languageSelectBox.items = languageArray languageSelectBox.items = languageArray
val matchingLanguage = languageArray.firstOrNull { it.language == UncivGame.Current.settings.language } val matchingLanguage = languageArray.firstOrNull { it.language == UncivGame.Current.settings.language }
languageSelectBox.selected = if (matchingLanguage != null) matchingLanguage else languageArray.first() languageSelectBox.selected = if (matchingLanguage != null) matchingLanguage else languageArray.first()