無茶なお話だとは重々承知しているのですが、ご存知の方がいらっしゃいましたらお願いします。
当方、頻繁に日本語・英語を切り替えてFusion360を起動させています。
言語の切り替えはこちらで行えることは周知しております。
こちらで言語を切り替えた際、再起動となるのですが(ダイアログで簡単に出来るようになっているのは
ありがたいです)、再起動が結構面倒です。
又、前回どちらの言語で終了させているのかが、起動してみるまで分からない状態です。
(英語で起動したい!!と言う場面がしばしばあります)
一番理想的なのは、各言語での起動出来るようなショートカットが作成出来ると助かるのですが
何か方法は無いでしょうか?
個人的には、この ”基本設定” がPC内の何処かにファイルとして書き出されているような気が
しております。(予想ではxmlファイル)
このファイルをご存知の方はいらっしゃらないでしょうか?
※以下は、当方が試した結果から得られた感触です。
・アカウントAでFusion360を起動。言語を日本語->英語に変更し、再起動を行わない。
↓
・サインアウトし、アカウントBでサインイン。画面の表示は日本語のままで、
基本設定は英語になっている。
↓
・Fusion360を終了。
↓
・Fusion360を起動。英語に切り替わっている。
又、
・会社のPCで日本語で終了。
↓
・自宅のPCで起動すると英語。(前回、英語で終了させている場合です)
上記から、
・言語設定(や他の設定)については、アカウント紐付いていない。
(ローカルの何処かに記録されている・・・はず)
・サインアウト・サインインはFusion360を再起動している訳では無い。
(これは以前から感じてます)
->ローカルのアカウントに紐付いたフォルダ内では無く、
共通で利用されているフォルダ内にファイルがあるのでは?
解決済! 解決策の投稿を見る。
回答者: kandennti. 解決策の投稿を見る。
あはは、 @kandennti さんも私と同じ悩みを抱えていて笑った(^_^;)
理由は本場の掲示板との兼ね合いですよね、もちろん。
で、、、私は再起動するのが嫌なので、日本語を立ち上げた状態で設定から英語にしたら、そのまま再起動せずに新たに新しいFusion360を立ち上げて日本語表示と英語表示を2重起動してしまっています。
ちょっと重くなるかなぁ……という印象ですが、再起動を繰り返すよりも楽だなと思って、海外の掲示板への投稿をする時には2重起動させてしまっています。
@kandennti さんがおっしゃるように、再起動なしでどうにかならない?って思う今日このごろだったりします。
@Bunga777 さん ありがとうございます。
>Fusion360を立ち上げて日本語表示と英語表示を2重起動してしまっています。
あぁこれは思い付きませんでした。確かに最悪これも有りですね。
他のCADの場合ですが、設定ファイルがあるのですが、実際の設定値はメモリ上にあります。
起動時にファイルを読み込み、終了時にメモリ上の設定をファイルに書き出しています。
その固定観念があったのですが、上記の動作を考えるとFusion360の場合は設定値を
変更した際にファイルに書き出していますね。
>再起動なしでどうにかならない?って思う今日このごろだったりします。
例えばコマンドを実行する際のダイアログを表示させる直前に、何度も言語毎のメッセージ
ファイルを読み込むのは、動作が遅くなる可能性が有るので、最初に読み込んでしまうのでは
無いのかかな? と感じているので仕方ない部分のような・・・。
PowerMill(Autodesk社)は、起動中に言語を切り替えると、不完全な部分はあるのですが、
メニュー類も全て設定言語に切り替わります。(PowerMillすごい)
”言語設定を頻繁に切り替える” と言う行為が、あまり一般的では無い操作なので、
海外サイトでも情報が見つからないんですよね・・・。
比較的良く出てくる、こちらのオプションファイルですが、
C:\Users\<PCアカウント>\AppData\Roaming\Autodesk\Neutron Platform\Options\NMachineSpecificOptions.xml
ボリュームが大きいので "language" とか "lang" で検索しても、それらしい項目は
見当たらなかったので、このファイルでは無いと感じています。
(見落としの可能性は否定できませんが)
言語の設定については、上記の "NMachineSpecificOptions.xml" のファイル内に
記載されている事が分かりました。
但し、Fusion360が日本版(と言うものがあるのかどうか定かではないのですが)で
日本語設定の場合は、設定値をxml内には記載しないようです。
恐らく、デフォルト値の場合は記載しない と言う仕様なのだろうと思われます。
他にも少しわかった事があるで、ある程度まとまり、それなりのものが出来次第
再度記載します。
"de-DE":"ドイツ語"
"en-US":"英語"
"es-ES":"スペイン語"
"fr-FR":"フランス語"
"it-IT":"イタリア語"
"ja-JP":"日本語"
"ko-KR":"韓国語"
"zh-CN":"中国語"
"pl-PL":"ポーランド"
"pt-BR":"ポルトガル_ブラジル"
"tr-TR":"トルコ"
subprocess.run(exeファイルパス)
こちらの件ですが、他の方はあまり必要とされる方が少ないと思いますが、
共有しておきます。
以下のコードをVBScriptファイル(拡張子.vbs)として保存してください。
その為、Winのみとなるはずです。文字コードは"Shift-JIS"です。
Const FUSION_PATH = "@fusionpath"
Const XML_PATH = "@xmlpath"
Const SLEEP_TIME = 5000
Const BLOCK_NAME = "block.txt"
call main()
Sub main()
Dim blockPath
blockPath = getBlockPath()
Dim msg
msg = canExec(blockPath)
if len(msg) > 0 Then
msgbox msg
exit Sub
end if
msg = _
"言語を指定してFusion360を起動します。" & vbCrLf & _
"[はい] : 日本語" & vbCrLf & _
"[いいえ] : 英語" & vbCrLf & _
"[キャンセル] : 中止"
lang = ""
Select Case MsgBox(msg, vbYesNoCancel)
Case vbYes
lang = "ja-JP"
Case vbNo
lang = "en-US"
Case Else
Exit Sub
End Select
createBlockFile blockPath
startFusion lang, blockPath
End Sub
Sub startFusion(lang, blockPath)
'バックアップ
Dim backUpPath
backUpPath = getUniquePath(XML_PATH)
Dim fso
Set fso = getFso()
fso.copyFile XML_PATH, backUpPath
'xml書き換え
Set dom = get_dom(XML_PATH)
If dom Is Nothing Then
Exit Sub
End If
Set nodeRoot = dom.DocumentElement
Set BootstrapOptionsGroup = getElementByTagName(nodeRoot, "BootstrapOptionsGroup")
Set userLanguageOptionId = getElementByTagName(BootstrapOptionsGroup, "userLanguageOptionId")
If userLanguageOptionId Is Nothing Then
Set userLanguageOptionId = BootstrapOptionsGroup.appendChild(createNode(dom))
End If
Set langValue = getAttributeByName(userLanguageOptionId, "Value")
langValue.Value = lang
dom.Save XML_PATH
'起動
Dim ws
Set ws = CreateObject("WScript.Shell")
ws.Run FUSION_PATH, vbNormalFocus, False
'削除,復旧
WScript.Sleep SLEEP_TIME
removeFile blockPath
fso.DeleteFile XML_PATH
renameFile backUpPath, XML_PATH
End Sub
Function getBlockPath()
Dim blockAry
blockAry = splitPathName(XML_PATH)
ary = split(BLOCK_NAME, ".")
blockAry(1) = ary(0)
blockAry(2) = ary(1)
getBlockPath = joinPathName(blockAry)
end Function
Function canExec(blockPath)
Dim fso
Set fso = getFso()
Dim msg
msg = ""
If Not fso.FileExists(FUSION_PATH) Then
msg = "[FusionLauncher.exe]のパスが間違っています。" & vbcrlf
End If
If Not fso.FileExists(XML_PATH) Then
msg = msg & "[NMachineSpecificOptions.xml]のパスが間違っています。"
End If
If fso.FileExists(blockPath) Then
msg = msg & "他のプロセスが実行中です。もう少し時間を置いて実行してください。"
End If
canExec = msg
End Function
Function createBlockFile(blockPath)
Dim fso
Set fso = getFso()
Dim msg
msg = "本ファイルに心当たりが無ければ、削除して大丈夫です。"
With fso.CreateTextFile(blockPath)
.WriteLine msg
.Close
End With
End Function
Function removeFile(path)
Dim fso
Set fso = getFso()
fso.DeleteFile path
End Function
Function renameFile(target, result)
Dim pathAry
pathAry = splitPathName(result)
Dim newName
newName = pathAry(1) & "." & pathAry(2)
Dim fso
Set fso = getFso()
fso.GetFile(target).name = newName
End Function
Function getUniquePath(path)
Dim pathAry
pathAry = splitPathName(path)
Dim fso
Set fso = getFso()
Dim tmpPath
tmpPath = joinPathName(pathAry)
If Not fso.FileExists(tmpPath) Then
getUniquePath = tmpPath
Exit Function
End If
Dim baseName
baseName = pathAry(1)
Dim count
count = 1
Do
pathAry(1) = baseName & "-" & count
tmpPath = joinPathName(pathAry)
If Not fso.FileExists(tmpPath) Then
getUniquePath = tmpPath
Exit Function
End If
count = count + 1
Loop
End Function
Function joinPathName(ary)
joinPathName = ary(0) + "\" + ary(1) + "." + ary(2)
End Function
Function splitPathName(path)
Dim ary(2)
With getFso
ary(0) = .GetParentFolderName(path)
ary(1) = .GetBaseName(path)
ary(2) = .GetExtensionName(path)
End With
splitPathName = ary
End Function
Function getFso()
Set getFso = CreateObject("Scripting.FileSystemObject")
End Function
Function createNode(dom)
Dim node
Set node = dom.createElement("userLanguageOptionId")
node.appendChild dom.createTextNode("test")
node.setAttribute "ToolTip", "ユーザ インタフェースの表示に使用する言語です。"
node.setAttribute "UserName", "ユーザ言語"
node.setAttribute "Value", "en-US"
Set createNode = node
End Function
Function getAttributeByName(node, name)
Set getAttributeByName = Nothing
Dim attr
For Each attr In node.Attributes
If attr.baseName = name Then
Set getAttributeByName = attr
Exit Function
End If
Next
End Function
Function getElementByTagName(node, name)
Set getElementByTagName = Nothing
Dim lst
Set lst = node.getElementsByTagName(name)
If lst.Length < 1 Then Exit Function
Set getElementByTagName = lst.Item(0)
End Function
Function get_dom(path)
Dim dom
Set dom = CreateObject("Msxml2.DOMDocument")
Dim res
res = dom.Load(path)
If res Then
Set get_dom = dom
Else
Set get_dom = Nothing
End If
End Function
但しこちらはこのままでは実行出来ない為、書き換えが必要となります。
1行目については、Fusion360を起動するための "FusionLauncher.exe" のファイルパス
となります。
Const FUSION_PATH = "@fusionpath"
↓
Const FUSION_PATH = "C:\Users\<PCアカウント名>\AppData\Local\Autodesk\webdeploy\production\6a0c9611291d45bb9226980209917c3d\FusionLauncher.exe"
Fusion360を起動する際のショートカットのプロパティを開き"リンク先" の
ファイルパスを上記部分にコピペして頂くのが確実です。
又、2行目は起動時に "基本設定" が記録されている "NMachineSpecificOptions.xml" の
ファイルパスに書き換える必要があります。
Const XML_PATH = "@xmlpath"
↓
Const XML_PATH = "C:\Users\<PCアカウント名>\AppData\Roaming\Autodesk\Neutron Platform\Options\NMachineSpecificOptions.xml"
この2行を書き換えた上で、vbsファイルをダブルクリックすると、次の味気ない
ダイアログが表示されます。任意の言語ボタンをクリックしてください。
上記のvbsファイルを作成するのが面倒な場合は、こちらのアドインの
https://github.com/kantoku-code/Fusion360_Developers_Small_ToolKit
こちらのボタンを押す事で、修正なしで使用出来るvbsファイルを作り出します。
念の為、安全を考慮し"基本設定"の保存ファイル(NMachineSpecificOptions.xml)を
書き換えていますが、次の手順で処理を行っています。
・連続起動を防止するための "block.txt" ファイルを作成。
・バックアップ用にxmlファイルをコピー。
・xmlファイルを書き換え。
・Fusion360を起動。
・5秒後、書き換えたxmlファイルを削除。
・バックアップしたxmlファイルを元のファイル名にリネーム。
・block.txt" ファイルを削除。
簡単な表現を行うと、言語を指定して起動後は"基本設定"の保存ファイルは
元の状態に戻しています。(安全のために)
個人的には、1個目は通常通りFusion360を起動し、異なる言語で起動したい
タイミングにvbsファイルで起動させるような使い方を推奨です。
お探しの情報が見つからないときは、コミュニティで質問しましょう。困っている人がいたら、情報を教えてあげましょう。