Transifex - a developer experience

Disappointing. I didn't think for a second that I'll say it, but so far my experience with transifex is really disappointing. If it wasn't for I would not bother with them actually.

First of all let me say that I value what they try to do! I know that it is not easy to satisfy everyone and I also understand that my disappointment is largely connected with the fact that I'm new to the platform. In the next few paragraphs I'll share my experience hoping that I can save you from losing 2 days in trying to upload your extension translation files to transifex. I also hope that this blog post will be of use to transifex and it will help them improve their system.


The registration at transifex was trivial. You have the option to register with twitter or facebook and you can be up and running in few seconds. The real problem starts with the setting up of the project. Once you click on "create new project" you are presented with a nice long field in which you can enter an url to your project source files and transifex will try to create a new project on the transifex network for you. Here the most important thing is to NOT make the presumption that transifex will fetch your language files and will add them automatically to your project. Like Jeremy here I thought that transifex will connect to my github project and download the .ini files from it. But that is not the case! It took me an hour to realize that transifex is not going to do this for me. Now if you ask me - the whole option to connect with your github project should be omitted! Why present me with it? Just to auto-fill the 6 form fields that you have to fill if you decide to not supply a github project???

Once you realize that transifex won't pull your project from github you just realize that you are screwed. Now you need to upload your source files and translations one by one - there is no option to select all files and to upload them at once. After staring at the screen for half an hour I decided that this cannot be! I'm not uploading 50 files one by one. I went back to the transifex website and started to thoroughly read the documentation. Chapter by chapter until I ended at the transiflex client! All right I thought - the panacea has been found! I'm not a big fan of command line utilities, but I manage to use them... So I downloaded the windows client, started it and went ahead with my first commands

 tx.exe init

After providing some more information in the console, the transifex client created a .tx folder that contained .config file. Great! But since we have to deal with joomla extension we have a lot of work to do... Somehow I managed to find this tutorial that saved me yet another hour of my life.

So I overwrote my .config file, mapped properly the language files like this:

file_filter = administrator/language/<lang>/<lang>.com_comment.ini
source_file = administrator/language/en-GB/en-GB.com_comment.ini
source_lang = en_GB
minimum_perc = 100

So, now we go again in the console and type:

tx.exe push -s

Transifex now tried to push my sources, but it failed to create them, because a type for my file was missing... (I wonder what the .ini ending means...) So after reading the documentation again I saw that there is a type parameter that I need to specify in my config. I finally ended up with the following file:

host =
lang_map = af_ZA: af-ZA, am_ET: am-ET, ar_AE: ar-AE, ar_BH: ar-BH, ar_DZ: ar-DZ, ar_EG: ar-EG, ar_IQ: ar-IQ, ar_JO: ar-JO, ar_KW: ar-KW, ar_LB: ar-LB, ar_LY: ar-LY, ar_MA: ar-MA, ar_OM: ar-OM, ar_QA: ar-QA, ar_SA: ar-SA, ar_SY: ar-SY, ar_TN: ar-TN, ar_YE: ar-YE, arn_CL: arn-CL, as_IN: as-IN, az_AZ: az-AZ, ba_RU: ba-RU, be_BY: be-BY, bg_BG: bg-BG, bn_BD: bn-BD, bn_IN: bn-IN, bo_CN: bo-CN, br_FR: br-FR, bs_BA: bs-BA, ca_ES: ca-ES, co_FR: co-FR, cs_CZ: cs-CZ, cy_GB: cy-GB, da_DK: da-DK, de_AT: de-AT, de_CH: de-CH, de_DE: de-DE, de_LI: de-LI, de_LU: de-LU, dsb_DE: dsb-DE, dv_MV: dv-MV, el_GR: el-GR, en_AU: en-AU, en_BZ: en-BZ, en_CA: en-CA, en_GB: en-GB, en_IE: en-IE, en_IN: en-IN, en_JM: en-JM, en_MY: en-MY, en_NZ: en-NZ, en_PH: en-PH, en_SG: en-SG, en_TT: en-TT, en_US: en-US, en_ZA: en-ZA, en_ZW: en-ZW, es_AR: es-AR, es_BO: es-BO, es_CL: es-CL, es_CO: es-CO, es_CR: es-CR, es_DO: es-DO, es_EC: es-EC, es_ES: es-ES, es_GT: es-GT, es_HN: es-HN, es_MX: es-MX, es_NI: es-NI, es_PA: es-PA, es_PE: es-PE, es_PR: es-PR, es_PY: es-PY, es_SV: es-SV, es_US: es-US, es_UY: es-UY, es_VE: es-VE, et_EE: et-EE, eu_ES: eu-ES, fa_IR: fa-IR, fi_FI: fi-FI, fil_PH: fil-PH, fo_FO: fo-FO, fr_BE: fr-BE, fr_CA: fr-CA, fr_CH: fr-CH, fr_FR: fr-FR, fr_LU: fr-LU, fr_MC: fr-MC, fy_NL: fy-NL, ga_IE: ga-IE, gd_GB: gd-GB, gl_ES: gl-ES, gsw_FR: gsw-FR, gu_IN: gu-IN, ha_NG: ha-NG, he_IL: he-IL, hi_IN: hi-IN, hr_BA: hr-BA, hr_HR: hr-HR, hsb_DE: hsb-DE, hu_HU: hu-HU, hy_AM: hy-AM, id_ID: id-ID, ig_NG: ig-NG, ii_CN: ii-CN, is_IS: is-IS, it_CH: it-CH, it_IT: it-IT, iu_CA: iu-CA, ja_JP: ja-JP, ka_GE: ka-GE, kk_KZ: kk-KZ, kl_GL: kl-GL, km_KH: km-KH, kn_IN: kn-IN, ko_KR: ko-KR, kok_IN: kok-IN, ky_KG: ky-KG, lb_LU: lb-LU, lo_LA: lo-LA, lt_LT: lt-LT, lv_LV: lv-LV, mi_NZ: mi-NZ, mk_MK: mk-MK, ml_IN: ml-IN, mn_CN: mn-CN, mn_MN: mn-MN, moh_CA: moh-CA, mr_IN: mr-IN, ms_BN: ms-BN, ms_MY: ms-MY, mt_MT: mt-MT, nb_NO: nb-NO, ne_NP: ne-NP, nl_BE: nl-BE, nl_NL: nl-NL, nn_NO: nn-NO, nso_ZA: nso-ZA, oc_FR: oc-FR, or_IN: or-IN, pa_IN: pa-IN, pl_PL: pl-PL, prs_AF: prs-AF, ps_AF: ps-AF, pt_BR: pt-BR, pt_PT: pt-PT, qut_GT: qut-GT, quz_BO: quz-BO, quz_EC: quz-EC, quz_PE: quz-PE, rm_CH: rm-CH, ro_RO: ro-RO, ru_RU: ru-RU, rw_RW: rw-RW, sa_IN: sa-IN, sah_RU: sah-RU, se_FI: se-FI, se_NO: se-NO, se_SE: se-SE, si_LK: si-LK, sk_SK: sk-SK, sl_SI: sl-SI, sma_NO: sma-NO, sma_SE: sma-SE, smj_NO: smj-NO, smj_SE: smj-SE, smn_FI: smn-FI, sms_FI: sms-FI, sq_AL: sq-AL, sr_BA: sr-BA, sr_CS: sr-CS, sr_ME: sr-ME, sr_RS: sr-RS, sv_FI: sv-FI, sv_SE: sv-SE, sw_KE: sw-KE, syr_SY: syr-SY, ta_IN: ta-IN, te_IN: te-IN, tg_TJ: tg-TJ, th_TH: th-TH, tk_TM: tk-TM, tn_ZA: tn-ZA, tr_TR: tr-TR, tt_RU: tt-RU, tzm_DZ: tzm-DZ, ug_CN: ug-CN, uk_UA: uk-UA, ur_PK: ur-PK, uz_UZ: uz-UZ, vi_VN: vi-VN, wo_SN: wo-SN, xh_ZA: xh-ZA, yo_NG: yo-NG, zh_CN: zh-CN, zh_HK: zh-HK, zh_MO: zh-MO, zh_SG: zh-SG, zh_TW: zh-TW, zu_ZA: zu-ZA
type = INI

file_filter = administrator/language/<lang>/<lang>.com_comment.ini
source_file = administrator/languageen-GBen-GB.com_comment.ini
source_lang = en_GB
minimum_perc = 100

Now doing tx.exe push -s actually worked! Hooray! Now let us do tx.exe push -t for the translations. Yea, everything in the console output looks ok, let us check if the translations were uploaded in the project. Bummer, they are not. Let us repeat tx.eve push -t - console output - ok, files in project? no! Hm, let us try with tx.exe push -t -f - again no positive result. Here I gave up for the day.

On next morning I had another look at my configuration file and I remembered that the documentation for the client states something about paths on windows. So I changed the slash / to backslash and guess what I was able to upload the translations! Ok, I admit - I'm partially to blame for the backslash problem, but I want to ask - why the ... didn't the client complain about it??? The output never mentioned anything about a wrong path and the sources were properly uploaded???

So, now that I have all this knowledge I thought that I can setup my next project and upload all my sources and translations in no time. Ok, I created the new project (this time I didn't make the mistake to go the github way), I created my new .config file - mapped everything properly with a backslash.

tx.exe push -s 

- my sources were pushed to the server - Everything worked fine. Now let us see the translations

tx.exe push -t 

here in the console I see again that we are uploading something! The console says: done. I go again to my project at transifex and bummer - no translations for my resources. The funny thing this time is that one of my resources got the proper translation, but all other resources are missing those translations.

And that's why dear reader I'm disappointed with transifex. It's really hard to use and I might be inpatient, but I wasted 2 days with this and I'm starting to get really annoyed.

Dear transifex team - if I've made something wrong you are more than welcome to use the comment form bellow and correct me! I just hope that you can fix those bugs and we can all go further.


Rate this blog entry:
Transifex - the tutorial for Joomla developers
Joomla 2.5 released