Newer
Older
pydwiki / trans.py
#!/usr/bin/env python

import os
import sys

from django.core.management import call_command
from django.apps import apps
from pydwiki.settings import LANGUAGES, INSTALLED_APPS

# 対応言語リスト取得
langs = [lang[0] for lang in LANGUAGES]


def get_app_names():
    """ アプリ名一覧を取得します。
    配下に、アプリ名と同じディレクトリがあるものだけを抽出して返します。

    Return:
        アプリ名一覧
    """
    filterd_app_names = list(filter(lambda name: os.path.isdir(name), INSTALLED_APPS))
    return filterd_app_names

def makemessages():
    """ python manage.py makemessages -l '言語' と同様の処理を実施し、
    locale/{言語}/LC_MESSAGES 配下に、po ファイルを生成します。
    """

    # ディレクトリ作成
    app_names = get_app_names()
    for app_name in app_names:
        for lang in langs:
            locale_dir= f"{app_name}/locale/{lang}/LC_MESSAGES"
            os.makedirs(locale_dir, exist_ok=True)

    # po ファイル生成
    # python manage.py makemessages -l ja
    call_command('makemessages', locale=langs)

def compilemessages():
    """ po ファイルより、mo ファイルを生成します。
    """

    # python manage.py compilemessages -l ja
    call_command('compilemessages', locale=langs)

def print_usage():
    print("")
    print("Usage) python trans.py [command]")
    print("command:")
    print("    makemessages: create .po file")
    print("    compilemessages: compile .po file (.po -> .mo)")
    print("")

def main():
    # コマンドと対応する関数のマップ
    command_map = {
        "makemessages": makemessages,
        "compilemessages": compilemessages,
        "help": print_usage,
    }

    # コマンドに対応する関数を実行する
    args = sys.argv
    command = args[1] if len(args) >= 2 else "help"
    command_func = command_map.get(command)
    if command_func:
        command_func()

if __name__ == '__main__':
    main()