忘却まとめ

Blenderの中級者・上級者向けの踏み込んだ情報や、アドオン・3DCGに関する情報を記事にします

翻訳機能の実装方法・CSVを翻訳ファイルに使う【Python / Blenderアドオン開発】

Python

投稿日:

Blenderのアドオンで翻訳機能を利用する方法を紹介する。
翻訳を用意すれば、基本は英語のままで言語設定が日本語の場合にのみ日本語に翻訳できる。

Operatorのlabelやdescription・メニューの文字などを翻訳しておけば、日本のユーザーにとって扱いやすいアドオンになる。

基本

translation_dict = {
    "ja_JP": {
        ("*", "hoge"):
        "ほげ",
        ("*", "huga"):
        "ふが",
        ("*", "bar"):
       "ばー",
    }
}


# 翻訳の登録
def register():
    bpy.app.translations.register(__name__, translation_dict)


#翻訳の登録解除
def unregister():
    bpy.app.translations.unregister(__name__)
  • 「hoge」に翻訳したい英名、「ほげ」部分に翻訳後の文字列を入れておく
  • 翻訳対象の英名は完全一致していないといけないので注意
    • 手打ちでは大文字小文字や空白・スペルミスなどあり得るので、コピペするとよい
  • 登録と登録解除を、それぞれregister()とunregister()に入れておく
    • どうもうまく登録解除できない事があり、再読み込みしたときにエラーが起こってアドオン自体が登録失敗するので、tryを付けておく方がよいかもしれない

CSVファイルにまとめた翻訳辞書を利用する

csvファイルにまとめた翻訳データを、最初に掲載したような基本の形式に整形してから登録する。
翻訳データが多い時はこちらを使った方がよい。

CSVの辞書データ

今回はtranslation_dictionary.csvという名前で保存する。

"ほげ","hoge"
"ふが","huga"
"ばー","bar"

読み込み・整形と登録

CSVの辞書データを読み込み、整形し、翻訳辞書として登録する。

import os, csv, codecs # 外部ファイルのscvを読み込むのに必要


def GetTranslationDict():
	dict = {}
        # csvファイルのパスを取得(同階層にあることを想定)
	path = os.path.join(os.path.dirname(__file__), "translation_dictionary.csv")

        # csvファイルを読む
	with codecs.open(path, 'r', 'utf-8') as f:
		reader = csv.reader(f)
		dict['ja_JP'] = {}
		for row in reader:
			if row: # 行に内容がある場合のみ(空行を除外)
				for context in bpy.app.translations.contexts:
				# 辞書内の改行が勝手にエスケープされてしまうので、replace()で変換して、正しく読み込めるようにする
					dict['ja_JP'][(context, row[1].replace('\\n', '\n'))] = row[0].replace('\\n', '\n') 

	return dict


#翻訳の登録
def register():
	try:
		bpy.app.translations.register(__name__, BKTEMP_translation_dict)
	except: pass


#翻訳の登録解除
def unregister():
	try:
		bpy.app.translations.unregister(__name__)
	except: pass

参考

さいでんか氏のScramble Addonを参考。

bookyakuno/Blender-Scramble-Addon

アドオンの制作依頼はこちら

-Python
-

Copyright© 忘却まとめ , 2020 All Rights Reserved Powered by STINGER.