After we released the app translation we needed to create an interface for people to translate the app for us.

I looked at the different online apps that give you an interface and storage for your translations. Some will even translate for you either programmatically or with their employees or people they contract with.

locize.com
poeeditor.com
lokalise.com
gengo.com

What we decided to do was put together a simple interface of our own within our app. We had customers interested in translating the app for us which was a blessing as we have many orthodontic specific words.

The interface consists of three columns. Original translation, current translation, and new translation.

New translations are saved as json.

JSON Format

{
    "[english string]":{
        "translation": "[user submitted translation]",
        "programming_languages": "[one of php|js (we have two sets of basefiles so not all go to the browser)]"
        "archived": {
            "translation": "[An old translation replaced by translator]",
            "programming_languages": [
                "[same as above]"
            ],
            "datetime_moved_to_basefiles": "[unix time stamp we saved it]"
        }
    }
}

Example JSON

{
    "# of Line Items": {
        "translation": "Nº de itens",
        "programming_languages": [
            "php"
        ]
    },
    "$0.00 per rx received;": {
        "translation": "R$0.00 por rx recebido",
        "programming_languages": [
            "php"
        ]
    },
    "$1.29 per patient over 100": {
        "translation": "R$1.29 por paciente acima de 100",
        "programming_languages": [
            "php"
        ]
    }
}

Once the translator has told us they are finished with a good chunk or all of the translations I run a php script that processes through the new translations and replaces them in our current language basefiles for that language. We can then test the new translations on our sandbox servers eventually pushing it to production.

The UI for the translator then shows their new translations as the current translations, there is a date added as the last time the translation was saved and the right hand new translation column is empty again.

It isn't fancy, but it does the job. Just this week (it's April 2022 right now) I set up a user in Brazil to translate into Portuguese.