Help Us to Localize Tank Inspector

Got amazed by Tank Inspector? So did tankers all around the world. Tank Inspector is localized in English (US and UK) and Chinese (HAN-Simplified, HAN-Traditional and TW) when it’s born, and soon learnt to speak Korean, Russian, French, German and even more languages, with the kind help of our users. However, it is still eager for learning more languages. Being interested in bringing Tank Inspector to other language speakers? Here we go.

Localization

Localization is a term which means not only translation, but also adaption. For example, a translated sentence might be too long to be displayed in the user interface, while it fits pretty well in English. On the other hand, some design choices of the program, such as font, color and text size, might not be suitable for a certain language. The design and the translation has to adapt with each other to make a quality localization. Nonetheless, for most languages, translation is the majority of workloads.

Tank Inspector does not support language that has a flow direction from right to left.

Version Control

The publish process of Tank Inspector works on a two-version system: a frequently-released closed beta version which brings new, yet probably unstable features, and a public stable version for daily use. The users of the beta version is very limited (invited to use) and the text will be changed frequently, so there is no need to localize them. For the stable version, we would like to have all the localizations synchronized and published.

Attribute Requirements

Besides all the appreciations, we have several requirements for people who wants to help us in localization:

  • Time and will to provide continuous help
  • Fluent in English and the target language
  • Familiar with in-game terminology in the target language
  • Familiar with Excel or Google Docs Spreadsheet and an advanced text editor (Notepad++, EditPlus etc.)
  • Basic text encoding knowledge
  • Familiar with a 3-way merge program (Beyond Compare, WinMerge etc.)

Please contact us before starting your localization, because there might be someone already working on it – we don’t need two localizations for one language, so it is exclusive. However, you are still welcome for proofreading, which is also known as Localization Quality Assurance.

How to Do It

Tank Inspector utilizes the standard WPF internationalization method which is officially provided by Microsoft, that is, to use satellite resource assemblies. MSDN has detailed documents on this topic which however is more oriented to programmers, so we will make a quick start here.

A satellite resource assembly (hereinafter referred to as satellite) is a dll file located in a folder whose name is an abbreviation of a culture. For example, en means English, while en-GB means specifically the Britain English. A full list of language culture names could be found here.

After Tank Inspector is launched, it will look for and load the satellite corresponded to current system language. If such a satellite is not found, it will try to fallback to a parent culture. For example, a Chinese mainland user might have a system language of zh-CN (which means Chinese Language for the P.R.C.), however no such satellite could be found in Tank Inspector, so it will try to find its parent satellite, zh-CHS (Chinese Simplified). No luck again, the next fallback is zh-HANS (Hanzi Simplified) and it was eventually found. The ultimate fallback language is en-US.

A localized satellite could be generated with our localization SDK. You can find it in the download page. Here is how it works:

  1. Extract the localization SDK archive. 3 files you will see:
    • an executable locbaml.exe which will be used to extract the untranslated text and generate the satellite
    • a batch file extract-untranslated.bat which invokes locbaml.exe to extract the untranslated text
    • another batch file make-satellite.bat which  invokes locbaml.exe to generate the satellite
  2. Put these files in your Tank Inspector folder. Run extract-untranslated.bat, a file loc-untranslated.csv will be generated.
  3. Make a copy of loc-untranslated.csv with the name culturename-translated.csv, where culturename is the name of culture you are going to localize. For example, de-translated.csv for Germany, or de-AT-translated.csv for Austria Germany.
  4. Open culturename-translated.csv. It is a comma-split-value file, which could be opened by spreadsheet programs such as Office Excel, although there might be some problem for Excel on handling such file, we will talk about this later.
  5. You will see 7 columns (A-G) in this file, in which you may concern is column A, B and G:
    • Column A shows in which file this item(row) occurs
    • Column B shows to which element and property this item is applied. For example, L10N_RateOfFire:System.String.$Content means this item is applied to the $Content property of a System.String object named L10N_RateOfFire (L10N = LocalizatioN, 10 characters between L and N).
    • Column G is the value to be localized.
  6. Basically, you should localize all the text values in Column G, that is, values applied to $Content, $Text and $Tooltip, as well as Window.Titleproperty. Other values affects appearance and layout of the user interface, don’t touch them unless you know what you are doing.
    • Some text contains XML character entities, which starts with a ‘&’ and ends with a ‘;’ such as ' which stands for the apostrophe-quote mark. You have to use character entities too, if you want to use some special characters. The complete character entity list could be found at http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references.
    • Some text are quoted with quotation marks because there is comma ‘,’ inside it. If you are writing a sentence with commas, you should quote the sentence with quotation marks too.
  7. Save the localized file. For Excel, you should use the Save As command, and select Unicode Text(*.txt) file type. Otherwise, the unicode characters will be lost during saving. However, the saved file will be a table-split-value file, rather than a comma-split-value file we needed. You should open this file with a text editor, and replace all the delimiters from tables (\t) to commas(,). Save and change the extension name to .csv.
  8. Open make-satellite.bat with a text editor and modify the first line (set culture=culturename), replace culturename with the culture name you are working on (see step 3). Save the file.
  9. Run make-satellite.bat, a satellite in a folder with the specified culture name should be generated. Otherwise, there might be something wrong with your translated file. The error information LocBaml gave might not be verbose enough, you can send the localized file to us, so we can analyse and tell what’s going wrong.
  10. If the satellite is generated successfully, and your system is set to the corresponded language, you should see the localization result if you run Tank Inspector. Please do an extensive in-app effect check, some adaptive modification might be needed.
  11. Once you are done, send us the localized file, we will do some stability check, other localization volunteers will proofread it as well. We will make and release a language pack and/or integrate it into the next Tank Inspector stable release.

To be honest, the localization process is not that friendly. Still interested without being scared? Download the localization SDK now.

2 thoughts on “Help Us to Localize Tank Inspector

  1. When i oppen the translated.csv file all the values are in the A column and none is in the other ones (B+G). I guess i should translate only the last part of each line (the text inside the ” “)? I m using windows 8.1 and office 2013.

    • It could be an encoding issue, try change the encoding of the csv file (to UTF-8 or to ANSI, just have a try, but several characters will be missing in ANSI, nonetheless you can fix them later).
      Sure you can translate the last part directly (even in a text editor rather than in Excel), but it might be very error-prone.
      You can write to me at smellyriver.tankinspector@gmail.com on further questions so I can reply on time.

Leave a Reply