Я работаю над плагином для WordPress и хочу убедиться, что весь отображаемый текст подготовлен для локализации. У меня возникли проблемы с локализацией текста, который находится внутри массива.
Например, у меня есть следующий код внутри класса
var $control_type_default = array(
array(
'key' => 'automatic',
'value' => 'Automatic'
)
);
var $control_types = array(
array(
'key' => 'manual',
'value' => 'Manual'
)
);
function process_class_vars()
{
// Add default control type value to beginning of control types array
$this->control_types = array_merge($this->control_type_default, $this->control_types);
// Prepare values for localization
$temp_array = array();
foreach ($this->control_types as $control_type_array => $values)
{
$temp_array[] = array(
'key' => $values['key'],
'value' => __($values['value'], 'my_plugin')
);
}
$this->control_type = $temp_array;
}
Обратите внимание, что функция process_class_vars вызывается конструктором. Как видите, я пытаюсь передать значение в массиве через __()
функцию (в качестве примечания я делаю это с помощью функции «process_class_vars», а не при первоначальном создании массивов, потому что я передаю эту функцию, когда я создал массивы изначально выдало ошибку).
Проблема в том, что когда я запускаю это через генератор.po, строки «Автоматически» и «Вручную» полностью пропускаются. Как правильно обработать эти значения?
Вы не можете сделать это, по крайней мере, не из вспомогательного приложения перевода с графическим интерфейсом, потому что они настроены на получение строк из стандартных функций, таких как
__()
и_e
т. д., они не могут читать переменные (включая строковые переменные)Вместо этого попробуйте:
Но если
$control_types
это статическая переменная из класса, вы не сможете присвоить возвращаемое значение функции как ее значение. Почему бы не сделать ее обычной переменной внутри метода process_class_vars()? Или просто сделайте это функцией:Итак, я думаю, вы говорите, что я не могу автоматизировать создание файла.po для строк внутри массива. Я должен был бы вручную сделать это? Шаблон программирования разработан по замыслу. Я хотел бы иметь массив как переменную статического класса; однако, когда я делаю то, что вы предлагаете в вашем первом примере кода, я всегда получаю сообщение об ошибке. Затем я не хочу настраивать массив, как вы предлагаете, потому что мне нравится иметь значения по умолчанию как ключ «0». Это облегчает поиск позже в коде. Я согласен, что называть их «ключом» и «значением» немного странно. В тот момент я не мог придумать ничего лучше.
не для строк — для переменных любого типа, внутри чего угодно, не только массивов. Но вы можете попробовать добавить эти строки в файл.po и скомпилировать его вручную. Должно работать, но как-то некрасиво
Есть ли лучший способ сделать это тогда? Причина, по которой я собрал значения «автоматически» и «вручную», заключается в том, что я использую их для создания переключателей на странице настроек, а затем для проверки ввода при отправке страницы. Для меня чище собрать эту информацию в одном месте, чем повторять ее снова и снова. Вы бы справились с этим по-другому?
Вы можете вернуть этот массив из статической функции. Это действительно одно и то же. Или сериализуйте этот массив и определите его как константу. Вероятно, есть много других способов сделать это…
Спасибо! Я думаю, что это, наконец, щелкнуло. Я заставил его работать, просто определив переменную класса, а затем используя функцию для присвоения массива переменной. Таким образом, я не использую
__()
оператор foreach внутри, что позволяет мне обернуть каждую метку в функцию и сделать ее доступной для генератора.po. Спасибо!