Я экспериментирую с интернационализацией в Python. Я начал с простого сценария «Hello, World» и теперь я понял основы использования gettext. Я прочитал в документации, что конкатенация строк вместе так:
msg = _('Start of message')
msg += _(' end of message')
не рекомендуется, так как он разбивает строки для перевода и может привести к ошибкам (в любом случае это я понял из документации).
Мне стало интересно, как лучше всего использовать динамически генерируемые строки - например, 99 бутылок пива. Как вы все знаете, вы можете довольно мило написать 99 бутылок пивных программ, но вы вкладываете в структуру такую программу, чтобы она могла быть интернационализирована? Из прочтения документов я пришел к следующему. Это довольно многословно - я хотел бы знать, есть ли у вас какие-либо комментарии о том, как улучшить код (в отношении интернационализации, а не создания песни!)
#self._ is gettext.ugettext
#self._s is gettext.ungettext
def bottles(self):
for bottles in xrange(99, 1, -1):
lyric =self._s('%(bottles)d bottle of beer on the wall, %(bottles)d bottles of beer.', '%(bottles)d bottles of beer on the wall, %(bottles)d bottles of beer.', bottles)
lyric += "\n"
lyric += self._s('Take one down and pass it around, no more bottles of beer on the wall.', 'Take one down and pass it around, %(bottles-1)d bottles of beer on the wall.', bottles - 1)
lyric += '\n'
print lyric % {'bottles' : bottles, 'bottles-1' : bottles -1}
print self._('1 bottle of beer on the wall, 1 bottle of beer.')
print self._('Take one down and pass it around, no more bottles of beer on the wall.\n')
print self._('No more bottles of beer on the wall, no more bottles of beer.')
print self._('Go to the store and buy some more, 99 bottles of beer on the wall.')