Перестановка порядка слов с помощью — КиберПедия 

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Перестановка порядка слов с помощью

2021-01-29 77
Перестановка порядка слов с помощью 0.00 из 5.00 0 оценок
Заказать работу

 

Иногда при переводах порядок слов, естественный для английского языка, не подходит в других языках. Например, на английском прилагательные идут перед определяемыми существительными, а на многих других языках – после. Таким образом, следующий код представляет проблему:

 

Здесь форматирующая строка, и неудачно включены в вызов. Однако, после перевода утверждение будет неверным, поскольку порядок аргументов не может быть изменен во время исполнения.

Чтобы обойти это, версия семейства POSIX (но не ISO С) допускает использовать в описателе формата указатель положения. Он принимает форму десятичного числа, за которым следует символ, сразу после начального символа. Например;

Указатель положения обозначает аргумент из списка, который следует использовать, отсчет начинается с 1 и не включает саму форматирующую строку. Этот пример выводит знаменитое сообщение '' в правильном порядке.

GLIBC и Solaris реализуют эту возможность. Поскольку это часть POSIX, если вашего поставщика Unix не реализует ее, она вскоре должна появиться.

За указателем положения могут следовать любые обычные флаги, указатели ширины полей и точности. Вот правила для использования указателей положения:

• Форма с указателем положения не может смешиваться с формой без нее. Другими словами, или каждый указатель формата включает указатель положения, или ни один его не включает. Конечно, может использоваться всегда.

• Если в форматирующей строке используется N ‑й аргумент, в этой строке должны использоваться также все аргументы до N. Соответственно, следующее неверно;

• Ссылка на определенный аргумент может быть сделана указателем положения несколько раз. Не позиционные спецификаторы формата всегда движутся через список аргументов последовательно.

Эта возможность не предназначена для непосредственного использования программистами приложений, она скорее для переводчиков. Например, перевод предыдущей форматирующей строки,, на французский мог бы быть:

 

(Даже этот перевод не совершенен: артикль «Le» имеет род. Подготовка программы к переводу трудная задача!)

 

Тестирование переводов в персональном каталоге

 

Коллекция сообщений в программе называется списком сообщений (message catalog). Этот термин применяется также к каждому из переводов сообщений на другой язык. Когда программа установлена, каждый перевод также устанавливается в стандартное место, где может во время исполнения найти нужный перевод.

Может оказаться полезным разместить переводы не в стандартном, а в другом каталоге, особенно для тестирования программы. Особенно на больших системах, у обычного пользователя может не быть необходимых разрешений для установки файлов в системные каталоги. Функция дает альтернативное место для поиска переводов:

 

 

Полезные каталоги включают '' для текущего каталога и. Может оказаться удобным также получить каталог из переменной окружения, подобно этому:

 

 должна быть вызвана до вызовов любой из функций из семейства. Мы увидим пример ее использования в разделе 13.3.8 «Создание переводов»

 

Подготовка интернационализированных программ

 

К настоящему моменту мы рассмотрели все компоненты, из которых состоит интернационализированная программа. Данный раздел подводит итоги.

1. Включите в свое приложение заголовочный файл, добавьте определения для макросов и в заголовочный файл, который включается во все ваши исходные файлы на С. Не забудьте определить именованную константу.

2. Вызовите соответствующим образом. Проще всего вызвать '', но иногда приложению может потребоваться быть более разборчивым в отношении используемых категорий локали.

3. Выберите для приложения текстовый домен и установите его с помощью.

4. При тестировании свяжите текстовый домен с определенным каталогом при помощи.

5. Используйте соответствующим образом, и флаг. Если нужна другая информация о локали, используйте, особенно в сочетании с.

6. Пометьте все строки, которые должны быть переведены, соответствующими вызовами или.

Хотя некоторые не следует так помечать. Например, если вы используете (см. раздел 2.1.2 «Длинные опции GNU»), вы, вероятно, не захотите, чтобы имена длинных опций были помечены для перевода. Не требуют перевода и простые форматирующие строки наподобие "", также как отладочные сообщения.

7. В нужных местах используйте (или ее варианты) для значений, которые могут быть 1 или больше 1.

8. Упростите жизнь для своих переводчиков, используя строки с полными предложениями вместо замены слов с помощью и. Например:

возникла ошибка

 

Это лучше, чем

возникла ошибка

 

 

Как только что показано, хорошей мыслью является включение комментария, сообщающего о намеренном использовании нескольких строк, чтобы упростить перевод сообщений.

 

Создание переводов

 

После интернационализации программы необходимо подготовить переводы. Это осуществляется с помощью нескольких инструментов уровня оболочки. Мы начнем с интернационализированной версии из раздела 6.1.4 «Преобразование разложенного времени в»:

 

Мы намеренно использовали, а не. Если наше приложение поставляется с отдельной копией библиотеки, тогда найдет ее, избежав использования системной копии. С другой стороны, если имеется лишь системная копия, она будет найдена, если локальной копии нет. Общеизвестно, что ситуация усложнена фактом наличия на системах Solaris библиотеки, которая не имеет всех возможностей версии GNU.

Переходя к созданию переводов, первым шагом является извлечение переводимых строк. Это осуществляется программой:

xgettext ‑‑keyword=_ ‑‑keyword=N_ \

‑‑default‑domain=echodate ch13‑echodate.с

Опции сообщает, что нужно искать макросы и. Программа уже знает, как извлекать строки из и ее вариантов, а также из.

Вывод называется переносимым объектным файлом. Имя файла по умолчанию, что соответствует текстовому домену по умолчанию. Опция обозначает текстовый домен для использования в имени выходного файла. В данном случае, файл назван. Вот его содержание:

 

Этот первоначальный файл используется повторно для каждого перевода. Таким образом, это шаблон для переводов, и по соглашению, для отображения этого факта он должен быть переименован с расширением (portable object template – переносимый объектный шаблон):

Mv echodate.ро echodate.pot

He владея свободно несколькими языками, мы решили перевести сообщения на свинский латинский. Следующим шагом является создание перевода. Это осуществляется копированием файла шаблона и добавлением к новой копии перевода:

Cp echodate.pot piglat.po

Vi piglat.po

Имя по соглашению должно быть язык, где язык является стандартным международным сокращением из двух или трех букв для обозначения языка. Иногда используется форма язык_страна: например, для португальского в Бразилии. Поскольку свинский латинский не является настоящим языком, мы назвали файл.[147] Вот содержание после добавления перевода:

 

 

Хотя можно было бы произвести линейный поиск в переносимом объектном файле, такой поиск был бы медленным. Например, в имеется примерно 350 отдельных сообщений, а в GNU Coreutils – свыше 670. Линейный поиск в файле с сотнями сообщений был бы заметно медленным. Поэтому GNU использует для быстрого поиска сообщений двоичный формат. Сравнение осуществляет, выдавая объектный файл сообщений:

msgfmt piglat.po ‑о piglat.mo

При сопровождении программы изменяются строки, используемые программой: добавляются новые, другие удаляются или изменяются. По крайней мере, может измениться положение строки в исходном файле. Таким образом, файлы переводов, вероятно, устареют. Программа объединяет старые файлы переводов с новым файлом. Затем результат может быть обновлен. Этот пример выполняет объединение и повторное компилирование:

msgmerge piglat.po echodate.pot ‑o piglat.new.po

Mv piglat.new.po piglat.po

Vi piglat.po

msgfmt piglat.po ‑o piglat.mo

Откомпилированные файлы помещаются в файл base locale textdomain. На системах GNU/Linux является. является обозначением языка, например, '', '' и т.д. является категорией локали; для сообщений это. является текстовым доменом программы, в нашем случае это. В качестве реального примера в находится перевод GNU Coreutils на испанский.

Функция изменяет в местоположении часть. В мы меняем ее на ''. Таким образом, нужно создать соответствующие каталоги и поместить туда перевод на свинский латинский:

mkdir ‑р en_US/LC_MESSAGES

cp piglat.mo en_US/LC_MESSAGES/echodate.mo

Должна использоваться реальная локаль[148]; мы «притворяемся» использующими "". Разместив перевод, устанавливаем соответствующим образом, скрещиваем пальцы и запускаем программу:

LC_ALL=en_US ch13‑echodate

 

 

Последнюю версию GNU можно найти в каталоге дистрибутива GNU.[149]

Этот раздел лишь слегка коснулся поверхности процесса локализации. GNU предоставляет множество инструментов для работы с переводами, и в особенности для облегчения поддержания современности переводов по мере развития исходного кода программы. Процесс ручного обновления переводов осуществим, но утомителен. Эта задача легко автоматизируется с помощью; в частности, GNU хорошо интегрируется для обеспечения этой возможности с Autoconf и Automake, снимая с программиста значительный груз по разработке.

Рекомендуем прочесть документацию GNU, чтобы больше узнать как об этих проблемах в частности, так и о GNU в общем.

 

 


Поделиться с друзьями:

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

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

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.021 с.