Using IDs as translation source

Default way of translating content in Yii is to use English as a source language. It is quite convenient but there's another convenient way some developers prefer: using IDs such as

How to do it

Using keys is very easy. In order to do it, specify sourceLanguage as key in your message bundle config and then set forceTranslation to true:

'components' => [
    // ...
    'i18n' => [
        'translations' => [
            'app*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                //'basePath' => '@app/messages',
                'sourceLanguage' => 'key', // <--- here
                'forceTranslation' => true, // <--- and here
                'fileMap' => [
                    'app' => 'app.php',
                    'app/error' => 'error.php',

Note that you have to provide translation for the application language (which is en_US by default) as well.

How it works

Setting sourceLanguage to key makes sure no language will ever match so translation will always happen no matter what.