NAnt и MSBuild является самыми популярными инструментами для автоматизации сборки в .NET , и можно найти обсуждение там профессионалов/недостатков каждого в вопросе о Переполнении стека Лучший инструмент сборки.NET .
Лучше всего использовать функцию spritf (). Затем вы должны использовать нотацию printf для обработки динамического содержимого в ваших строках. Вот функция, которую я нашел здесь некоторое время назад, чтобы легко справиться с этим для вас:
function translate()
{
$args = func_get_args();
$num = func_num_args();
$args[0] = gettext($args[0]);
if($num <= 1)
return $args[0];
return call_user_func_array('sprintf', $args);
}
Теперь, например, 1, вы хотите изменить строку на:
%s poked %s
Которую вы должны ввести в функцию translate () следующим образом :
<?php echo translate('%s poked %s', $user1, $user2); ?>
Вы бы проанализировали все функции translate () с помощью poEdit. а затем переведите строку «% s poked% s» на любой желаемый язык, не изменяя строковые заполнители % s . Они будут заменены при выводе функцией translate () с user1 и user2 соответственно. Вы можете прочитать больше о sprintf () в Руководстве по PHP для более продвинутого использования.
Для проблемы №2. Вам нужно будет создать статический файл, который poEdit сможет анализировать, содержащий имена категорий. Например, "misctranslations.php":
<?php
_('Cars');
_('Trains');
_('Airplanes');
Затем пусть poEdit проанализирует misctranslations.php. Тогда вы сможете вывести перевод названия категории, используя Php echo gettext ($ data ['name']); ?>
Чтобы построить немного на том, какой знак сказал ... единственная проблема с вышеупомянутым решением заключается в том, что статический список должен всегда поддерживаться вручную, и если вы добавите новую строку перед всеми остальными Или вы полностью измените существующий, мягкий, который вы используете для перевода, могут запутать новые строки, и вы можете потерять несколько переводов.
Я на самом деле пишу статью об этом (слишком мало времени, чтобы закончить его в любое время!) Но мой предложенный ответ идет что-то подобное:
GetText позволяет хранить номер строки, что строка появляется в коде Внутри файла .po. Если вы измените строку полностью, редактор .po узнает, что строка не новая, но это старая (благодаря номеру строки).
Мое решение для этого - написать сценарий, который считывает базу данных и создает статический файл со всеми строками GetText. Большая разница в растворе Mark заключается в том, чтобы иметь первичный ключ (позвоните IT ID) в базе данных сопоставить номер строки в новом файле. В этом случае, если вы полностью измените один оригинальный перевод, линии все еще одинаковы, и ваш переводчик мягкий будет распознавать строки.
Конечно, там могут быть новее и более интеллектуальные редакторы.
Мои 2 цента.
@Julian
Я думаю, что ваш подход не сработает на практике. Представьте, что вы перемещаете какую-то функцию по коду. Номер строки будет другим, также может отличаться имя файла.
Я думаю, что единственный разумный способ управлять изменением идентификаторов перевода - это попытаться найти похожие идентификаторы в вашем .po-файле. Редактор может показать предложение по объединению нового текста перевода с существующим, если они очень похожи и в сохраненном номере строки в вашем коде нет строки перевода.