#php #string
#php #строка
Вопрос:
Я пытался создать файл строковых литералов для PHP, чтобы я мог хранить все свои строки в одном файле.
Мне было интересно, было ли хорошей практикой делать что-то вроде:
class Literals
{
const String1 = "Hello";
const String2 = "World!";
//... (up to 100 literals)...
}
И затем где-нибудь в моем коде я мог бы назвать это как:
$hello = Literals::String1;
Это хорошая практика?
Комментарии:
1. Это не сильно отличается от обычных старых текстовых констант, за исключением того, что у вас более громоздкий синтаксис. Есть ли цель позже перевести эти строки? (Если да: избегайте. Используйте gettext или любое другое решение без идентификаторов мнемонических строк.)
Ответ №1:
Это зависит от того, что вы собираетесь делать со строками. Если вы собираетесь отображать их пользователю, то, конечно, это простой способ интернационализации, хотя вам захочется взглянуть на что-то более продвинутое, если вы собираетесь много этим заниматься. Если вы просто собираетесь использовать их для ключей ассоциативного массива, имен столбцов базы данных или других внутренних вещей, тогда нет, просто держите их встроенными.
Ответ №2:
Надеюсь, вы на самом деле не называли их String1…StringN 🙂
Если для локализации я лично предпочел бы этот (используемый Apple):
В коде используйте что-то вроде:
<h1><?php localize("Homepage","String for the homepage") ?></h1>
.
function localize($key,$help='') {
//do a lookup of the key and if not found use the key itself
}
Затем вы можете использовать синтаксический анализатор, чтобы найти все строки и создать ссылочный перевод:
$strings = array(
/** String for the homepage */
'Homepage' => 'Homepage'
);
Преимущество этого в том, что версия на основном языке всегда будет работать, и при необходимости могут быть добавлены другие переводы.
Недостатком является то, что вам нужен анализатор для поиска всех строк.
Комментарии:
1. я делал похожие вещи, но всегда вызывал имя функции как-то короче, потому что мне надоело его вводить. например, l ($key, $help =»); также неплохо иметь способ принудительно отображать ошибки, если отсутствует ключ, вместо того, чтобы всегда использовать сам ключ по умолчанию, поскольку иногда небольшая опечатка может привести к тому, что текст не будет переведен, и исправить ошибку не так-то просто