diff --git a/AndorsTrail/.gitignore b/AndorsTrail/.gitignore index e271b24aa..258f986d4 100644 --- a/AndorsTrail/.gitignore +++ b/AndorsTrail/.gitignore @@ -1,7 +1,6 @@ # Android ignores gen/ bin/ -assets/ target/ local.properties diff --git a/AndorsTrail/res/values-de/strings.xml b/AndorsTrail/res/values-de/strings.xml index ac1673f2f..d2ded41e0 100644 --- a/AndorsTrail/res/values-de/strings.xml +++ b/AndorsTrail/res/values-de/strings.xml @@ -557,5 +557,10 @@ Bestätige das Überschreiben von Spielständen Zeigt eine Frage an ob beim Speichern auf einen bereits existierenden Spielstand dieser überschrieben werden soll. + + + + + de.mo diff --git a/AndorsTrail/res/values-fr/strings.xml b/AndorsTrail/res/values-fr/strings.xml index e4aadbd6c..b0073b216 100644 --- a/AndorsTrail/res/values-fr/strings.xml +++ b/AndorsTrail/res/values-fr/strings.xml @@ -485,4 +485,8 @@ Immunise contre les coups critiques Taux de coups critiques : + + + + fr.mo diff --git a/AndorsTrail/res/values-it/strings.xml b/AndorsTrail/res/values-it/strings.xml index 5d1c5b3c1..0fb41e436 100644 --- a/AndorsTrail/res/values-it/strings.xml +++ b/AndorsTrail/res/values-it/strings.xml @@ -320,4 +320,9 @@ 2.0f + + + + it.mo + diff --git a/AndorsTrail/res/values-ja/strings.xml b/AndorsTrail/res/values-ja/strings.xml index f49f62107..a4fac72ce 100644 --- a/AndorsTrail/res/values-ja/strings.xml +++ b/AndorsTrail/res/values-ja/strings.xml @@ -513,4 +513,10 @@ あなたの命中率より %1$d 以上回避率が低い敵に攻撃するたび、その攻撃は %2$d%% の確率で対象に脳震盪(concussion)を起こします。concussionは攻撃に関する戦闘能力を劇的に下げ、対象は有効な攻撃を当てることが難しくなります。 About + + + + + ja.mo + \ No newline at end of file diff --git a/AndorsTrail/res/values-pl/strings.xml b/AndorsTrail/res/values-pl/strings.xml index cd15341e3..c6da50ea4 100644 --- a/AndorsTrail/res/values-pl/strings.xml +++ b/AndorsTrail/res/values-pl/strings.xml @@ -559,5 +559,10 @@ Translated by toudi5-bełchatów Potwierdź nadpisanie gry Zadaje pytanie zawsze, gdy chcesz nadpisać grę na slocie, który jest już zajęty. + + + + + pl.mo diff --git a/AndorsTrail/res/values-pt-rBR/strings.xml b/AndorsTrail/res/values-pt-rBR/strings.xml index df20aacd0..def05f2b1 100644 --- a/AndorsTrail/res/values-pt-rBR/strings.xml +++ b/AndorsTrail/res/values-pt-rBR/strings.xml @@ -559,4 +559,9 @@ Confirma re-escrita de salvamento Pergunta o que deve ser feito caso tente-se gravar sobre um salvamento anterior. + + + + pt-rBR.mo + diff --git a/AndorsTrail/res/values-pt/strings.xml b/AndorsTrail/res/values-pt/strings.xml index 70427713a..53dbba43b 100644 --- a/AndorsTrail/res/values-pt/strings.xml +++ b/AndorsTrail/res/values-pt/strings.xml @@ -475,4 +475,9 @@ Optimized drawing Desactiva esta opção caso apareçam artefactos gráficos. Ao activar esta opção apenas serão redesenhados no écrã os blocos alterados em cada fotograma. + + + + pt.mo + diff --git a/AndorsTrail/res/values-ru/strings.xml b/AndorsTrail/res/values-ru/strings.xml index 0c1373f08..504e64174 100644 --- a/AndorsTrail/res/values-ru/strings.xml +++ b/AndorsTrail/res/values-ru/strings.xml @@ -558,5 +558,9 @@ Перезаписать сохранение Настройка диалога подтверждения при попытке перезаписать сохранение + + + + ru.mo diff --git a/AndorsTrail/res/values/strings.xml b/AndorsTrail/res/values/strings.xml index 77c4f4a10..ba7969781 100644 --- a/AndorsTrail/res/values/strings.xml +++ b/AndorsTrail/res/values/strings.xml @@ -564,6 +564,7 @@ Use item cost (AP): %1$s moves. Combat log + [Quest completed: \"%1$s\"] [Quest updated: \"%1$s\"] diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/conversation/ConversationLoader.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/conversation/ConversationLoader.java index 97e0aff19..e56af5e47 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/conversation/ConversationLoader.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/conversation/ConversationLoader.java @@ -6,6 +6,7 @@ import java.util.HashMap; import android.content.res.Resources; import com.gpl.rpg.AndorsTrail.resource.ResourceLoader; +import com.gpl.rpg.AndorsTrail.resource.TranslationLoader; import com.gpl.rpg.AndorsTrail.resource.parsers.ConversationListParser; public final class ConversationLoader { @@ -19,11 +20,13 @@ public final class ConversationLoader { if (conversationCollection.hasPhrase(phraseID)) { return conversationCollection.getPhrase(phraseID); } - - ConversationListParser conversationListParser = new ConversationListParser(); + + TranslationLoader translationLoader = new TranslationLoader(r.getAssets(), r); + ConversationListParser conversationListParser = new ConversationListParser(translationLoader); int resourceID = resourceIDsPerPhraseID.get(phraseID); conversationCollection.initialize(conversationListParser, ResourceLoader.readStringFromRaw(r, resourceID)); - + translationLoader.close(); + return conversationCollection.getPhrase(phraseID); } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java index f48f6b530..37a7476a8 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java @@ -41,7 +41,9 @@ public final class ResourceLoader { taskStart = start; final int mTileSize = world.tileManager.tileSize; - + + TranslationLoader translationLoader = new TranslationLoader(r.getAssets(), r); + DynamicTileLoader loader = new DynamicTileLoader(world.tileManager.tileCache); prepareTilesets(loader, mTileSize); if (AndorsTrailApplication.DEVELOPMENT_DEBUGMESSAGES) timingCheckpoint("prepareTilesets"); @@ -75,7 +77,7 @@ public final class ResourceLoader { // ======================================================================== // Load item categories - final ItemCategoryParser itemCategoryParser = new ItemCategoryParser(); + final ItemCategoryParser itemCategoryParser = new ItemCategoryParser(translationLoader); final TypedArray categoriesToLoad = r.obtainTypedArray(itemCategoriesResourceId); for (int i = 0; i < categoriesToLoad.length(); ++i) { world.itemCategories.initialize(itemCategoryParser, readStringFromRaw(r, categoriesToLoad, i)); @@ -85,7 +87,7 @@ public final class ResourceLoader { // ======================================================================== // Load condition types - final ActorConditionsTypeParser actorConditionsTypeParser = new ActorConditionsTypeParser(loader); + final ActorConditionsTypeParser actorConditionsTypeParser = new ActorConditionsTypeParser(loader, translationLoader); final TypedArray conditionsToLoad = r.obtainTypedArray(actorConditionsResourceId); for (int i = 0; i < conditionsToLoad.length(); ++i) { world.actorConditionsTypes.initialize(actorConditionsTypeParser, readStringFromRaw(r, conditionsToLoad, i)); @@ -101,7 +103,7 @@ public final class ResourceLoader { // ======================================================================== // Load items - final ItemTypeParser itemTypeParser = new ItemTypeParser(loader, world.actorConditionsTypes, world.itemCategories); + final ItemTypeParser itemTypeParser = new ItemTypeParser(loader, world.actorConditionsTypes, world.itemCategories, translationLoader); final TypedArray itemsToLoad = r.obtainTypedArray(itemsResourceId); for (int i = 0; i < itemsToLoad.length(); ++i) { world.itemTypes.initialize(itemTypeParser, readStringFromRaw(r, itemsToLoad, i)); @@ -123,7 +125,7 @@ public final class ResourceLoader { // ======================================================================== // Load quests - final QuestParser questParser = new QuestParser(); + final QuestParser questParser = new QuestParser(translationLoader); final TypedArray questsToLoad = r.obtainTypedArray(questsResourceId); for (int i = 0; i < questsToLoad.length(); ++i) { world.quests.initialize(questParser, readStringFromRaw(r, questsToLoad, i)); @@ -134,7 +136,7 @@ public final class ResourceLoader { // ======================================================================== // Load conversations - final ConversationListParser conversationListParser = new ConversationListParser(); + final ConversationListParser conversationListParser = new ConversationListParser(translationLoader); final TypedArray conversationsListsToLoad = r.obtainTypedArray(conversationsListsResourceId); for (int i = 0; i < conversationsListsToLoad.length(); ++i) { ConversationCollection conversations = new ConversationCollection(); @@ -147,7 +149,7 @@ public final class ResourceLoader { // ======================================================================== // Load monsters - final MonsterTypeParser monsterTypeParser = new MonsterTypeParser(world.dropLists, world.actorConditionsTypes, loader); + final MonsterTypeParser monsterTypeParser = new MonsterTypeParser(world.dropLists, world.actorConditionsTypes, loader, translationLoader); final TypedArray monstersToLoad = r.obtainTypedArray(monstersResourceId); for (int i = 0; i < monstersToLoad.length(); ++i) { world.monsterTypes.initialize(monsterTypeParser, readStringFromRaw(r, monstersToLoad, i)); @@ -186,7 +188,8 @@ public final class ResourceLoader { WorldMapParser.read(r, R.xml.worldmap, world.maps); if (AndorsTrailApplication.DEVELOPMENT_DEBUGMESSAGES) timingCheckpoint("WorldMapParser"); // ======================================================================== - + + translationLoader.close(); if (AndorsTrailApplication.DEVELOPMENT_DEBUGMESSAGES) { @@ -227,7 +230,7 @@ public final class ResourceLoader { final Size src_sz20x12 = new Size(20, 12); final Size src_mapTileSize = new Size(16, 8); final Size src_mapTileSize7 = new Size(16, 7); - + loader.prepareTileset(R.drawable.char_hero, "char_hero", src_sz1x1, defaultTileSize); loader.prepareTileset(R.drawable.ui_selections, "ui_selections", new Size(5, 1), defaultTileSize); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/TranslationLoader.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/TranslationLoader.java new file mode 100644 index 000000000..40632a9ce --- /dev/null +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/TranslationLoader.java @@ -0,0 +1,174 @@ +package com.gpl.rpg.AndorsTrail.resource; + +import android.content.res.AssetManager; +import android.content.res.Resources; +import com.gpl.rpg.AndorsTrail.R; +import com.gpl.rpg.AndorsTrail.util.L; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; + +public final class TranslationLoader { + private final BinaryMoFileParser parser; + + public TranslationLoader(AssetManager mgr, Resources res) { + this.parser = createParser(mgr, res); + } + public TranslationLoader(AssetManager mgr, String filename) { + this.parser = createParser(mgr, filename); + } + + private static final String translationDir = "translation" + File.separator; + private static BinaryMoFileParser createParser(AssetManager mgr, Resources res) { + String translationFilename = res.getString(R.string.localize_resources_from_mo_filename); + if (translationFilename == null || translationFilename.length() <= 0) return null; + + return createParser(mgr, translationDir + translationFilename); + } + + private static BinaryMoFileParser createParser(AssetManager mgr, String translationFilename) { + try { + InputStream is = mgr.open(translationFilename); + return new BinaryMoFileParser(is); + } catch (IOException e) { + L.log("ERROR: Reading from translation asset \"" + translationFilename + "\" failed: " + e.toString()); + return null; + } + } + + private String tr(String s) { + if (s == null) return null; + if (parser == null) return s; + if (s.length() <= 1) return s; + try { + //String t = parser.translate(s); + //L.log(translations.size() + " : " + s + " -> " + t); + //return t; + return parser.translate(s); + } catch (IOException e) { + return s; + } + } + + public void close() { + if (parser == null) return; + try { + parser.close(); + } catch (IOException e) { } + } + + public String translateItemCategoryName(String s) { return tr(s); } + public String translateActorConditionName(String s) { return tr(s); } + public String translateItemTypeName(String s) { return tr(s); } + public String translateItemTypeDescription(String s) {return tr(s); } + public String translateMonsterTypeName(String s) { return tr(s); } + public String translateQuestName(String s) { return tr(s); } + public String translateQuestLogEntry(String s) { return tr(s); } + public String translateConversationPhrase(String s) { return tr(s); } + public String translateConversationReply(String s) { return tr(s); } + + private static final class BinaryMoFileParser { + private final InputStream is; + private final BufferedInputStream reader; + private final int numStrings; + private final int offsetOriginalStrings; + private final int offsetTranslatedStrings; + + public BinaryMoFileParser(InputStream is) throws IOException { + this.is = is; + this.reader = new BufferedInputStream(is); + this.reader.mark(9999999); + int magic = readIntLE(); + if (magic != 0x950412de) throw new IOException("Invalid magic in MO file"); + this.reader.skip(4); + numStrings = readIntLE(); + offsetOriginalStrings = readIntLE(); + offsetTranslatedStrings = readIntLE(); + } + + public void close() throws IOException { + reader.close(); + is.close(); + } + + private static final String charset = "utf-8"; + + public String translate(String s) throws IOException { + if (numStrings <= 0) return s; + + byte[] bytes = s.getBytes(charset); + byte[] translation = find(bytes); + if (translation == null || translation.length <= 0) return s; + return new String(translation, charset); + } + + private byte[] find(byte[] bytes) throws IOException { + return find(bytes, 0, numStrings); + } + + private byte[] find(byte[] bytes, int minIndex, int maxIndex) throws IOException { + int middleIndex; + while(minIndex != maxIndex) { + if (minIndex+1 == maxIndex) middleIndex = minIndex; + else if (minIndex+2 == maxIndex) middleIndex = minIndex; + else middleIndex = (minIndex + maxIndex) / 2; + + int c = compare(bytes, middleIndex); + if (c == 0) return getTranslatedStringAt(middleIndex); + + if (minIndex+1 == maxIndex) { + return null; + } else if (c > 0) { + maxIndex = middleIndex; + } else { + minIndex = middleIndex+1; + } + } + return null; + } + + private final byte[] buf = new byte[8]; + public final int readIntLE() throws IOException + { + reader.read(buf, 0, 4); + return + (buf[3]) << 24 | + (buf[2]&0xff) << 16 | + (buf[1]&0xff) << 8 | + (buf[0]&0xff); + } + + private void seek(int pos) throws IOException { + reader.reset(); + reader.skip(pos); + } + + private byte[] getTranslatedStringAt(int idx) throws IOException { + seek(offsetTranslatedStrings + idx*8); + int length = readIntLE(); + int offset = readIntLE(); + seek(offset); + byte[] result = new byte[length]; + reader.read(result, 0, length); + return result; + } + + private int compare(byte[] bytes, int idx) throws IOException { + seek(offsetOriginalStrings + idx*8); + int length = readIntLE(); + int offset = readIntLE(); + seek(offset); + int maxLength = bytes.length; + for(int i = 0; i < length; ++i) { + if (i == maxLength) return 1; + int b = reader.read(); + if (b == bytes[i]) continue; + return (b < bytes[i]) ? -1 : 1; + } + if (length < maxLength) return -1; + return 0; + } + } +} diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ActorConditionsTypeParser.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ActorConditionsTypeParser.java index e44ce21ed..6d4e3d322 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ActorConditionsTypeParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ActorConditionsTypeParser.java @@ -2,6 +2,7 @@ package com.gpl.rpg.AndorsTrail.resource.parsers; import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionType; import com.gpl.rpg.AndorsTrail.resource.DynamicTileLoader; +import com.gpl.rpg.AndorsTrail.resource.TranslationLoader; import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonCollectionParserFor; import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonFieldNames; import com.gpl.rpg.AndorsTrail.util.Pair; @@ -11,17 +12,19 @@ import org.json.JSONObject; public final class ActorConditionsTypeParser extends JsonCollectionParserFor { private final DynamicTileLoader tileLoader; - - public ActorConditionsTypeParser(final DynamicTileLoader tileLoader) { + private final TranslationLoader translationLoader; + + public ActorConditionsTypeParser(final DynamicTileLoader tileLoader, TranslationLoader translationLoader) { this.tileLoader = tileLoader; - } + this.translationLoader = translationLoader; + } @Override protected Pair parseObject(JSONObject o) throws JSONException { final String conditionTypeID = o.getString(JsonFieldNames.ActorCondition.conditionTypeID); ActorConditionType result = new ActorConditionType( conditionTypeID - ,o.getString(JsonFieldNames.ActorCondition.name) + ,translationLoader.translateActorConditionName(o.getString(JsonFieldNames.ActorCondition.name)) ,ResourceParserUtils.parseImageID(tileLoader, o.getString(JsonFieldNames.ActorCondition.iconID)) ,o.getInt(JsonFieldNames.ActorCondition.category) ,o.optInt(JsonFieldNames.ActorCondition.isStacking) > 0 diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ConversationListParser.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ConversationListParser.java index c9fc678cb..e1129f1c2 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ConversationListParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ConversationListParser.java @@ -5,6 +5,7 @@ import com.gpl.rpg.AndorsTrail.conversation.Phrase; import com.gpl.rpg.AndorsTrail.conversation.Phrase.Reply; import com.gpl.rpg.AndorsTrail.conversation.Phrase.Reward; import com.gpl.rpg.AndorsTrail.model.quest.QuestProgress; +import com.gpl.rpg.AndorsTrail.resource.TranslationLoader; import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonCollectionParserFor; import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonFieldNames; import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonParserFor; @@ -16,8 +17,10 @@ import org.json.JSONObject; import java.util.ArrayList; public final class ConversationListParser extends JsonCollectionParserFor { - - private final JsonParserFor replyParser = new JsonParserFor() { + + private final TranslationLoader translationLoader; + + private final JsonParserFor replyParser = new JsonParserFor() { @Override protected Reply parseObject(JSONObject o) throws JSONException { JSONObject requires = o.optJSONObject(JsonFieldNames.Reply.requires); @@ -35,7 +38,7 @@ public final class ConversationListParser extends JsonCollectionParserFor parseObject(JSONObject o) throws JSONException { final String id = o.getString(JsonFieldNames.Phrase.phraseID); @@ -76,7 +83,7 @@ public final class ConversationListParser extends JsonCollectionParserFor(id, new Phrase( - o.optString(JsonFieldNames.Phrase.message, null) + translationLoader.translateConversationPhrase(o.optString(JsonFieldNames.Phrase.message, null)) , _replies , _rewards )); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemCategoryParser.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemCategoryParser.java index e14965791..5eab59d39 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemCategoryParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemCategoryParser.java @@ -1,6 +1,7 @@ package com.gpl.rpg.AndorsTrail.resource.parsers; import com.gpl.rpg.AndorsTrail.model.item.ItemCategory; +import com.gpl.rpg.AndorsTrail.resource.TranslationLoader; import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonCollectionParserFor; import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonFieldNames; import com.gpl.rpg.AndorsTrail.util.Pair; @@ -9,12 +10,19 @@ import org.json.JSONObject; public final class ItemCategoryParser extends JsonCollectionParserFor { - @Override + private final TranslationLoader translationLoader; + + public ItemCategoryParser(TranslationLoader translationLoader) { + + this.translationLoader = translationLoader; + } + + @Override protected Pair parseObject(JSONObject o) throws JSONException { final String id = o.getString(JsonFieldNames.ItemCategory.itemCategoryID); ItemCategory result = new ItemCategory( id - ,o.getString(JsonFieldNames.ItemCategory.name) + ,translationLoader.translateItemCategoryName(o.getString(JsonFieldNames.ItemCategory.name)) ,o.optInt(JsonFieldNames.ItemCategory.actionType, 0) ,o.optInt(JsonFieldNames.ItemCategory.inventorySlot, -1) ,o.optInt(JsonFieldNames.ItemCategory.size, 0) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemTypeParser.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemTypeParser.java index 5826f3ec0..0863f8552 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemTypeParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemTypeParser.java @@ -6,6 +6,7 @@ import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnEquip; import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse; import com.gpl.rpg.AndorsTrail.model.item.ItemType; import com.gpl.rpg.AndorsTrail.resource.DynamicTileLoader; +import com.gpl.rpg.AndorsTrail.resource.TranslationLoader; import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonCollectionParserFor; import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonFieldNames; import com.gpl.rpg.AndorsTrail.util.Pair; @@ -15,19 +16,26 @@ import org.json.JSONObject; public final class ItemTypeParser extends JsonCollectionParserFor { private final DynamicTileLoader tileLoader; - private final ItemTraitsParser itemTraitsParser; + private final TranslationLoader translationLoader; + private final ItemTraitsParser itemTraitsParser; private final ItemCategoryCollection itemCategories; - public ItemTypeParser(DynamicTileLoader tileLoader, ActorConditionTypeCollection actorConditionsTypes, ItemCategoryCollection itemCategories) { + public ItemTypeParser( + DynamicTileLoader tileLoader, + ActorConditionTypeCollection actorConditionsTypes, + ItemCategoryCollection itemCategories, + TranslationLoader translationLoader) { this.tileLoader = tileLoader; - this.itemTraitsParser = new ItemTraitsParser(actorConditionsTypes); + this.translationLoader = translationLoader; + this.itemTraitsParser = new ItemTraitsParser(actorConditionsTypes); this.itemCategories = itemCategories; } @Override public Pair parseObject(JSONObject o) throws JSONException { final String id = o.getString(JsonFieldNames.ItemType.itemTypeID); - final String itemTypeName = o.getString(JsonFieldNames.ItemType.name); + final String itemTypeName = translationLoader.translateItemTypeName(o.getString(JsonFieldNames.ItemType.name)); + final String description = translationLoader.translateItemTypeDescription(o.optString(JsonFieldNames.ItemType.description, null)); final ItemTraits_OnEquip equipEffect = itemTraitsParser.parseItemTraits_OnEquip(o.optJSONObject(JsonFieldNames.ItemType.equipEffect)); final ItemTraits_OnUse useEffect = itemTraitsParser.parseItemTraits_OnUse(o.optJSONObject(JsonFieldNames.ItemType.useEffect)); final ItemTraits_OnUse hitEffect = itemTraitsParser.parseItemTraits_OnUse(o.optJSONObject(JsonFieldNames.ItemType.hitEffect)); @@ -39,7 +47,7 @@ public final class ItemTypeParser extends JsonCollectionParserFor { id , ResourceParserUtils.parseImageID(tileLoader, o.getString(JsonFieldNames.ItemType.iconID)) , itemTypeName - , o.optString(JsonFieldNames.ItemType.description, null) + , description , itemCategories.getItemCategory(o.getString(JsonFieldNames.ItemType.category)) , o.optInt(JsonFieldNames.ItemType.displaytype, ItemType.DISPLAYTYPE_ORDINARY) , hasManualPrice diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/MonsterTypeParser.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/MonsterTypeParser.java index d57cc0e3b..871644fc1 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/MonsterTypeParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/MonsterTypeParser.java @@ -7,6 +7,7 @@ import com.gpl.rpg.AndorsTrail.model.actor.MonsterType; import com.gpl.rpg.AndorsTrail.model.item.DropListCollection; import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse; import com.gpl.rpg.AndorsTrail.resource.DynamicTileLoader; +import com.gpl.rpg.AndorsTrail.resource.TranslationLoader; import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonCollectionParserFor; import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonFieldNames; import com.gpl.rpg.AndorsTrail.util.ConstRange; @@ -21,9 +22,15 @@ public final class MonsterTypeParser extends JsonCollectionParserFor(monsterTypeID, new MonsterType( monsterTypeID - , o.getString(JsonFieldNames.Monster.name) + , translationLoader.translateMonsterTypeName(o.getString(JsonFieldNames.Monster.name)) , o.optString(JsonFieldNames.Monster.spawnGroup, monsterTypeID) , exp , droplists.getDropList(o.optString(JsonFieldNames.Monster.droplistID, null)) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/QuestParser.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/QuestParser.java index b00d67e60..6b074c672 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/QuestParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/QuestParser.java @@ -2,6 +2,7 @@ package com.gpl.rpg.AndorsTrail.resource.parsers; import com.gpl.rpg.AndorsTrail.model.quest.Quest; import com.gpl.rpg.AndorsTrail.model.quest.QuestLogEntry; +import com.gpl.rpg.AndorsTrail.resource.TranslationLoader; import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonCollectionParserFor; import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonFieldNames; import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonParserFor; @@ -14,14 +15,15 @@ import java.util.Collections; import java.util.Comparator; public final class QuestParser extends JsonCollectionParserFor { - private int sortOrder = 0; + private final TranslationLoader translationLoader; + private int sortOrder = 0; private final JsonParserFor questLogEntryParser = new JsonParserFor() { @Override protected QuestLogEntry parseObject(JSONObject o) throws JSONException { return new QuestLogEntry( o.getInt(JsonFieldNames.QuestLogEntry.progress) - ,o.optString(JsonFieldNames.QuestLogEntry.logText, null) + ,translationLoader.translateQuestLogEntry(o.optString(JsonFieldNames.QuestLogEntry.logText, null)) ,o.optInt(JsonFieldNames.QuestLogEntry.rewardExperience, 0) ,o.optInt(JsonFieldNames.QuestLogEntry.finishesQuest, 0) > 0 ); @@ -34,7 +36,11 @@ public final class QuestParser extends JsonCollectionParserFor { } }; - @Override + public QuestParser(TranslationLoader translationLoader) { + this.translationLoader = translationLoader; + } + + @Override protected Pair parseObject(JSONObject o) throws JSONException { final String id = o.getString(JsonFieldNames.Quest.questID); @@ -47,7 +53,7 @@ public final class QuestParser extends JsonCollectionParserFor { return new Pair(id, new Quest( id - , o.getString(JsonFieldNames.Quest.name) + , translationLoader.translateQuestName(o.getString(JsonFieldNames.Quest.name)) , stages_ , o.optInt(JsonFieldNames.Quest.showInLog, 0) > 0 , sortOrder