Colloc is a collaborative platform to manage the localizations for iOS and Android using a Google Document.
Basically, you can define all the localization strings of your project in a user-friendly google spreadsheet document as it is shown in the image.
Then, by runing a script you can export all the strings for all languages to iOS and/or Android format.
There is only one file needed: the colloc.php
file. Therefore the options are:
- Download the
colloc.php
file manually and add it to your project. - Use the Cocoa Pod to get the file:
pod 'Colloc', :git => 'https://github.com/mobilejazz/Colloc.git'
Create a new Google spreadsheet document and configure it as follows:
- The first column is used to store the keys of your strings. Keys must have only characters
A-Z
,a-z
,0-9
and_
. Using any other character spaces or-
may result in a building failure in your project. - The first row of the first column must contain the title
Key
to indicate to the script that column contains keys. - For each language you want to support, fill a new column with its translations.
- Use the first row of a language-column to indicate the name of language:
English
,Spanish
, etc. Check on section 4 the supported languages. - Adding the char
#
in the first row of a column will indicate the script to ignore that column. Use this to add "comments" columns, "char counts" columns, etc. - Adding the char
#
as the first character of the first column of a row will indicate the script to ignore that row. Use this to ignore a specific key with its translations. - The
#
char can be used inside translations. - To add placeholders in your strings (for adding in runtime numbers, strings, ...) use the conventions listed in the table below. Colloc will take care to convert them to the platform-specific (iOS/Android) standard.
Type | Colloc | Example Key | Example Translation |
---|---|---|---|
string | %@ | ls_user_name | My username is %@ |
integer | %d | ls_user_age | My age is %ld |
float | %f | ls_city_distance_meters | The city is %fm away |
float precision | %.2f | ls_number_two_decimals | A number with two decimals: %.2f |
- Create a "generic" set of translations to handle generic strings: "done", "save", "back", "cancel", "dismiss", etc.
- It is a good practice to use a reverse domain notation to define the names of your keys. This will be useful to group them by module or category and to find them when using Xcode autocompletion.
- Also, it is a very good pratcie to start all your keys with a prefix. For example "tr_" or "ls_" (from translation and localized string).
For example:
ls_generic_done
ls_generic_save
ls_generic_cancel
[...]
ls_profile_title
ls_profile_user_name
ls_profile_user_description
ls_profile_edit_user_name_placeholder
ls_profile_edit_user_description_placeholder
[...]
The colloc.php
script needs the Google spreadsheet exported as a .tsv
file. You can use directly a local .tsv
file or retrieve the Google spreadsheet exporting URL path.
To get the exporting to .tsv
URL just open the spreadsheet and select "File" > "Download as" > "Tab-spearated values (.tsv)". Your browser will download then the document. Then open the downloads manager and copy the download link from it.
To export to iOS just create a new bash script and execute the colloc.php
file with the appropiate arguments.
For example:
#!/bin/sh
##
# The Google Document .tsv file path.
# In this example we are using a local file. However you can point directly to the .tsv export of a google doc file.
# To get the url just export your spreadsheet in tsv format and retrieve the download url from your browser.
GDOC_PATH="<THE_URL_TO_THE_GOOGLE_SPREADSHEET_EXPORTED_AS_TSV>"
##
# The colloc script path from the pod path.
##
COLLOC_PATH="../../Pods/Colloc/colloc.php"
OUTPUT_FOLDER_NAME="." # Put the localization files in the same folder as the script
OUTPUT_TYPE="100" #100 for iOS export
exec "php" "$COLLOC_PATH" "$GDOC_PATH" "$OUTPUT_FOLDER_NAME" "$OUTPUT_TYPE"
When executing this script it will generate all the en.lproj
, es.lproj
, etc. containing the Localizable.strings
files for each defiend language. Add them to your Xcode project and you are ready to go.
It is a good practice to create a Languages folder in your Xcode project and add inside the the custom script as well as all the Localizable.string
generated files.
Also, Colloc will generate an auto-generated Localization.h
file that includes defininitions of all translation entries:
#define <my_key> NSLocalizedString(@"my_key",nil)
Import this file in your .pch
project file. This way, you can easily use your localized strings. Otherwise, import the file in your preferred classes.
Becasue we are generating #define
statements, Xcode will provide autocompletion when using them:
For a easier usage, create a new Target in your Xcode project with the script above as a build phase. Then just by runing the schema corresponding to that target you will be able to update the localization files from the spreadsheet values.
To export to iOS just create a new bash script and execute the colloc.php
file with the appropiate arguments.
For example:
#!/bin/sh
##
# The Google Document .tsv file path.
# In this example we are using a local file. However you can point directly to the .tsv export of a google doc file.
# To get the url just export your spreadsheet in tsv format and retrieve the download url from your browser.
GDOC_PATH="<THE_URL_TO_THE_GOOGLE_SPREADSHEET_EXPORTED_AS_TSV>"
##
# The colloc script path from the pod path.
##
COLLOC_PATH="../../Pods/Colloc/colloc.php"
OUTPUT_FOLDER_NAME="." # Put the localization files in the same folder as the script
OUTPUT_TYPE="010" #010 for Android export
exec "php" "$COLLOC_PATH" "$GDOC_PATH" "$OUTPUT_FOLDER_NAME" "$OUTPUT_TYPE"
When executing this script it will generate the Android localization files for all languages. Just import them to your project and you are ready to go.
If you want to export in both iOS and Android in the same script, you must set the OUTPUT_TYPE
to 110
.
OUTPUT_TYPE="110" #110 for iOS and Android export
Currently, Colloc only supports the following languages:
Language | ISO639 |
---|---|
English | en |
Spanish | es |
Catalan | ca |
German | de |
French | fr |
Italian | it |
Portuguese | pt |
Dutch | nl |
Swedish | sv |
Arabic | ar |
Polish | pl |
Portuguese | pt |
Russian | ru |
Turkish | tr |
Chinese | zh |
Greek | el |
To use colloc with a different language, just use in the first row of the language-column the ISO639 language code (colloc translates the Language name to the ISO630 if available, otherwise uses the available language name as the language code).
Copyright 2015 Mobile Jazz SL
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.