Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Localization

Boost , Boost.Regex 5.1.2 , Background Information

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Повышаю. Regex обеспечивает широкую поддержку локализации во время выполнения, используемая модель локализации может быть разделена на две части: front-end и back-end.

Фронтальная локализация имеет дело со всем, что видит пользователь — сообщениями об ошибках и синтаксисом регулярного выражения. Например, французское приложение может изменить [[:word:]] на [[:mot:]] и \w на \m. Модификация локала переднего конца требует активной поддержки со стороны разработчика, предоставляя библиотеке каталог сообщений для загрузки, содержащий локализованные строки. Локальность интерфейса зависит только от категории LC_MESSAGES.

Обратная локализация имеет дело со всем, что происходит после разбора выражения — другими словами, со всем, что пользователь не видит или не взаимодействует напрямую. Он имеет дело с преобразованием случая, коллацией и членством в классе персонажей. Бэкэнд-локаль не требует какого-либо вмешательства со стороны разработчика - библиотека будет получать всю информацию, необходимую для текущего местоположения, из базовой операционной системы / библиотеки времени выполнения. Это означает, что если пользователь программы не взаимодействует с регулярными выражениями напрямую — например, если выражения встроены в ваш код C++ — то явной локализации не требуется, так как библиотека позаботится обо всем за вас. Например, встраивание выражения [[:word:]]+ В вашем коде всегда будет совпадать целое слово, если программа запускается на машине с, например, греческим локалом, то она все равно будет соответствовать целому слову, но в греческих символах, а не в латинских. Бэкэнд-локальность зависит от LC_TYPE и LC_. Собрать категории.

Существует три отдельных механизма локализации, поддерживаемых Boost. Регекс:

Win32 localization model.

Это модель по умолчанию, когда библиотека компилируется под Win32 и инкапсулируется классом признаков w32_regex_traits. Когда эта модель действует, каждый объект basic_regex получает свой собственный LCID, по умолчанию это настройка по умолчанию пользователя, возвращенная GetUserDefaultLCID, но вы можете вызвать imbue на объекте basic_regex, чтобы установить его местоположение на какой-либо другой LCID, если хотите. Все настройки, используемые Boost. Regex приобретается непосредственно из операционной системы в обход библиотеки времени выполнения C. Фронтальная локализация требует ресурса dll, содержащего строковую таблицу с определяемыми пользователем строками. Класс признаков экспортирует функцию:

static std::string set_message_catalogue(const std::string& s);

который должен быть вызван строкой, идентифицирующей имя ресурса dll, прежде чем ваш код соберет какие-либо регулярные выражения (но не обязательно до того, как вы создадите какие-либо экземпляры basic_regex):

boost::w32_regex_traits<char>::set_message_catalogue("mydll.dll");

Библиотека обеспечивает полную поддержку Unicode под NT, под Windows 9x библиотека изящно деградирует — поддерживаются символы от 0 до 255, остальные рассматриваются как «неизвестные» графические символы.

C localization model.

Эта модель была отклонена в пользу локального языка C++ для всех компиляторов, не поддерживающих Windows. Эта локализация инкапсулирована классом признаков c_regex_traits, пользователи Win32 могут заставить эту модель вступить в силу, определив предпроцессорный символ BOOST_REGEX_USE_C_LOCALE. Когда эта модель действует, существует единая глобальная локальность, установленная setlocale. Все настройки приобретаются из вашей библиотеки времени выполнения, поэтому поддержка Unicode зависит от реализации вашей библиотеки времени выполнения.

Локализация переднего края не поддерживается.

Обратите внимание, что вызов setlocale делает недействительными все скомпилированные регулярные выражения, вызов setlocale(LC_ALL, "C") сделает эту библиотеку эквивалентной большинству традиционных библиотек регулярных выражений, включая версию 1 этой библиотеки.

C++ localization model.

Эта модель является стандартной для компиляторов, не относящихся к Windows.

Когда эта модель находится в действии, каждый экземпляр basic_regex имеет свой собственный экземпляр std::locale, класс basic_regex также имеет функцию участника imbue, которая позволяет локально задавать выражение в зависимости от ситуации. Локализация переднего конца требует каталога сообщений POSIX, который будет загружаться через std:: сообщения грань локации выражения, класс признаков экспортирует символ:

static std::string set_message_catalogue(const std::string& s);

который должен быть вызван строкой, идентифицирующей имя каталога сообщений, прежде чем ваш код соберет какие-либо регулярные выражения (но не обязательно до того, как вы создадите какие-либо экземпляры basic_regex):

boost::cpp_regex_traits<char>::set_message_catalogue("mycatalogue");

Обратите внимание, что вызов basic_regex<>::imbue сделает недействительным любое выражение, составленное в данном случае basic_regex.

Наконец, обратите внимание, что если вы создаете библиотеку с моделью локализации без по умолчанию, то соответствующий символ препроцессора (BOOST_REGEX_USE_CPP_LOCALE или BOOST_REGEX_USE_CPP_LOCALE) должен быть определен как при создании библиотеки поддержки, так и при включении boost/regexregex.boostcregex.hpp> в ваш код. Лучший способ обеспечить это - добавить #define к <boost/regex/user.hpp>.

Providing a message catalogue

Чтобы локализовать переднюю часть библиотеки, необходимо предоставить библиотеке соответствующие строки сообщений, содержащиеся либо в таблице строк ресурса dll (модель Win32), либо в каталоге сообщений POSIX (модели C++). В последнем случае сообщения должны отображаться в сообщении, установленном нулем каталога. Сообщения и их идентификаторы следующие:

Послание

id

Значение

Дефолтная стоимость

101

Персонаж начинал подвыражение.

102

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

")"

103

Персонаж используется для обозначения конца линии утверждения.

"$"

104

Персонаж используется для обозначения начала утверждения линии.

"^"

105

Персонаж используется для обозначения «соответствия любому выражению персонажа».

")"

106

Оператор повторения матча ноль или более раз.

"*"

107

Соответствие одного или нескольких операторов повторения.

"+"

108

Совпадение ноль или один оператор повторения.

"?"

109

Персонаж открывается.

110

Заключительный персонаж.

")"

111

Оператор чередования.

" |"

112

Сбежавший персонаж.

"\"

113

хеш-символ (в настоящее время не используется).

"#"

114

Оператор диапазона.

"-"

115

Функция открытия оператора повторения.

"{"

116

Оператор повторения закрывающий символ.

"}"

117

Цифровые символы.

"0123456789"

118

Персонаж, которому предшествует убегающий символ, представляет собой утверждение границы слова.

"b"

119

Персонаж, которому предшествует убегающий символ, представляет собой несловное пограничное утверждение.

"B"

120

Персонаж, которому предшествует персонаж побега, представляет собой утверждение границы слова-старта.

"<"

121

Персонаж, которому предшествует персонаж побега, представляет утверждение границы конца слова.

">"

122

Персонаж, которому предшествует персонаж побега, представляет собой любой символ слова.

"w"

123

Персонаж, которому предшествует персонаж побега, представляет собой символ без слов.

"W"

124

Персонаж, которому предшествует персонаж побега, представляет собой начало буферного утверждения.

"А"

125

Персонаж, которому предшествует персонаж побега, представляет собой конец буферного утверждения.

"'z"

126

Новый персонаж.

"\n"

127

Сепаратор запятой.

")"

128

Персонаж, которому предшествует персонаж побега, представляет собой символ колокола.

"a"

129

Персонаж, которому предшествует персонаж побега, представляет собой символ корма формы.

"f"

130

Персонаж, которому предшествует персонаж побега, представляет персонажа новой линии.

"n"

131

Персонаж, которому предшествует персонаж побега, представляет характер возвращения экипажа.

"r"

132

Персонаж, которому предшествует персонаж побега, представляет символ вкладки.

"t"

133

Персонаж, которому предшествует персонаж побега, представляет собой символ вертикальной вкладки.

"v"

134

Персонаж, которому предшествует персонаж побега, представляет собой начало шестидесятичной постоянной персонажа.

"x"

135

Персонаж, которому предшествует персонаж побега, представляет собой начало персонажа побега ASCII.

"c"

136

Характеристика толстой кишки.

":"

137

равный характер.

"="

138

Персонаж, которому предшествует персонаж побега, представляет характер побега ASCII.

"e"

139

Персонаж, которому предшествует персонаж побега, представляет любой персонаж нижнего регистра.

"l"

140

Персонаж, которому предшествует персонаж побега, представляет собой любой персонаж ненизшего случая.

"L"

141

Персонаж, которому предшествует персонаж побега, представляет любого персонажа верхнего регистра.

"u"

142

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

"U"

143

Персонаж, которому предшествует персонаж побега, представляет собой любой пространственный персонаж.

"c"

144

Персонаж, которому предшествует персонаж побега, представляет собой любой некосмический персонаж.

"S"

145

Персонаж, которому предшествует персонаж побега, представляет собой любой цифровой персонаж.

"d"

146

Персонаж, которому предшествует персонаж побега, представляет собой любой нецифровой персонаж.

"D"

147

Персонаж, которому предшествует персонаж побега, представляет оператора конечной котировки.

"E"

148

Персонаж, которому предшествует персонаж побега, представляет оператор начальной котировки.

"Q"

149

Персонаж, которому предшествует символ спасения, представляет собой Unicode, объединяющий последовательность символов.

"X"

150

Персонаж, которому предшествует персонаж побега, представляет собой любого отдельного персонажа.

"S"

151

Персонаж, которому предшествует убегающий символ, представляет собой конец буферного оператора.

"Z"

152

Персонаж, которому предшествует персонаж побега, представляет собой утверждение продолжения.

"G"

153

Персонаж, которому предшествует (? указывает на нулевую ширину, отрицаемую передним взглядом).

!

Пользовательские сообщения об ошибках загружаются следующим образом:

Сообщение

ID сообщения об ошибке

По умолчанию строка

201

REG_NOMATCH

«Нет матча»

202

REG_BADPAT

Недействительное регулярное выражение

203

REG_ECOLLATE

«Недействительный коллационный характер»

204

REG_ECTYPE

«Недействительное имя класса символов»

205

REG_EESCAPE

«Трейлинговая обратная реакция»

206

REG_ESUBREG

"Недействительная обратная ссылка"

207

REG_EBRACK

«Непревзойденный [или [^]»

208

REG_EPAREN

«Непревзойденный (или \()»

209

REG_EBRACE

«Непревзойденный»

210

REG_BADBR

"Недействительное содержание \{\}"

211

REG_ERANGE

"Недействительный конец диапазона"

212

REG_ESPACE

Память исчерпана

213

REG_BADRPT

«Недействительное предшествовавшее регулярному выражению»

214

REG_EEND

«Преждевременный конец регулярного выражения»

215

REG_ESIZE

«Регулярное выражение слишком большое»

216

REG_ERPAREN

"Непревзойденный" или "\"

217

REG_EMPTY

«Пустое выражение»

218

REG_E_UNKNOWN

Неизвестная ошибка

Пользовательские имена классов символов загружаются следующим образом:

Сообщение

Описание

Эквивалентное имя класса по умолчанию

300

Название класса символов для буквенно-цифровых символов.

"alnum"

301

Название класса символов для алфавитных символов.

«альфа»

302

Название класса символов для управляющих символов.

"cntrl"

303

Название класса символов для цифровых символов.

«цифра»

304

Название класса персонажей для графических персонажей.

"график"

305

Название класса символов для символов нижних регистров.

"ниже"

306

Название класса символов для печатаемых символов.

«печать»

307

Название класса символов для знаков препинания.

«пункт»

308

Название класса персонажей для космических персонажей.

"пространство"

309

Название класса символов для символов верхнего регистра.

"верхний"

310

Название класса персонажей для шестидесятичных персонажей.

"xdigit"

311

Название класса символов для пустых символов.

«бланш»

312

Название класса символов для слов.

"слово"

313

Название класса символов для символов Unicode.

"единый код"

И, наконец, пользовательские имена элементов коллаборации загружаются, начиная с идентификатора 400 сообщения, и заканчивая, когда первая загрузка после этого выходит из строя. Каждое сообщение выглядит примерно так: «tagname string», где tagname — это имя, используемое внутри [.tagname.], а string — фактический текст коллатингового элемента. Обратите внимание, что значение коллатингового элемента используется для преобразования строк в числа - если вы замените это другим значением, то это будет использоваться для парсинга строк - например, используйте символ Unicode 0x0660 для [.zero.], если вы хотите использовать арабо-индийские цифры Unicode в ваших регулярных выражениях вместо латинских цифр.

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


PrevUpHomeNext

Статья Localization раздела Boost.Regex 5.1.2 Background Information может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Background Information ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 04:53:18/0.0096650123596191/1