It is beautifully described in the docs how to translate static text using translation files.

As the client has no access to that file and managing a php array is not what I want them to do, I am looking for a way to make edits to the translation file feasible directly in the Control Panel.

This would allow me to set things up in the template and then hand off the actual translation work to someone else.

Yes, you probably have to write a plugin for that. But can you edit the files from a plugin? Is there any API or service available that might help?


I'm pretty new to Craft but I'll tell you what I'd try anyway for fun.

I'd create a "Translations" assets source that would hold files like es.csv.

Then, in craft/translations/es.php, I'd run through that CSV and build the array Craft wants and return it.


$path = $_SERVER['DOCUMENT_ROOT'].'/../craft/translations/translations.csv';
$delimiter = ';';
$skip_rows = 1; //skip header rows
$primary_locale_column = 0; //set primary locale column
$this_locale_column = 1; //set secondary locale column for this `lang.php` file

$translations = array();
$translations_file = fopen($path, 'r');

if ($translations_file) {
    while(($translation = fgetcsv($translations_file, 1024, $delimiter)) !== FALSE) {
        if($skip_rows != 0) { $skip_rows--; continue; }
        $translations[$translation[$primary_locale_column]] = $translation[$this_locale_column];

return $translations;

This is totally untested.

  • Wow Bill, this is what I'd call a creative answer! :) Thanks. Will definitely try that (so you don't have to, hehe). A csv is without a doubt better then a php-array, but actually I was hoping for some nice html form or sth. Thanks again! – carlcs Jun 15 '14 at 2:52
  • No problem! Hopefully it can help you get to a solution you want. – Bill Criswell Jun 15 '14 at 3:10
  • That's a very clever solution! I'm curious to hear if this works... Please let us know @ChristianSeelbach! – Lindsey D Jun 15 '14 at 3:14
  • Just tested this and it works like a charm, Bill & @Lindsey! – carlcs Aug 6 '14 at 8:43
  • 1
    Very nice side effect of this technique is, that you can now manage all your translations in one csv file. Made some edits to the code to make this more easy. Hope you didn't mind, Bill! – carlcs Aug 6 '14 at 9:40

I assume this is for a language that the CP hasn't been translated into, yet?

If so, maybe the better solution here is to help us get the CP translated into that language at which point we'll officially start supporting it in future releases. We're currently managing our translations on PhraseApp (http://phraseapp.com) and gladly accept contributions.

  • Ouups Brad, didn't talk about stings of the CP but static stings in the template being translated with |translate filter. Added a link to make this clearer. Sometimes having trouble to articulate what I want in english O.o ! – carlcs Jun 15 '14 at 2:35
  • Ahh... no worries. I can guarantee you that your English is far superior my attempt at your native language. – Brad Bell Jun 15 '14 at 2:38
  • lol you speak german? – carlcs Jun 15 '14 at 2:41
  • 2
    Ich bin ein Berliner! – Brad Bell Jun 15 '14 at 2:48
  • definitely a bun -- though I had a quite educated man assure me that what John Kennedy said was 'perfectly fine'. For the spirit of it, unquestionably. We forget too easily, under our own propaganda -- of certain parties. – narration_sd Jun 15 '14 at 3:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.