Python локализация строк: Работа со строками python на примерах ~ PythonRu

Содержание

Как выполнить строку, содержащую код Python в Python?

используя exec и eval в Python очень неодобрительно.

есть лучшие альтернативы

из верхнего ответа (акцент мой):

для утверждения, используйте exec.

когда вам нужно значение выражения, использовать eval.

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

С альтернативы exec / eval?

установить и получить значения переменных с именами в строках

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

вместо этого лучше использовать dict.

это не идиоматические

от http://lucumr.pocoo.org/2011/2/1/exec-in-python/ (Курсив мой)

Python не PHP

не пытайтесь обойти идиомы Python, потому что некоторые другие языки делают это по-другому. Пространства имен в Python и просто потому что это дает вам инструмент exec Это не означает, что вы должны использовать этот инструмент.

опасно

от http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html (Курсив мой)

таким образом, eval не является безопасным, даже если вы удалите все глобалы и встроенные!

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

.

Итак, можно ли сделать eval безопасным? Трудно сказать. На данный момент я думаю, что вы не можете причинить никакого вреда, если не можете использовать двойные подчеркивания, поэтому, возможно, если вы исключите любую строку с двойными подчеркиваниями, вы в безопасности. Возможно…

трудно читать и пойми!—14—>

от http://stupidpythonideas.blogspot.it/2013/05/why-evalexec-is-bad.html (Курсив мой):

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

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

Конкатенация строк в Python — примеры объединения

Конкатенация — это метод соединения строк вместе для формирования новой строки.

Ниже приведены методы для выполнения конкатенации строк в Python:

  1. Используя оператор +
  2. Используя метод join()
  3. Используя оператор %
  4. Используя функцию
    format()
  5. Literal String Interpolation
  6. Используя StringIO из IO Module
  7. Используя оператор конкатенации +=

1. Конкатенация строк с использованием оператора +

Синтаксис: строка1 + строка2

str1 = 'Safa'
str2 = 'Mulani'

result = str1 + str2

print(result)

Выход: SafaMulani

2. Объединение строк с использованием метода join()

Синтаксис: join (строка1, строка2)

str1 = 'Safa'
str2 = 'Mulani'

print(" ". join([str1, str2]))

Вывод: Safa Mulani

3. Объединение строк с использованием оператора%

Синтаксис:% (строка1, строка2)

str1 = 'Safa'
str2 = 'Mulani'
result = "%s %s" % (str1, str2)
print('Concatenated String =', result)


Выход: Concatenated String = Safa Mulani

4. С использованием функции format()

Синтаксис: формат (строка1, строка2)

str1 = 'Safa'
str2 = 'Mulani'
res = "{} {}".format(str1, str2)
print('Concatenated String=', res)


Вывод: Concatenated String= Safa Mulani

5. Конкатенация строк с использованием интерполяции буквальных строк

Версии Python 3.6+ позволяют нам использовать f-строку для конкатенации строк, введенную в Literal String Interpolation.

Синтаксис: f ‘{строка1} {строка2}’

str1 = 'Safa'
str2 = 'Mulani'
res = f'{str1} {str2}'
print('Concatenated String =', res)

Вывод: Concatenated String = Safa Mulani

6. Объединение с использованием StringIO из модуля ввода-вывода

from io import StringIO
 
result = StringIO()
 
result.write('Safa ')
 
result.write('Mulani ')
 
result.write('Engineering ')
  
print(result.getvalue())

Вывод: Safa Mulani Engineering

7. Использование оператора конкатенации + =

Синтаксис: строка1 + = строка2

str1 = 'Safa '
 
str2 = 'Mulani'
 
str1 += str2
 
print(str1)

Вывод: Safa Mulani

Строки. Урок 19 курса «Python. Введение в программирование»

Мы уже рассматривали строки как простой тип данных наряду с целыми и вещественными числами и знаем, что строка – это последовательность символов, заключенных в одинарные или двойные кавычки.

В Python нет символьного типа, т. е. типа данных, объектами которого являются одиночные символы. Однако язык позволяет рассматривать строки как объекты, состоящие из подстрок длинной в один и более символов. При этом, в отличие от списков, строки не принято относить к структурам данных. Видимо потому, что структуры данных состоят из более простых типов данных, а для строк в Python нет более простого (символьного) типа.

С другой стороны, строка, как и список, – это упорядоченная последовательность элементов. Следовательно, из нее можно извлекать отдельные символы и срезы.

>>> s = "Hello, World!"
>>> s[0]
'H'
>>> s[7:]
'World!'
>>> s[::2]
'Hlo ol!'

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

Важным отличием от списков является неизменяемость строк в Python. Нельзя перезаписать какой-то отдельный символ или срез в строке:

>>> s[-1] = '.'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support 
item assignment

Интерпретатор сообщает, что объект типа str не поддерживает присвоение элементам.

Если требуется изменить строку, то следует создать новую из срезов старой:

>>> s = s[0:-1] + '.'
>>> s
'Hello, World.'

В примере берется срез из исходной строки, соединяется с другой строкой. Получается новая строка, которая присваивается переменной s. Ее старое значение при этом теряется.

Методы строк

В Python для строк есть множество методов. Посмотреть их можно по команде dir(str), получить информацию по каждому – help(str.имя_метода). Рассмотрим наиболее интересные из них.

Методы split() и join()

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

>>> s = input()
red blue orange white
>>> s
'red blue orange white'
>>> sl = s.split()
>>> sl
['red', 'blue', 'orange', 'white']
>>> s
'red blue orange white'

Список, возвращенный методом split(), мы могли бы присвоить той же переменной s, т. е. s = s.split(). Тогда исходная строка была бы потеряна. Если она не нужна, то лучше не вводить дополнительную переменную.

Метод split() может принимать необязательный аргумент-строку, указывающей по какому символу или подстроке следует выполнить разделение:

>>> s.split('e')
['r', 'd blu', ' orang', ' whit', '']
>>> '40030023'.split('00')
['4', '3', '23']

Метод строк join() выполняет обратное действие. Он формирует из списка строку. Поскольку это метод строки, то впереди ставится строка-разделитель, а в скобках — передается список:

>>> '-'.join(sl)
'red-blue-orange-white'

Если разделитель не нужен, то метод применяется к пустой строке:

>>> ''.join(sl)
'redblueorangewhite'

Методы find() и replace()

Данные методы строк работают с подстроками. Методы find() ищет подстроку в строке и возвращает индекс первого элемента найденной подстроки. Если подстрока не найдена, то возвращает -1.

>>> s
'red blue orange white'
>>> s.find('blue')
4
>>> s.find('green')
-1

Поиск может производиться не во всей строке, а лишь на каком-то ее отрезке. В этом случае указывается первый и последний индексы отрезка. Если последний не указан, то ищется до конца строки:

>>> letters = 'ABCDACFDA'
>>> letters.find('A', 3)
4
>>> letters.find('DA', 0, 6)
3

Здесь мы ищем с третьего индекса и до конца, а также с первого и до шестого. Обратите внимания, что метод find() возвращает только первое вхождение. Так выражение

letters.find('A', 3) последнюю букву ‘A’ не находит, так как ‘A’ ему уже встретилась под индексом 4.

Метод replace() заменяет одну подстроку на другую:

>>> letters.replace('DA', 'NET')
'ABCNETCFNET'

Исходная строка, конечно, не меняется:

>>> letters
'ABCDACFDA'

Так что если результат надо сохранить, то его надо присвоить переменной:

>>> new_letters = letters.replace('DA', 'NET')
>>> new_letters
'ABCNETCFNET'

Метод format()

Строковый метод format() уже упоминался при рассмотрении вывода на экран с помощью функции print():

>>> print("This is a {0}. It's {1}."
... .format("ball", "red"))
This is a ball. It's red.

Однако к print() он никакого отношения не имеет, а применяется к строкам. Лишь потом заново сформированная строка передается в функцию вывода.

Возможности format() широкие, рассмотрим основные.

>>> size1 = "length - {}, width - {}, height - {}"
>>> size1.format(3, 6, 2.3)
'length - 3, width - 6, height — 2.3'

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

>>> size2 = "height - {2}, length - {0}, width - {1}"
>>> size2.format(3, 6, 2.3)
'height - 2.3, length - 3, width - 6'

Кроме того, аргументы могут передаваться по слову-ключу:

>>> info = "This is a {subj}. It's {prop}."
>>> info.format(subj="table", prop="small")
"This is a table. It's small."

Пример форматирования вещественных чисел:

>>> "{1:.2f} {0:.3f}".format(3.33333, 10/6)
'1.67 3.333'

Практическая работа

  1. Вводится строка, включающая строчные и прописные буквы. Требуется вывести ту же строку в одном регистре, который зависит от того, каких букв больше. При равном количестве преобразовать в нижний регистр. Например, вводится строка «HeLLo World», она должна быть преобразована в «hello world», потому что в исходной строке малых букв больше. В коде используйте цикл for, строковые методы upper() (преобразование к верхнему регистру) и lower() (преобразование к нижнему регистру), а также методы isupper() и islower(), проверяющие регистр строки или символа.

  2. Строковый метод isdigit() проверяет, состоит ли строка только из цифр. Напишите программу, которая запрашивает с ввода два целых числа и выводит их сумму. В случае некорректного ввода программа не должна завершаться с ошибкой, а должна продолжать запрашивать числа. Обработчик исключений try-except использовать нельзя.

Примеры решения и дополнительные уроки в android-приложении и pdf-версии курса

Работа со строками в Python: литералы — Питошка


Строки в Python — упорядоченные последовательности символов, используемые для хранения и представления текстовой информации, поэтому с помощью строк можно работать со всем, что может быть представлено в текстовой форме.

Это первая часть о работе со строками, а именно о литералах строк.

Литералы строк

Работа со строками в Python очень удобна. Существует несколько литералов строк, которые мы сейчас и рассмотрим.

Строки в апострофах и в кавычках

S = 'spam"s'
S = "spam's"

Строки в апострофах и в кавычках — одно и то же. Причина наличия двух вариантов в том, чтобы позволить вставлять в литералы строк символы кавычек или апострофов, не используя экранирование.

Экранированные последовательности — служебные символы

Экранированные последовательности позволяют вставить символы, которые сложно ввести с клавиатуры.

Экранированная последовательность Назначение
\n Перевод строки
\a Звонок
\b Забой
\f Перевод страницы
\r Возврат каретки
\t Горизонтальная табуляция
\v Вертикальная табуляция
\N{id} Идентификатор ID базы данных Юникода
\uhhhh 16-битовый символ Юникода в 16-ричном представлении
\Uhhhh… 32-битовый символ Юникода в 32-ричном представлении
\xhh 16-ричное значение символа
\ooo 8-ричное значение символа
\0 Символ Null (не является признаком конца строки)

«Сырые» строки — подавляют экранирование

Если перед открывающей кавычкой стоит символ ‘r’ (в любом регистре), то механизм экранирования отключается.

S = r'C:\newt.txt'

Но, несмотря на назначение, «сырая» строка не может заканчиваться символом обратного слэша. Пути решения:

S = r'\n\n\\'[:-1]
S = r'\n\n' + '\\'
S = '\\n\\n'

Строки в тройных апострофах или кавычках

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

>>> c = '''это очень большая
... строка, многострочный
... блок текста'''
>>> c
'это очень большая\nстрока, многострочный\nблок текста'
>>> print(c)
это очень большая
строка, многострочный
блок текста

Это все о литералах строк и работе с ними. О функциях и методах строк в следующей статье.

Python. Выражение, строки и отступы

Пост написан на основе части 3.2 книги Intermediate Python. Obi Ike-Nwosu.

Программа на Python состоит из логических строк ограниченных токеном NEWLINE. Каждая логическая строка эквивалентна простому оператору. Составные операторы формируются из нескольких логических строк.

Логическая строка создаётся из одной или нескольких физических строк используя явные или не явные правила объединения строк. Физическая строка — это последовательность символов завершающаяся символами перевода строки (end-of-line sequence). Python неявно рассматривает физические строки как логические, устраняя необходимость в точке с запятой для разделения выражений. Однако точка с запятой может использоваться для разделения одной физической строки на несколько логических:

Несколько физических строк в явном виде объединяются в одну логическую символом «\»:

>>> name = «Obi Ike-Nwosu» >>> cleaned_name = name.replace(«-«, » «). \ … replace(» «, «») >>> cleaned_name ‘ObiIkeNwosu’ >>>

>>> name = «Obi Ike-Nwosu»

>>> cleaned_name = name.replace(«-«, » «). \

… replace(» «, «»)

>>> cleaned_name

‘ObiIkeNwosu’

>>>

Физические строки соединяются неявно, без использования символа продолжения строки («\»), когда выражение находится в тройных строковых кавычках, заключено в скобки (...), [...], или {...}.

Python содержит два типа операторов.

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

simple_stmt ::= expression_stmt | assert_stmt | assignment_stmt | augmented_assignment_stmt | pass_stmt | del_stmt | return_stmt | yield_stmt | raise_stmt | break_stmt | continue_stmt | import_stmt | global_stmt | nonlocal_stmt

simple_stmt ::= expression_stmt

            | assert_stmt

            | assignment_stmt

            | augmented_assignment_stmt

            | pass_stmt

            | del_stmt

            | return_stmt

            | yield_stmt

            | raise_stmt

            | break_stmt

            | continue_stmt

            | import_stmt

            | global_stmt

            | nonlocal_stmt

Составные операторы занимающие несколько логических строк. Они включают в себя выражения циклов while и for. Общий синтаксис составных операторов:

Пошаговый классификатор на Python – CODE BLOG

Добрый день, уважаемые читатели! Темой нашей сегодняшней статьи стал пошаговый классификатор, реализованный на чистом Python, использующий в качестве основы модель sklearn, а для вычислений NumPy.

Подпишись на группу Вконтакте и Телеграм-канал. Там еще больше полезного контента для программистов.

А на моем YouTube-канале ты найдешь обучающие видео по программированию. Подписывайся!

Как работает классификатор на Python

Суть работы алгоритма довольно проста. Мы берём первую метку класса из всех, и преобразовываем набор данных следующим образом:

  • все образцы, принадлежащие к выбранному классу, отныне относятся к классу 1
  • все образцы, которые не принадлежат к выбранному классу будут относится к классу 0

Каждый раз мы будем проделывать такую операцию с разными метками классов, кроме «последней».

Интерфейс

В нашем классе мы реализуем программный интерфейс sklearn, а именно методы:

  • fit — обучение (досл. адаптация) модели под обучающие данные
  • prediсt — предсказание по определённому образцу
  • score — вычислить долю верных предсказаний на определённом наборе образцов

Начало работы

Ниже приведён список всех модулей, которые нам необходимы:

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

Разберёмся по порядку:

  • copy.copy — т. к. наш классификатор основан на слабом ученике, то нам необходимо копировать модель, чтобы обучить новую.
  • numpy — нам понадобится несколько функций из этой библиотеки. Также основой наших вычислений станет np.array.
  • sklearn.datasets — отсюда мы возьмём наборы данных, на которых будем испытывать реализуемый алгоритм.
  • sklearn.train_test_split — функция «разбора» набора данных на обучающую и проверочную выборки.
  • sklearn.LogisticRegression — первый слабый ученик, который станет основой нашего алгоритм (название может сбить Вас с толку. Логистическая регрессия — алгоритм классификации 🙂 ).
  • sklearn.neural_network — второй слабый ученик для классификатора.

Реализация классификатора

Обучение

Конструктор классификатора будет принимать лишь один аргумент — класс, в котором реализован алгоритм классификации, который мы будем обучать несколько раз:

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

Метод, отвечающий за обучение модели, выглядит так:

  • classes — хранит метки классов

Далее мы перебором по всем меткам обучаем алгоритм. С помощью выбора по маске (true_X = X[y == cl]), мы выбираем «положительные» и «отрицательные» образцы и обучаем новую модель на них. Здесь могут смутить только функции из модуля numpy.

  • np.vstack — просто соединяет массивы вертикально, т. е. просто добавляет строки из второго массива в первый.
  • np.concatenate — объединяет два одномерных массива в один (только здесь, подробнее про эту функцию вы можете почитать здесь).

В конце выставляем булевое поле True и возвращаем сам классификатор для возможности создания цепного интерфейса.

Предсказание классификатора

Здесь всё просто. Мы проходим циклом по всем моделям алгоритма: если она предсказывает 1, то мы возвращаем нужную метку; в противном случае продолжаем.

В конце возвращаем последнюю метку: она вернется, только если все модели «забраковали» текущий образец.

Точность алгоритма

Метод score работает так: он принимает набор образцов и меток к ним, а затем вычисляет соотношение правильно предсказанных меток к их общему кол-ву.

Да-да, метод score также принимает параметр измерения: в процентах или как обычная точность модели (от 0 до 1).

Тестирование классификатора

Мы протестируем наш алгоритм на двух наборах данных: всем известном Iris, а также на наборе Breast Cancer. Схема общая: инициализируем класс, предварительно передав в конструктор модель sklearn, разбиваем набор на обучающие и проверочные выборки и узнаём точность модели.

Iris

Как мы можем заметить, наш алгоритм с логистической регрессией без гиперпараметризации в виде слабого ученика показывает точность 93%. Довольно неплохо, но можно лучше.

Breast Cancer

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

Заключение

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

  • мы так и не реализовали булевое поле fitted. Подумайте, где бы оно могло пригодиться.
  • нашу модель нельзя сохранить в какой-то файл. Реализуйте метод сохранения классификатора.

Весь код из статьи можно найти здесь.

Также рекомендую прочитать статью Нейросеть за пять минут! Is it real?! Подпишитесь на группу ВКонтакте, Telegram и YouTube-канал. Там еще больше полезного и интересного для разработчиков.

Похожее

22,2. locale — Услуги интернационализации — документация Python 2.7.18

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

Модуль locale реализован поверх модуля _locale , который, в свою очередь, использует реализацию локали ANSI C.

Модуль locale определяет следующие исключения и функции:

исключение локаль. Ошибка

Исключение возникает, когда локаль передана в setlocale () не является признал.

локаль. setlocale ( категория [, locale ])

Если указан locale , а не None , setlocale () изменяет локаль настройка для категории .Доступные категории перечислены в данных описание ниже. locale может быть строкой или итерацией из двух строк (код языка и кодировка). Если это итерация, она преобразуется в языковой стандарт. имя, используя механизм определения псевдонимов локали. Пустая строка определяет пользовательский настройки по умолчанию. Если изменение локали не удается, исключение Возникает ошибка . В случае успеха возвращается новый параметр локали.

Если locale опущен или None , текущая настройка для категории — вернулся.

setlocale () не является потокобезопасным в большинстве систем. Приложения обычно начать с звонка

 импорт локали
locale.setlocale (locale.LC_ALL, '')
 

Устанавливает языковой стандарт для всех категорий по умолчанию пользователя (обычно указанный в переменной среды LANG ). Если языковой стандарт не были изменены после этого, использование многопоточности не должно вызывать проблем.

Изменено в версии 2.0: Добавлена ​​поддержка повторяемых значений параметра locale .

локаль. localeconv ()

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

Категория

Ключ

Значение

LC_NUMERIC

'десятичная_точка'

Знак десятичной точки.

'группировка'

Последовательность цифр, указывающих что относительное расположение ',000_sep ' — это ожидается. Если последовательность прекращено с CHAR_MAX , не более группировка выполняется. Если последовательность заканчивается 0 , размер последней группы неоднократно использовался.

'тыс_сеп'

Знак, используемый между группами.

LC_MONETARY

'int_curr_symbol'

Международный символ валюты.

'currency_symbol'

Условное обозначение в местной валюте.

'p_cs_precedes / n_cs_precedes'

Является ли символ валюты предшествует значению (для положительный соотв.отрицательный ценности).

'p_sep_by_space / n_sep_by_space'

Является ли символ валюты отделены от значения пробел (для положительного соотв. отрицательные значения).

'mon_decimal_point'

Десятичная точка, используемая для денежные значения.

'frac_digits'

Количество знаков после запятой используется в локальном форматировании денежные значения.

'int_frac_digits'

Количество знаков после запятой используется в международных форматирование денежных величин.

'mon_thousands_sep'

Разделитель групп, используемый для денежные значения.

'mon_grouping'

Эквивалент «группировка» , используется для денежных значений.

'позитивный_знак'

Символ, используемый для аннотации положительное денежное выражение.

'отрицательный_знак'

Символ, используемый для аннотации отрицательная денежная ценность.

'p_sign_posn / n_sign_posn'

Положение знака (для положительный соотв. отрицательный значения), см. ниже.

Все числовые значения могут быть установлены на CHAR_MAX , чтобы указать, что нет значение, указанное в этой локали.

Возможные значения для 'p_sign_posn' и 'n_sign_posn' приведены ниже.

Значение

Пояснение

0

Валюта и стоимость окружены круглые скобки.

1

Знак должен предшествовать значению и символ валюты.

2

Знак должен следовать за значением и символ валюты.

3

Знак должен непосредственно предшествовать значение.

4

Знак должен следовать сразу за значение.

CHAR_MAX

В этой локали ничего не указано.

локаль. nl_langinfo ( опция )

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

Функция nl_langinfo () принимает один из следующих ключей. Наиболее описания взяты из соответствующего описания в GNU C библиотека.

локаль. CODESET

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

локаль. D_T_FMT

Получить строку, которая может использоваться как строка формата в течение раз.strftime () в представляют дату и время в зависимости от локали.

локаль. D_FMT

Получить строку, которая может использоваться в качестве строки формата для

локали — Услуги интернационализации — Документация Python 3.9.0

Исходный код: Lib / locale.py


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

Модуль locale реализован поверх модуля _locale , который, в свою очередь, использует реализацию локали ANSI C.

Модуль locale определяет следующие исключения и функции:

исключение локаль. Ошибка

Исключение возникает, когда локаль передана в setlocale () не является признал.

локаль. setlocale ( категория , locale = None )

Если указан locale , а не None , setlocale () изменяет локаль настройка для категории . Доступные категории перечислены в данных описание ниже. locale может быть строкой или итерацией из двух строк (код языка и кодировка). Если это итерация, она преобразуется в языковой стандарт. имя, используя механизм определения псевдонимов локали. Пустая строка определяет пользовательский настройки по умолчанию. Если изменение локали не удается, исключение Возникает ошибка . В случае успеха возвращается новый параметр локали.

Если locale опущен или None , текущая настройка для категории — вернулся.

setlocale () не является потокобезопасным в большинстве систем. Приложения обычно начать с звонка

 импорт локали
locale.setlocale (locale.LC_ALL, '')
 

Устанавливает языковой стандарт для всех категорий по умолчанию пользователя (обычно указанный в переменной среды LANG ). Если языковой стандарт не были изменены после этого, использование многопоточности не должно вызывать проблем.

локаль. localeconv ()

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

Категория

Ключ

Значение

LC_NUMERIC

'десятичная_точка'

Знак десятичной точки.

'группировка'

Последовательность цифр, указывающих что относительное расположение ',000_sep ' — это ожидается.Если последовательность прекращено с CHAR_MAX , не более группировка выполняется. Если последовательность заканчивается 0 , размер последней группы неоднократно использовался.

'тыс_сеп'

Знак, используемый между группами.

LC_MONETARY

'int_curr_symbol'

Международный символ валюты.

'currency_symbol'

Условное обозначение в местной валюте.

'p_cs_precedes / n_cs_precedes'

Является ли символ валюты предшествует значению (для положительный соотв. отрицательный ценности).

'p_sep_by_space / n_sep_by_space'

Является ли символ валюты отделены от значения пробел (для положительного соотв.отрицательные значения).

'mon_decimal_point'

Десятичная точка, используемая для денежные значения.

'frac_digits'

Количество знаков после запятой используется в локальном форматировании денежные значения.

'int_frac_digits'

Количество знаков после запятой используется в международных форматирование денежных величин.

'mon_thousands_sep'

Разделитель групп, используемый для денежные значения.

'mon_grouping'

Эквивалент «группировка» , используется для денежных значений.

'позитивный_знак'

Символ, используемый для аннотации положительное денежное выражение.

'отрицательный_знак'

Символ, используемый для аннотации отрицательная денежная ценность.

'p_sign_posn / n_sign_posn'

Положение знака (для положительный соотв. отрицательный значения), см. ниже.

Все числовые значения могут быть установлены на CHAR_MAX , чтобы указать, что нет значение, указанное в этой локали.

Возможные значения для 'p_sign_posn' и 'n_sign_posn' приведены ниже.

Значение

Пояснение

0

Валюта и стоимость окружены круглые скобки.

1

Знак должен предшествовать значению и символ валюты.

2

Знак должен следовать за значением и символ валюты.

3

Знак должен непосредственно предшествовать значение.

4

Знак должен следовать сразу за значение.

CHAR_MAX

В этой локали ничего не указано.

Функция временно устанавливает локаль LC_CTYPE на LC_NUMERIC локаль или локаль LC_MONETARY , если языковые стандарты другие и числовые или денежные строки не являются ASCII. Это временное изменение влияет на другие потоки.

Изменено в версии 3.7: теперь функция временно устанавливает локаль LC_CTYPE на LC_NUMERIC локаль в некоторых случаях.

локаль. nl_langinfo ( опция )

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

Функция nl_langinfo () принимает один из следующих ключей. Наиболее описания взяты из соответствующего описания в GNU C библиотека.

локаль. CODESET

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

локаль. D_T_FMT

gettext — Многоязычные услуги интернационализации — Документация Python 3.9.0

Исходный код: Lib / gettext.py


Модуль gettext обеспечивает интернационализацию (I18N) и локализацию (L10N) для ваших модулей и приложений Python.Он поддерживает как API каталога сообщений GNU gettext и API более высокого уровня на основе классов, который может быть более подходящим для файлов Python. Описанный ниже интерфейс позволяет писать сообщения модуля и приложения на одном естественном языке, и предоставить каталог переведенных сообщений для работы в различных естественных языков.

Также даются некоторые подсказки по локализации ваших модулей и приложений Python.

GNU gettext API

Модуль gettext определяет следующий API, который очень похож на API GNU gettext .Если вы используете этот API, вы повлияете на перевод всего вашего приложения во всем мире. Часто это то, что вам нужно, если ваше приложение является одноязычным, и выбор языка зависит от локаль вашего пользователя. Если вы локализуете модуль Python или если ваш приложение должно переключать языки на лету, вы, вероятно, захотите использовать API на основе классов вместо этого.

gettext. bindtextdomain ( домен , localedir = None )

Привяжите домен к каталогу локали localedir .Более конкретно, gettext будет искать двоичные файлы .mo для данного домена, используя путь (в Unix): localedir / язык / LC_MESSAGES / домен .mo , где язык ищется в переменных среды LANGUAGE , LC_ALL , LC_MESSAGES и LANG соответственно.

Если localedir опущено или None , то текущая привязка для домена будет вернулся.

gettext. bind_textdomain_codeset (домен , кодовый набор = Нет )

Привязать домен к кодовому набору , изменяя кодировку байтовых строк возвращается lgettext () , ldgettext () , lngettext () и ldngettext () функций. Если кодовый набор опущен, то возвращается текущая привязка.

Не рекомендуется, начиная с версии 3.8, будет удален в версии 3.10.

gettext. текстовый домен (домен = нет )

Изменить или запросить текущий глобальный домен. Если домен Нет , то текущий глобальный домен возвращается, в противном случае глобальный домен устанавливается на домен , который возвращается.

gettext. gettext ( сообщение )

Вернуть локализованный перевод сообщения на основе текущего глобального домен, язык и каталог локали.Эта функция обычно имеет псевдоним _ () в локальном пространстве имен (см. Примеры ниже).

gettext. dgettext ( домен , сообщение )

Подобно gettext () , но ищите сообщение в указанном домене .

gettext. ngettext ( единственного числа , множественного числа , n )

Подобно gettext () , но учитывайте формы множественного числа.Если перевод найден, применить формулу множественного числа к n и вернуть полученное сообщение (некоторые языки имеют более двух форм множественного числа). Если перевод не найден, верните в единственном числе , если n равно 1; в противном случае вернуть множественное число .

Формула множественного числа взята из заголовка каталога. Это C или Python выражение, которое имеет свободную переменную n ; выражение оценивается как индекс множественного числа в каталоге. Увидеть документация GNU gettext для точного синтаксиса, который будет использоваться в .po файлов и формулы для множества языков.

gettext. dngettext ( домен , единственного числа , множественного числа , n )

Подобно ngettext () , но ищите сообщение в указанном домене .

gettext. pgettext ( контекст , сообщение )
gettext. dpgettext ( домен , контекст , сообщение )
gettext. npgettext ( контекст , единственного числа , множественного числа , n )
gettext. dnpgettext (домен , контекст , единственное число , множественное число , n )

Аналогично соответствующим функциям без префикса p (что есть, gettext () , dgettext () , ngettext () , dngettext () ), но перевод ограничен данным сообщением , контекст .

gettext. lgettext ( сообщение )
gettext. ldgettext ( домен , сообщение )
gettext. lngettext ( единственное число , множественное число , n )

Локализация Python стала проще «Supernifty — nifty stuff


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

Шаг 1. Инициализируйте приложение

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

Этот фрагмент кода ищет файл ресурсов в зависимости от языкового стандарта пользователя. Например, «res / messages_en.mo» для английского языка. Если ему не удается открыть соответствующий файл перевода, он возвращается к NullTranslations , который просто не выполняет перевод.

Шаг 2. Подготовьте заявку на перевод

trans.install () генерирует глобальную функцию, доступную для всех модулей в вашем приложении: _ () .

Найдите в своем приложении все строки, которые вы хотите перевести, и оберните их функцией _ () .

то есть «Привет» становится _ («Привет») .

Это также относится к параметризованным строкам. например «Привет% s»% name становится _ («Привет% s»)% name .

Шаг 3: Создание банка

Это messages.pot .

Выполните команду xgettext * .py или pygettext * .py . В Windows вам, возможно, придется поискать этот инструмент. В каталоге установки Python попробуйте Tools / i18n .

Эта команда ищет все строки внутри функции _ () и генерирует файл messages.pot .

Шаг 4. Переведите

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

Шаг 5: Создайте mo

Сохраните возвращенный файл, чтобы отразить новый язык, на который было переведено ваше приложение. например messages_De.po

Выполните команду msgfmt -o res / messages_De.mo messages_De.po , чтобы сгенерировать требуемый файл .mo.

Как и в случае с pygettext , если ваша система не находит эту команду, найдите Tools / i18n в каталоге установки Python.

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

Шаг 6: Тест

В Windows XP вы можете изменить локаль, выполнив следующие действия:

  • Пуск-> Панель управления-> Язык и региональные стандарты;
  • В разделе «Региональные параметры» выберите языковой стандарт для созданного файла перевода и нажмите «Применить»;
  • Запустите приложение Python;
  • (Надеюсь) понравится ваше переведенное приложение!

Вкратце…

Если вы знаете, как это сделать, настроить локализацию с помощью Python очень просто.

Эта запись была опубликована в пятницу, 16 сентября 2011 г., в 13:46 и находится в стадии разработки, как сделать, python. Вы можете следить за любыми ответами на эту запись через канал RSS 2.0. Вы можете оставить отзыв или откликнуться со своего сайта.

Интернационализация и локализация — документация Pylons Framework 1.0.2

Введение

Интернационализация и локализация — это средства адаптации программного обеспечения для неместные среды обитания, особенно для других народов и культур.

Части приложения, которые могут нуждаться в локализации, могут включать:

  • Язык
  • Формат даты / времени
  • Форматирование чисел, например десятичные точки, расположение разделителей, символ, используемый как разделитель
  • Часовые пояса (UTC в интернациональной среде)
  • Валюта
  • Меры и вес

Разница между интернационализацией и локализацией тонкая, но важный. Интернационализация — это адаптация продуктов для потенциального использования практически везде, а локализация — это добавление специальных возможностей для использования в определенном регионе.

Например, с точки зрения языка, используемого в программном обеспечении, интернационализация — это процесс разметки всех строк, которые, возможно, потребуется перевести во время локализация — это процесс создания переводов для определенной локали.

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

Примечание

Интернационализация часто обозначается аббревиатурой I18N (или i18n или I18n), где число 18 относится к количеству пропущенных букв.Локализация часто так же сокращенно обозначается L10n или l10n. Эти сокращения также избегают выбора одного написания (интернационализация vs. интернационализация и т. д.) по сравнению с другими.

Для того, чтобы представлять символы из нескольких языков, вы нужно использовать Unicode. В этом документе предполагается, что вы прочитали Понимание Unicode.

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

В этом заключительном разделе рассматривается вопрос о том, как заставить ваше приложение работать с несколько языков.

Pylons использует модуль Python gettext для интернационализации. Он основан на API GNU gettext.

Начало работы

Везде в коде, где вы хотите, чтобы строки были доступны в разных языков, вы заключите их в функцию _ () . Есть также ряд другие функции перевода, которые описаны в справочнике по API на http: // pylonshq.com / docs / module-pylons.i18n.translation.html

Примечание

Функция _ () является ссылкой на функцию ugettext () . _ () — это соглашение о маркировке текста, который нужно перевести, с сохранением нажатий клавиш. ugettext () — это версия Unicode для gettext () ; он возвращает строки Unicode.

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

Давайте назовем наш проект translate_demo :

 $ paster create -t ​​пилоны translate_demo
 

Теперь давайте добавим дружественный контроллер, который здоровается:

 $ cd translate_demo
$ paster controller привет
 

Отредактируйте контроллеры / hello.py , чтобы везде использовать функцию _ () где появляется строка Hello :

 импорт журнала

из пилонов.i18n import get_lang, set_lang

из translate_demo.lib.base import *

log = logging.getLogger (__ имя__)

класс HelloController (BaseController):

    def index (self):
        response.write ('По умолчанию:% s 
'% _ ('Привет')) для языка в ['fr', 'en', 'es']: set_lang (язык) response.write ("% s:% s
"% (get_lang (), _ ('Hello')))

При написании обертывания строк в функциях gettext важно не составлять предложения вручную; на некоторых языках может потребоваться инвертировать грамматики.Не делайте этого:

 # ПЛОХО!
msg = _ ("Он сказал ей")
msg + = _ ("не выходить на улицу.")
 

, но это вполне приемлемо:

 # ХОРОШО
msg = _ ("Он сказал ей не выходить на улицу")
 

Контроллер теперь интернационализирован, но вызовет LanguageError , пока мы не настроим каталоги альтернативных языков.

GNU gettext использует три типа файлов в среде перевода.

Файлы POT (Portable Object Template)

Первый шаг в процессе локализации.Программа используется для поиска через исходный код вашего проекта и выбрать каждую строку, переданную одному функций перевода, например _ () . Этот список составлен в специально отформатированный файл шаблона, который ляжет в основу всех переводы. Это файл .pot .

Файлы PO (переносной объект)

Второй шаг в процессе локализации. Использование файла POT в качестве шаблон, список сообщений переводится и сохраняется как .po файл.

Файлы MO (машинный объект)

Последний шаг в процессе локализации. Файл PO запускается через программа, которая превращает его в оптимизированный машиночитаемый двоичный файл, который это файл .mo . Компиляция переводов в машинный код делает локализованная программа намного быстрее получает переводы, пока Бег.

GNU gettext предоставляет набор программ командной строки для извлечения сообщений. из исходного кода и работа со связанными каталогами gettext.Проект Babel предоставляет чистую альтернативу Python версии этих инструментов. В отличие от инструмента GNU gettext xgettext , Babel поддерживает извлечение переводимых строк из языков шаблонов Python (в настоящее время Мако и Генши).

Использование Babel

Чтобы использовать Babel, вы должны сначала установить его через easy_install. Запускаем команду:

Pylons (по состоянию на 0.9.6) включает некоторые разумные значения по умолчанию для команд distutils Babel в файле setup.cfg.

Он также включает отображение метода извлечения в настройках.py файл. это закомментировано по умолчанию, чтобы избежать предупреждения distutils о том, что это нераспознанный вариант, когда Babel не установлен. Эти строки должны быть раскомментировал, прежде чем продолжить эту прогулку:

 message_extractors = {'translate_demo': [
        ('**. py', 'python', нет),
        ('templates / **. mako', 'mako' 

Руководство по локализации программного обеспечения для новичков

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

Что такое локализация программного обеспечения?

Локализация программного обеспечения (также обозначаемая как l10n ) — это процесс адаптации или перевода программного обеспечения в соответствии с языком, культурой и законодательством конкретной страны.Во многих случаях локализация потребует изменений в видимых пользователю компонентов программного обеспечения, таких как пользовательский интерфейс, изображения, документация и т. Д.

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

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

Каковы лучшие практики локализации?

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

  1. Рассматривайте локализацию как продолжение разработки продукта. Вместо того чтобы рассматривать локализацию программного обеспечения как изолированную задачу на заключительных этапах выпуска продукта, рассматривайте задачи, связанные с локализацией, как вещи, которые возникают на каждом этапе процесса разработки программного обеспечения, от выпуска до обслуживания.Такой образ мышления может гарантировать, что вы соответствующим образом спланируете локализацию и что ваше программное обеспечение может быть переведено на другие языки, не требуя от вас дополнительной работы или времени.
  2. Используйте простой исходный язык. Использование связанных с отраслью или сложных слов и фраз в пользовательском интерфейсе и документации может понравиться избранной аудитории и не вызвать положительных отзывов на других языках или другой культуре. Это также делает перевод трудным или даже невозможным в некоторых случаях, поэтому старайтесь использовать исходный язык как можно проще.
  3. Сосредоточьтесь на своих струнах . Как разработчик, большая часть ваших усилий по локализации будет вращаться вокруг ваших строк. Наряду с экстернализацией всех видимых пользователю строк, лучшие практики локализации включают в себя никогда не жестко кодировать строки, избегать конкатенированных строк и всегда предоставлять пояснительные комментарии, которые будут обсуждаться позже в этой статье.
  4. Найдите комплексную платформу локализации. Процесс локализации выходит за рамки разработки программного обеспечения и требует надежной платформы локализации.Платформы локализации, разработанные специально для разработчиков, часто предлагают более высокий уровень настройки и могут включать интеграцию с такими инструментами, как GitHub, Python и Django. Несколько платформ локализации также предоставляют интегрированных поставщиков услуг перевода, поэтому вам не нужно тратить время на создание и управление командой переводчиков.

Как выполняется локализация?

Локализация включает в себя два ключевых этапа; первая — это интернационализация, а вторая — сам процесс локализации.На диаграмме ниже показаны этапы обоих этапов.

Этап 1: интернационализация

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

Обзор Application Framework

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

План для текста на других языках

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

Чтобы убедиться, что ваш контент просматривается так, как вы планировали, мы рекомендуем программировать динамическое расширение пользовательского интерфейса в вашем программном обеспечении.Например, если вы разрабатываете приложение для iOS, вам следует использовать Auto Layout , чтобы обеспечить правильное выравнивание ваших представлений для каждой локали. Для приложения Android вы можете создать динамический пользовательский интерфейс с фрагментами .

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

Еще один момент, который следует учитывать: в таких языках, как арабский, текст читается справа налево (RTL), поэтому ваш дизайн также должен поддерживать сценарий RTL.

Кодовые строки с глобальным расширением в памяти

На этапе интернационализации строки должны быть извлечены, локализованы и снова вставлены в код. Кодирование строковых кодов в Unicode / UTF-8, как правило, будет лучшим вариантом, если вы не работаете с азиатскими языками, требующими UTF-16.

Экспорт данных для вашего региона

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

Файлы ресурсов

Файлы ресурсов в случае использования локализации содержат ресурсы, относящиеся к данному языку. Последние разработки приложений обычно определяют синтаксис «ключ-разделитель-значение» для файлов ресурсов, который будет определять способ создания пар ключей и значений для всех видимых пользователю строк в вашем приложении.Затем, в зависимости от языкового стандарта пользователя, соответствующие значения для этих строк будут извлечены и отображены в пользовательском интерфейсе.

Пример 1: Файлы свойств

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

messages_ru.properties messages_de.properties
этикетка.name = Ваше имя

label.greeting = Добро пожаловать

label.name = Ihr name

label.greeting = Willkommen

Пример 2: Файлы Localizable.Strings

Для приложения iOS файлы, содержащие локализуемые строки, называются файлом Strings , и вы должны использовать их и макрос NSLocalizedString . В вашем приложении должны быть определенные каталоги локали, и вы должны локализовать Localizable.strings файлов в каждой языковой папке.

en.lproj / Localizable.strings de.lproj / Localizable.strings
/ * На этикетке Ваше имя * /

«name» = «Ваше имя»;

/ * Ярлык Приветствие * /

«приветствие» = «Добро пожаловать»;

/ * Обозначьте позицию Ваше имя * /

«имя» = «Имя»;

/ * Ярлык Приветствие * /

«приветствие» = «Willkommen»;

Пример 3: Строки.xml файлы

Для приложения Android все локализуемые строки будут помещены в файл strings.xml и в соответствующие каталоги локали, как показано ниже:

res / values ​​/ strings.xml res / values-de / strings.xml

<ресурсы>

Ваше имя

Добро пожаловать

<ресурсы>

Имя

Willkommen

Пакет ресурсов

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

  • В примере 1 выше messages_en.properties и messages_de.properties будут объединены в пакет ресурсов.
  • В примере 2 выше en.lproj / Localizable.strings и de.lproj / Localizable.strings будут объединены в пакет приложения.
  • В примере 3 выше res / values ​​/ strings.xml и res / values-de / strings.xml будут объединены в пакет ресурсов.

Сосредоточьтесь на своих струнах

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

  • Избегайте жестко запрограммированных строк . Все видимые пользователю строки должны быть соответствующим образом экстернализованы. Избегание жестко закодированных строк облегчит вашу жизнь, а если вы не уверены, выполните псевдолокализацию, чтобы вырезать жестко закодированные строки. Псевдо-локализация часто выполняется в отдельной ветке тестирования локализации, что позволяет заменять строки с помощью регулярного выражения. Затем, когда вы запустите свое программное обеспечение, любая жестко запрограммированная строка будет четко видна.
  • Избегайте объединения строк. Две или более строки иногда объединяются разработчиками в целях экономии места. Однако порядок слов значительно различается на каждом языке, и конкатенация строк, скорее всего, приведет к ошибкам перевода в процессе локализации.
  • Предоставьте комментарии, не требующие пояснений. Предоставление пояснительных комментариев к вашим строкам для определения контекста везде, где это возможно, будет иметь большое значение для обеспечения большей точности перевода с меньшими усилиями по обмену данными.Это означает экономию времени и меньше головной боли.

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

Этап 2: Локализация

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

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

Извлечь файлы ресурсов

Чтобы начать процесс локализации, вам необходимо извлечь файлы ресурсов для перевода. Платформы локализации, такие как Transifex, поддерживают различные форматы исходных файлов, и вы сможете напрямую загружать файлы ресурсов. В некоторых случаях вам придется экспортировать файлы ресурсов в стандартные файлы XLIFF (XML Localization Interchange File Format) или другие подобные форматы файлов локализации, чтобы сделать их пригодными для перевода на несколько языков.

Если вы используете Transifex, все, что вам нужно сделать, это напрямую загрузить файлы ресурсов вашего проекта в одном из поддерживаемых форматов файлов ресурсов. Платформа автоматически извлечет все ваши исходные строки и сделает их доступными для перевода.

Перевести

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

Обзор

Все переводы должны проверяться на точность, качество языка, терминологию и любые другие требования, которые могут у вас возникнуть.Переводчики, основываясь на обратной связи с вами, администратором переводов или менеджером проекта, должны внести любые необходимые изменения. Если вы используете Transifex, платформа имеет встроенные функции для проверки, а также варианты, позволяющие поддерживать эффективное и быстрое общение с переводчиками.

Копировать переведенные файлы в структуру кода

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

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

Проверьте свое программное обеспечение для каждого переведенного языка

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

Когда завершится процесс локализации?

Убедившись, что ваш продукт не содержит ошибок и достаточно документирован, объявите о «замораживании строк» ​​в вашем продукте.Это означает, что вы больше не можете изменять код таким образом, чтобы это повлияло на исходные строки (за исключением определенных улучшений). Замораживание строк позволит переводчикам работать над стабильным набором строк и обеспечит достаточно времени для перевода и проверки. Перед финальной версией вы можете получить перевод для всех ваших целевых языков, скомпилировать их в свой продукт и выпустить его.

Есть еще вопросы по локализации? Посетите наш сайт www.transifex.com!

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *