Как создать строку документации в python для нескольких языков

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

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

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


person Rubén Cabrera    schedule 30.11.2014    source источник
comment
Невозможно перевести строку документации на несколько языков, но вы можете создать документацию через sphinx и перевести документы.   -  person Andrew Svetlov    schedule 03.12.2014
comment
@AndrewSvetlov, вы обязательно должны поставить это как ответ.   -  person alecxe    schedule 03.12.2014
comment
@AndrewSvetlov, да, пожалуйста, уточните и добавьте в качестве ответа, кажется хорошим решением.   -  person Andre Polykanine    schedule 03.12.2014
comment
Комментарий опубликован как ответ.   -  person Andrew Svetlov    schedule 03.12.2014


Ответы (4)


Невозможно перевести строку документации на несколько языков, но вы можете создать документацию с помощью инструмента Sphinx и перевести документы

Сам Sphinx поддерживает переводы на основе gettext для сгенерированных документов, см. Руководство по интернационализации Sphinx. .

person Andrew Svetlov    schedule 03.12.2014
comment
Помечено как лучший ответ, потому что Sphinx — хороший способ. Также найден эта альтернатива , но для многих языков это плохо распространяется. - person Rubén Cabrera; 07.12.2014

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

Взгляните на этот отличный туториал по использованию модуля gettext. Это позволяет вам переводить любое приложение Python. Я использую это так:

import gettext
try:
    lang = gettext.translation('myawesomeapp', localedir='locale')
    lang.install()
except FileNotFoundError:
    _ = lambda x: x

И теперь, когда вы хотите интернационализировать строку документации, следуйте этому шаблону:

class MyAwesomeClass:
    def incredible_method(with_fantastic_args):
        # Some marvellous code

    incredible_method.__doc__ = _('''\
Place here a fabulous docstrig for your incredible method.
This will be translated by the gettext module at runtime.''')

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

Прощай, пайсанос.

person Mario Abarca    schedule 22.08.2016

Чтобы улучшить ответ Марио, вы можете поместить строки документации в декоратор, чтобы они были в начале функции.


def doc(docstring):
    def decorate(fn):
        fn.__doc__ = docstring
        return fn
    return decorate

class MyAwesomeClass:

    @doc(_(
    """My awesome documentation for an incredible method.
 
       It's really awesome, isn't it?
       """))
    def incredible_method(with_fantastic_args):
        ...

Все еще не идеально, но намного лучше, чем когда строка документации находится вне поля зрения/не в уме где-то внизу.

person Matthias Urlichs    schedule 05.08.2020

Единственное практическое решение, которое я могу придумать — и оно уродливое — это размещать один язык за другим в строке документации. Например:

def findChocolate(variety):
    '''Locate chocolate - Encuentra la choloate - nuqDaq yuch Dapol '''
    ...
person Steve    schedule 03.12.2014
comment
Это действительно уродливо, так как на самом деле не анализируется и не поддерживает GetText :( - person Andre Polykanine; 03.12.2014