Did you check whether you language file actually is being loaded? You can dump all loaded lang-lines using something like ```\Debug::dump(\Lang::$lines)```. If you don't find anything for the 'en2' key, then your file isn't loaded in the first place (you can also check if its being loaded if you add something like ```logger(\Fuel::L_DEBUG, __FILE__);``` before the return statement in your lang file).
Second thing worth checking might be that you are actually having a lang-line for ```en2.test.something``` by changing its value to something different than "Plop", too. It helps in finding it if there's different values to look for ;)
'language_fallback' => array('en', 'en2'), // Fallback language when file isn't available for default language I managed to do it but this is not the right way.
There is only one language active at any given point, and you indeed have a language to fall back to.
Your fallback language should only be one, and should be your default one, the language file set that is 100% complete. It's a bit pointless to have multiple ones, if 'en' is complete, 'en2' will never be used. But it will be loaded, so it's only wasting processing time and memory.
Normally you develop the application in one language, your own language. The language files for this language are (or should be) always complete, and you use this language as the fallback.
The primary language it the default the end-user of the application will see. This could be the same language, it could be something else. Your application could also contain logic to allow the end-user to change it, to select a preference.
When making translations you copy the fallback language (which should be complete) to a second language folder, and you start translating.