About the only way to add a language that isn't supported by the game is to make a mod to replace one of the existing languages. This has the side effect preventing online play with anyone who doesn't have the mod (for online play all players in a match must have the same exact wads).
To replace a language you have to change entries in all of the TEXT_PERMANENT XML files for the language being replaced as well as changing the LOCALISED_TEXT for that language in all cards. The mod will have to have a relatively high order attribute in the header to ensure it can override all WADs that it replaces TEXT_PERMANENTs or cards in. This also means that any bug fix mods (like my Core Fixes) will need to be integrated into the language mod if you want the bug fixes to be present (otherwise the buggy cards with the changed language will override the bug fixed cards that haven't had the language changed in them). This also means that if you want to change the language for any mod, you will need to either override that mod or incorporate it into your language mod.
If you override a file with a new version then you need to make sure that all strings in that file for the language you are changing have been changed. If you forget to change a string it will show in the original language (same thing if you forget a file). If you delete strings from a TEXT_PERMANENT file then in-game those strings will show up as the string keys in all caps (not pleasant to look at).
Current Language Grid:
TEXT_PERMANENT
Index - LOCALISED_TEXT language code - Language
03 - en-US - English
04 - fr-FR - French
05 - es-ES - Spanish
06 - de-DE - German
07 - it-IT - Italian
09 - jp-JA - Japanese
10 - ko-KR - Korean
11 - ru-RU - Russian
12 - pt-BR - Portuguese (Brazil)
15 - zh-CN - Chinese (Simplified)
16 - zh-HK - Chinese (Traditional)
Unfortunately we can't use the empty/unused indexes and just add a language (the game code would likely need to be updated to make use of them and we don't have the source).
So to change English to the Arabe language you would change any string in index 3 in all the TEXT_PERMANENT files and you would change the text in all LOCALISED_TEXT tags for all cards to the new language (LanguageCode values would remain unchanged).
For example this:
- Code: Select all
<Row>
<Cell ss:StyleID="s62"><Data ss:Type="String">AI_HINT_DECLARE_BLOCKERS</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String"></Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">Declare these blockers</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">Déclarer ces bloqueurs</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">Declarar estos bloqueadores</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">Diese Blocker deklarieren</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">Dichiara queste creature bloccanti</Data></Cell>
<Cell ss:Index="9" ss:StyleID="s62"><Data ss:Type="String">このクリーチャーでブロック</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">이 방어자를 지정</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">Объявить этих блокирующих</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">Declarar estes bloqueadores</Data></Cell>
</Row>
Would change to this:
- Code: Select all
<Row>
<Cell ss:StyleID="s62"><Data ss:Type="String">AI_HINT_DECLARE_BLOCKERS</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String"></Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">New Arabe text goes here</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">Déclarer ces bloqueurs</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">Declarar estos bloqueadores</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">Diese Blocker deklarieren</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">Dichiara queste creature bloccanti</Data></Cell>
<Cell ss:Index="9" ss:StyleID="s62"><Data ss:Type="String">このクリーチャーでブロック</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">이 방어자를 지정</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">Объявить этих блокирующих</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">Declarar estes bloqueadores</Data></Cell>
</Row>
And this:
- Code: Select all
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Creature spells can’t be cast.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Les sorts de créature ne peuvent pas être lancés.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[No pueden lanzarse hechizos de criatura.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Es können keine Kreaturenzauber mehr gewirkt werden.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Le magie creatura non possono essere lanciate.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[クリーチャー呪文は唱えられない。]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[생물 주문은 발동할 수 없다.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Заклинания существ не могут быть разыграны.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[As mágicas de criatura não podem ser conjuradas.]]></LOCALISED_TEXT>
Would change to this:
- Code: Select all
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[New Arabe text would go here.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Les sorts de créature ne peuvent pas être lancés.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[No pueden lanzarse hechizos de criatura.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Es können keine Kreaturenzauber mehr gewirkt werden.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Le magie creatura non possono essere lanciate.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[クリーチャー呪文は唱えられない。]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[생물 주문은 발동할 수 없다.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Заклинания существ не могут быть разыграны.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[As mágicas de criatura não podem ser conjuradas.]]></LOCALISED_TEXT>
Granted, you could do the same with any of the existing languages instead of English, I just used that one as the example.
This is not a project I would recommend trying to attempt alone (get several people who are able and willing to help and split up the work).