Контекст:
Я разрабатываю небольшой модуль для автоматического переименования фотографий в каталоге в соответствии с их временной меткой exif (цель: простое смешивание изображений с разных камер или смартфонов). Он работает как пакет Python или напрямую из командной строки через крошечную оболочку, используя argparse.
И у меня только что была (довольно глупая) идея локализовать ее на неанглийском языке. Хорошо, gettext
мой друг по всему моему коду, но когда я пришел к agparse
сгенерированным сообщениям, я оказался на неаккуратной земле ...
Текущее исследование:
Я уже нашел некоторые ресурсы на SO:
Оба заканчиваются добавлением соответствующих строк из argparse в файл po / mo и позволяют модулю argparse автоматически использовать переведенные строки, потому что внутри он использует оболочку _(...)
. Пока все хорошо.
Моя проблема:
Мне кажется, что это скорее обходной путь, чем чистое и аккуратное решение, потому что:
- Я не смог найти слова, рекомендующего это в официальной документации Python
- Похоже на незавершенную работу : реализовано не документировано, поэтому некоторые строки могут измениться в будущем выпуске Python (или я что-то упустил?)
Текущий код:
parser = argparse.ArgumentParser(
prog = prog,
description="Rename pictures according to their exif timestamp")
parser.add_argument("-v", "--version", action="version",
version="%(prog)s " + __version__)
parser.add_argument("--folder", "-f", default = ".",
help = "folder containing files to rename")
parser.add_argument("-s", "--src_mask", default="DSCF*.jpg",
help = "pattern to select the files to rename")
parser.add_argument("-d", "--dst_mask", default="%Y%m%d_%H%M%S",
help = "format for the new file name")
parser.add_argument("-e", "--ext", default=".jpg", dest="ext_mask",
help = "extension for the new file name")
parser.add_argument("-r", "--ref_file", default="names.log",
help = "a file to remember the old names")
parser.add_argument("-D", "--debug", action="store_true",
help = "print a line per rename")
parser.add_argument("-X", "--dry_run", action="store_true", dest="dummy",
help = "process normally except no rename occurs")
# subcommands configuration (rename, back, merge)
subparser = parser.add_subparsers(dest='subcommand', help="sub-commands")
ren = subparser.add_parser("rename", help=
"rename files by using their exif timestamp")
ren.add_argument("files", nargs="*",
help = "files to process (default: src_mask)")
back = subparser.add_parser("back",
help="rename files back to their original name")
back.add_argument("files", nargs="*",
help = "files to process (default: content of ref_file)")
merge = subparser.add_parser("merge",
help="merge files from a different folder")
merge.add_argument("src_folder", metavar="folder",
help = "folder from where merge picture files")
merge.add_argument("files", nargs="*",
help = "files to process (default: src_mask)")
Я знаю, как обернуть мои собственные строки с помощью _()
, и, возможно, у меня могли бы быть приемлемые переводы для сообщений using и help , но существует множество сообщений об ошибках, когда пользователь дает неправильный синтаксис, и я хотел бы предотвратить сообщения об ошибках на английском языке в середине франкоязычной программы ...
Вопрос:
Есть ли какая-либо гарантия того, что реализация строк в модуле argparse
не изменится, или существует более надежный / переносимый способ предоставления переводов для его сообщений?