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