Если вы храните текст в текстовых файлах, то это выглядит так:
Это основная структура папок для языка:
-lang
-en
-fr
-jp
etc
каждая подпапка, en, fr ... содержит одинаковые файлы, одинаковые переменные с разными значениями.
Например, в lang / en / links.txt
Вы бы
class txtLinks
{
public static $menu="Menu";
public static $products="Show products";
....
class txtErrors
{
public static $wrongUName="This user does not exists";
....
Затем, когда загружается скрипт, вы делаете
if(en)
define(__LANG,'en')
if(fr)
define(__LANG,'fr')
...
Тогда
include('lang'.__LANG.'what ever file you want')
Тогда это фрагмент вашего php-скрипта:
echo txtLink::$menu etc...
Если вы идете по базе данных так, как вы делаете по аналогии, где вместо файлов у вас есть таблицы.
Таким образом, у вас есть абсолютная свобода, потому что вы можете передать английские файлы человеку, который говорит, скажем, на французском, и он может заполнить значения на французском, не требуя знания программирования вообще.
А вам самим все равно, какой язык будет добавлен или удален позже.
А если вы работаете с mvc, вы можете разделять языковые файлы в соответствии с контроллерами, чтобы не загружать огромный текстовый файл.