GCC - The Complete Reference (537669), страница 50
Текст из файла (страница 50)
интернационализация ()п(егпа(юпайза(юп) 223 Создание нового файла ".ро" Если все нуждающиеся в переводе строки в тексте программы включены в вызовы функции деееехе (), то тогда следует построить файл, содержащий эти строки я ключевые слова, а также все необходимые им соответствия. Такой файл должен иметь формат, поддерживающий перевод необходимых строк в соответствии с кажлой предназначаемой локальной установкой.
Это дело начинается с применения утилиты хдеееехс для извлечения из исходных файлов текстовых строк в новый файл .ро и последующего их оформления. Па следуюшей команде из указанною программе хдесеехе файла всахсек. с будут выбраны все предназначенные для передачи функции деееехе() строки и помещены файл с именем медведев.ро: ь хдессехе ееекеек.с В файле иге в ваде в. ро после некоторого заголовка будут находиться такие строки: иедзгз "тьзе есх1пд м111 екепе1еее. иедеск Таблица 11.2.
Опции командной строки, распознаваемые программой хде11ех1 Вместо считывания исходного кода из файла программа получает его со стандартного устройства ввода. По этой опции из исходникое на языках С или С++ извлекаются есе строковые константы. То же, что -с. То же, что -и. Сокращенная форма опции --1епдпеде=с. — коа-сокямпке сед — каа-1осасзоп Используется для размещения е выводимом файле блока комментария с указанным ярлыком (сед). Сокращенная форма опции - -1епдиеде=с++. В ест передается строка для сообщения об охране авторских прае программного пакета. Эти права соответственна распространяются и на строки сообщений, извлекаемые из исходных текстов программ, входящих е этот пакет. Если эте опция не назначается, то по умолчанию строка имеет значение "Егее Во(лязге Еоипсетюп" (гАссоциеция свободно распространяемых программ" ).
-с сзд "с++ г-Еадух1дтГК-ЬО1ЕЕХ=ЕСК Выводимый файл будут иметь имя лете. ро (еместо применяемого по умолчанию иеееадея.ро ). См. также -о. Для завершения оформления этого файла необходимо, используя текстовый редактор, вместо пустой строки справа от ярлыка (гэга) мвдвсх ввести нужный пережи сообщения. Если исходник программы содержит несколько таких строк, та они все будут находиться в там же файле. Утилита хдеееехе может использоваться с несколькими языками праграммиромняя.
Она способна собирать строки из всех передаваемых ей файлов в один файл .ро, который может использоваться целым программным пакетом. Паддерживаеиые программой хдеееехе опции командной строки перечислены в таблице ) ).2. 224 Часть И. Использование Сборного Компилятора с)двсвввв Добавляет указанный в а1гвссогу каталог к списку каталогов, которые должны просматриваться при поиске указанных в команде исходных файлов.
-РасгвсСогз. То же, что -а. То же, что -о. Та же, что -х. То же, что -в. — аеввс1С-аова1п лввм — асгвсьогь=ахгвсгогу --ехс1сав-111е Ше --ехсгвск-в11 Упорядочивает выводимые строки в соответствии с расположением исходных файлов. При указании этой опции имена исходных файлов считываются из указанного файла 111в, а не из командной строки. То же, что -1, -1 111в --111вв-1гыв 11]в --1огсе-ро По этой опции выводимый файл создается дюке в том случае, когда не найдено ни одной такой строки, к которой может быть пРименен перевод. Отменяет вывод, определяемый опцией --соругсдьс-ьо1аес, в том числе и действующий по умолчанию. --соге1дв-ивет По этой опции хдессвхс показывает этот список опций и затем завершает работу.
То же, что -Ь. --Ье1р При записи файла .ро используются абзацы. То хсе, что -с, --1ааелт. --зо1а-ех1вк1сд -)с ьвуногаврвс -)сеунога ввувогаврвс -Ь лввв Название языка программирования входных файлов. Параметр лвтв может иметь такие значения: с, сс н оь5всс1тес, Ро, РугЬол, ь1вр, ввасвь].вр, 11ьсер, двтв,ви)с,'хсР, тс1, ввт или О1вае. То же, что -ь. --1ввдсвдв=авве -т [всг1од] Использует указанную строку всг1лд как приставку (префикс) для всех вхождений жвдвсг в выводимом файле. См. также -и. Использует указанную строку как окончание (суффикс) для всех вхождений ввдвсг в выводимом файле.
См. также -в. То же, что -т. -М [вегалд] --ввдвсг-рге11х[=всг1лд] --ввдвсс-вч111х [=всг1ад) То же, что -м. Включает в выводимый файл комментарии, показывающие имена исходных файлов, из которых взяты строки. Применяется по умолчанию. -л Опция указывает обьединять сообщения с уже существующими в перезаписываемом выходном файле. то же, что -1. При обРаботке входных файлов на языках С и С++ ввувогаврвс определяет дополнительные ключевые слова для извлечения строк. Поле )геуносаврес имеет формат свввассие, где оиа — порядковый номер аргумента функции, указанной в овеса.
Применяемыми по умолчанию сочетаниями являются дессвхс, адессвхсс2, асдессехс:2,сдвссвхсс 1, алдессехсс2,3, ассдеккехк и двььвхь оооо. При указании )свуногаврес умолчания не действуют. То хсе, что -Ь глава т(. интернационализация ((п(егпа(юпа(ьэа(юп) 225 Олива ммв Опция указывает не включать в выводимый файл комментарии, показывающие имена исходных файлов, из которых взяты строки. Опция указывает не разбивать длинные строки в выводимом файле. Имя для выходного файла (вместо применяемого по умолчанию вевеадев.рс]. См.
также -а, Отменяет включение в файл заголовка, обычна имеющего формат жвв1а Та же, что -р. То же, что -с. — сс-1ссаь1св — вс-икар — се1Г-Ьеаааг — сссрнг-Жгюазгесгогу — сасрис-Езза Еезе -р авгессогу Каталог, в котором будет помещен выводимый файл. Эта опция указывает применять сортировку строк вместо их обычного расположения, когда строки помещаются в файл в том порядке, в каком они находятся в исходных файлах.
То же, что -р. -асгь-Ьу-Е11а — всгг-сссрнг — вьг1ск То же, что -а, Указывает, что файл . рс должен записываться в строгом с форматом Опиогцгп. Такой формат не поддерживается РасшиРениями Ойц. Включить распознавание многоточий в исходниках на языке С. То же, чта мь с гг1вгарЬа По этой опции хвегкехг выводит сообщение о своей версии и заверсЪет работу.
То же, что -ч. -чагв1са -и ашвьег Назначает ширину страницы выводимого файла. Строки, превышающие допустимую длину, будут разбиваться, Тоже, что -и. — игаса псиЬег -х Еззе Указывает не извлекать вхо:кдения из указанного .рс или .рог файла. ь хдессехс -т' -6 всагсег всагсег.с Использование функций Яе11ех10 Помещение подлежащих переводу строк в аргумент вызова функции деееехе ( )— простейший способ разметки исходного текста программы для ее интернационали)злии. Бывают и такие ситуации, когда приходится применять несколько иной подход. Для решения ряда определенных проблем возможно применение еше несколькпх функций.
В к гякхаггс Одной из наиболее важных является опция -з. При ее применении из старой версия файла, ро в новую переносятся строки и их уже выполненный перевод. Это позжлыст обновлять файлы сообщений без потери уже сделанной работы. Например, по следующей команде будет считан файл веахеех.ро, и к существующей в нем информации будут дописаны только новые, не встречавшиеся ранее строки подлеищих переводу сообщений: 26 Часть 11. Использование Сборного Компилятора 2 Статические строки Далее предлагается пример, который показывает возможность динамического перевода во время выполнения программы строки, объявленной как начальное значение глобальной переменнои: /» всас1сггапв.с */ №впс1пае <1оса1е.Ь> №ьпс1пае <11Ыпг1.Ь> №свг1пе РАСКАОЕ »всагсег» №гтеггпе ьосаьепта »/пвг/вьаге/1оса1е» №сег1пе дегсехс поор(а) (а) сЬаг *д1Ы = дегаеве поор(»тМв тв а д1оЬа1 веагтс вгг1пд.
"] / [пе ша1п(1пс агдс,сЬаг »агдт[)) ( вес1оса1е(ЬС АЬЬ,»»]/ Ыпасехг<тошаьп(РАСКАдЕ,ЬОСАЬЕПтв]/ еехедоша1п(РАСКАое)/ рг1псг (»»»вхп",дессехс(д1Ы) ) / ] Функция деееехе поор() — макроопределение, передаюгцее строку без каких- либо действий нзд ней. При определении строки для перевода, хдесеехе увидела бы только имя этой функции-болванки и пропустила бы такую строку. Вследствии вызова деееехе () передается адрес нужной строки и при этом перевод происходит в том месте программы, где эта строка используется.
То есть перевод происходит так же, как происходит перевод строковой константы — аргумента функции хдесеехе (). Если глобальная строка используется в нескольких местах программы, то она будет переводиться при каждой ссылке на нее. Перевод строки, имеющейся в другом домене Если вам нужно применить перевод какой-нибудь строки из другого домена, то следует применить функцию гтдеееехе () и при вызове указать ей название другого домена. Например, в домене с именем Ьгдаша1п уже есть перевод для ключа "Ца11у ачеГада СассЬ". Тогда вам нужно применить функцию гтдегсехс () так адеььехг ("Ьггтошагп",»Па111г атегадв сассЬ »)/ Простое выполнение хдеееехс ( ) здесь не годится, потому что для перевода требуется указать другое расположение. Перевод из другого домена в указанной категории Функция гтсдеееехе (), как и <тдеесехс(), тоже делает возможнмм ПОЛуЧЕнИЕ перевода строки из другого домена, кроме того, она позволяет выбрать категорию для перевода.
Глава 11. Интернационализация ()п(етпайспв)павел) 227 В качестве категории указывается одна из констант локализационных установок, перечисленных в таблице 11.1. Например, можно применить такой вызов для перевода календарной даты в соответствии с установками интернационализации, действующими в домене, имеющем название )тгттоша1п: Псдеггехг ( шлгдсша1п", "12/04/03", ьс ттМв) Множественное число Метод пдеесахс () применяет формы множественного числа при выборе строп( дпя перевода. Функции передаются формы единственного и множественного числа слова вместе со степенью множественности. В некоторых языках слова имеют форму единственного числа для обозначения одного предмета и отдельные формы Множественного числа для двух предметов и для их количества, равного или превышающего три. Следующий пример может быть применен для перевода слова "1шаде" по отношению к количеству обозначаемых предметов, равном двум: пдеегехг("р1сгаге" ,"р1ссигев" , 2Ы; В этом примере процесс автоматического перевода требует правильного выбора точной формы множественного числа предназначаемого языка для обозначения двух предметов.
формы множественного числа из другого домена Функция дпдеееехе () действует так же, как и пдасеехе (), только она выполвпзт поиск перевода в другом домене. Пример вызова функции будет искать в довене вгйоша1п подходящую форму множественного числа перевода подписи для пары изображений: дпдеггехе(ппгттоша1п","р1сгпгее ,"р1сгигев" , 2Ь)т Формы множественного числа из другого домена в указанной категории Функция йспдесеехе() работает также как описанная выше т)пдесеехе (), за исключением того, что она ищет перевод, соответствующий определению назначенной категории локализации, Категории те же, что перечислены в таблице 1! .1, Слепуюший пример выполняет поиск в домене ))гдаша1п перевода формы множественного числа для обозначения двух изображений: Псядегеехг("Ьгосша1п", "Мг.