хранение переводов строк

uid

Новичок
Собственно, есть два стула подхода, не могу определиться с выбором одного из них.
1. Хранить все переводы в одном файле(json, xml, etc) и при каждом запросе загружать его в память целиком.
Плюсы: после преобразования в массив обращение к строкам будет максимально быстрым.
Минусы: если строк много, скрипту надо будет больше рамы, и парсинг будет занимать много времени.

2. Аналогично первому варианту, но после первого распарсивания записывать все данные в хранилище наподобие redis и дергать строки по одной оттуда при каждом обращении.
Плюсы: требует мало памяти, парсинг файла не происходит при каждом запросе, огромное кол-во фраз вообще никак не скажется на производительности.
Минусы: оверхед на обращения к хранилищу.

Какой способ более правильный?
 

weregod

unserializer
есть третий, хранить в php-коде и делать require '...';
и сделайте замеры, что там с памятью, что со скорострельностью, сначала попрофилируйте свой проект сами
 

uid

Новичок
есть третий, хранить в php-коде и делать require '...';
и сделайте замеры, что там с памятью, что со скорострельностью, сначала попрофилируйте свой проект сами
Хранилище особой роли не играет, речь идет о самой архитектуре. Думаю обойтись без неймспейсов, т.е. сливать содержимое всех файлов переводов в один массив и потом в этом большом массиве искать нужные значения. Проблема в том, что разворачивать такой массив данных в память при каждом запросе - довольно дорогая операция сама по себе. Ладно если фраз 100-200, а если 10-20к?
 

uid

Новичок
Алсо, массив будет кэшироваться куда-то, это само собой. Проблема в том, что он все равно целиком окажется в памяти в процессе выполнения. Думаю сделать фабрику с выбором хранилища и написать несколько адаптеров под редиску, gettext и т.д.
 

weregod

unserializer
если есть 10-20k, всё равно замеры сделайте с учётом примитивной реализации, будет с чем сравнивать, применяя другие решения
 

uid

Новичок
Кстати, подкиньте кто-нибудь интересных примеров реализации изменения словоформ(склонение, род, число, etc) в зависимости от переданных аргументов. В симфони и кохане такого функционала не нашел, может, в менее известных есть? И как разруливать ситуации, когда в исходном языке смена формы не нужна(%s must be string), а в языке, на который осуществляется перевод, нужна(%s должна/должен/должно быть строкой)?
 

fixxxer

К.О.
Партнер клуба
Ишь, чего захотел. :) Нет такого, конечно, это надо было бы с собой словарь таскать и лексический анализатор.

Формулируй так, чтобы было без разницы, или разбивай на несколько фраз.

С числом - ngettext.
 

uid

Новичок
Ишь, чего захотел. :) Нет такого, конечно, это надо было бы с собой словарь таскать и лексический анализатор.

Формулируй так, чтобы было без разницы, или разбивай на несколько фраз.

С числом - ngettext.
Для форм у меня собственный простенький велосипедик есть, меня устраивает. Ладно, невозможно так невозможно.
 
Сверху