Локализация сложна. Это действительно сложно. Это не просто "pairs of words" => "Wortpaare"
, это намного сложнее. Большинство людей забывают, когда они смотрят на gettext и идут «Ух, уродливый» в том, что процесс локализации намного важнее технических деталей реализации. Это потому, что фактические переводчики, как правило, не являются программистами и, вероятно, даже не являются собственными. Это вызывает гораздо больше головных болей, чем вы думаете. gettext действительно старенький, протестирован в битве и имеет за собой огромную инструментальную цепочку, настроенную для поддержки этого процесса. Если вы хотите правильно работать с i18n и l10n, вам нужна мощная система. gettext - это то, что имеет поддержку из широкого спектра инструментов. [*]
В первую очередь вам нужна надежная система для переводимых строк extract . Не имея возможности автоматически и воспроизводимо извлекать переводимые строки из исходного кода, у вас есть гора работы для каждой новой строки, которую вы хотите перевести. В gettext, xgettext
делает это.
Затем вам понадобится инструмент для синхронизации извлеченных строк с уже существующими переводами таким образом, чтобы переводы не были потеряны и что, если это возможно, сохраняются только слегка измененные переводы. В gettext это делает msgmerge
.
Затем вам нужно добавить дополнительную информацию в строки. Вы хотите иметь возможность группировать их по категориям, «домену» и контексту, вы можете добавить комментарии для переводчика к исходному коду, и вы можете захотеть, чтобы переводчики могли добавлять комментарии к переводам. gettext поддерживает все это.
Далее вы хотите, чтобы формат файла имел хорошую поддержку из множества инструментов, поскольку вы можете отправлять свои файлы в Китай, чтобы перевести их туда. Причина, по которой вы можете отправить их внешним переводчикам, также является причиной того, что вам нужен хороший инструмент для слияния для слияния изменений, поскольку это может быть очень асинхронный процесс. Файлы PO очень хорошо поддерживаются, потому что gettext настолько стар. Существует много открытых и коммерческих инструментов, которые поддерживают процесс локализации на разных уровнях в зависимости от ваших конкретных потребностей.
Не стоит недооценивать задачу локализации, выбирать инструмент, который хорошо подходит для процесса и учиться Это. gettext - отличный инструмент, если, по общему признанию, не самый дружелюбный для новичков.
Для чего это стоит мое расширение gettext для Twig , что делает gettext для PHP еще лучше.
Вы можете либо иметь вновь вставленный идентификатор, который выводится на консоль SSMS, например:
INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')
Вы также можете использовать это, например, C #, когда вам нужно вернуть идентификатор к вашему вызывающему приложению - просто выполните SQL-запрос с помощью .ExecuteScalar()
(вместо .ExecuteNonQuery()
), чтобы прочитать результат ID
назад.
Или, если вы необходимо захватить вновь вставленный ID
внутри T-SQL (например, для дальнейшей последующей обработки), вам нужно создать переменную таблицы:
DECLARE @OutputTbl TABLE (ID INT)
INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID INTO @OutputTbl(ID)
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')
Таким образом, вы можете поместить несколько значений в @OutputTbl
и выполнять дальнейшую обработку. Вы также можете использовать «регулярную» временную таблицу (#temp
) или даже «настоящую» постоянную таблицу в качестве «целевой цели» здесь.
real persistent table
- это очень фантастично, потому что это означает, что вы можетеINSERT
информацию в таблицахTWO
одновременно. – gotqn 6 February 2015 в 10:13SCOPE_IDENTITY()
работает лучше для этого. – Derreck Dean 24 January 2018 в 22:06