Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

設定データ読み込み処理において言語設定切り替え後にMRUエントリが無い場合は新規インストール後とみなし false を返すように変更 #620

Merged
merged 1 commit into from
Nov 23, 2018

Conversation

beru
Copy link
Contributor

@beru beru commented Nov 17, 2018

このPRの変更の目的は、#616 で報告した問題に対処する為です。

%APPDATA%/sakura.ini ファイルの内容が新規インストール後のものかどうかの判断は、
[MRU] セクションの _MRU_Counts エントリが存在しないかどうかで判定しています。
ちょっとこの判定方法だと単純すぎて危ないかも知れませんが…。。

新規インストールと判断した場合は return false; で処理を中断する事で後続する各設定読み込み処理を実行しないようにしました。ほぼ空な設定ファイルから設定情報を呼んでしまうとおかしな事になってしまうので。

それに加えて下記の変更も加えました。

  • 管理プロセスから呼び出ししている設定データ読み込み処理(CShareData_IO::LoadShareData)の戻り値を使うように変更

    • 従来の処理では設定ファイル名を呼び出し側でも作ってそのファイルが存在するかどうかで判定していますが、設定データ読み込み処理内でも同じようにして設定ファイル名を作っているので、戻り値を有効活用出来るのではないかと判断しました。
  • 後続する設定データ保存処理(CShareData_IO::SaveShareData)の呼び出しは設定ファイルが存在しないという判断ではなくて、設定データ読み込みに処理に失敗したらという判断に変更

    • 前述した内容にも関係しますが、新規インストール後はここで設定データ保存をさせる事で有効な初期設定ファイルに切り替えています。別にここで保存せずともプロセス終了時に設定保存が入るかもしれませんが…。

管理プロセスから呼び出ししている設定データ読み込み処理(CShareData_IO::LoadShareData)の戻り値を使うように変更

後続する設定データ保存処理(CShareData_IO::SaveShareData)の呼び出しは設定ファイルが存在しないという判断ではなくて、設定データ読み込みに処理に失敗したらという判断に変更
Copy link
Contributor

@berryzplus berryzplus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTMです。

とくに問題ないと思います。

MRU(最近使ったファイル)=0件をインストール直後と看做す、で文句ないように思います。
懸念は、インストーラから初期設定を触るアプローチが今後とりにくくなることかな?

思い当たる悪い影響・・・初回起動が遅くなる。
 設定壊れるより全然いいとのでOKと思ってます。

@berryzplus
Copy link
Contributor

いわゆる「デフォルト設定」を作っているのは、CControlProcess.cppの82行目の呼出です。
デフォルト設定を作ってから設定ファイルを読み込んで上書きする構造になっています。
だから、ほぼ空の設定ファイルを読むとアイコンが消える、という事象が発生したわけ。

なんかの条件で「新規」と判断できたら設定を読むのをやめる、というこの変更は適切だと思っとります。

@beru
Copy link
Contributor Author

beru commented Nov 17, 2018

MRU(最近使ったファイル)=0件をインストール直後と看做す、で文句ないように思います。

厳密にはMRUが0件という判定ではないです。MRUのエントリが存在するかどうかの判定にしています。
MRUが0件だとインストール直後の初回起動で何もファイルを開かないで終了とかMRU消去でそういう設定が作れてしまうので。

懸念は、インストーラから初期設定を触るアプローチが今後とりにくくなることかな?

インストーラ側で初期設定を触る場合は設定データ読み込み処理周りもチェックしないといけないですね。大変だ。。

思い当たる悪い影響・・・初回起動が遅くなる。
 設定壊れるより全然いいとのでOKと思ってます。

初回起動時に return false; する事で呼び出し元で CShareData_IO::SaveShareData() の呼び出しをさせるようにしていますが、もしかしたらこれを呼び出すパスに誘導する必要は無いかもしれないですね。
普通に終了時に設定ファイル保存がされるかもしれないので。未確認です…。。

@berryzplus
Copy link
Contributor

厳密にはMRUが0件という判定ではないです。MRUのエントリが存在するかどうかの判定にしています。
MRUが0件だとインストール直後の初回起動で何もファイルを開かないで終了とかMRU消去でそういう設定が作れてしまうので。

なんか対策した方がいいですかねぇ。
この現象を逆手にとって「MRUクリアすると初期設定に戻ります!」みたいな♪
・・・ただのバグですね。なんかちゃんと識別できる方法を考えたほうがよいのかもです。

初回起動時に return false; する事で呼び出し元で CShareData_IO::SaveShareData() の呼び出しをさせるようにしていますが、もしかしたらこれを呼び出すパスに誘導する必要は無いかもしれないですね。
普通に終了時に設定ファイル保存がされるかもしれないので。未確認です…。。

仕組み自体はこれでいいと思ってます。
return true;をreturn false;に変えますって言ったって、もともと戻り値チェックしないうんこ実装だったので。

終了時、何も問題なければ管理プロセスが落ちるときに設定ファイルが保存されます。
ただ、編集済みファイルを保存せずにwindowsを終了させようとすると、「以下のプログラムが原因で終了できません→強制終了」ってなるじゃないですか。あれで落とすと設定は保存されません。何気に、毎回そうやって落としてる人っているんじゃないかなぁ、とか。職場のPCはだいたいいつもそうだし・・・。終了シーケンスの変更はxp時点のものなので、これは次リリースまでに対策したい既知のバグでもあります。

このPRについて、とくに問題はないと思ってますが、他の人の反応をみたい感じなので可能なら少しマージを遅らせてほしいです。ま、ぼくならマージされてても気になったことはコメントしますけどw

@beru
Copy link
Contributor Author

beru commented Nov 17, 2018

インストーラーが配置した初期設定ファイルかどうかを厳密に確認するなら、特定のセクションとエントリ(言語DLLの)しか存在しないかを判定する事になると思いますがその記述がすんなり書けそうになかったので MRU のエントリの非存在で判定しています。

@beru
Copy link
Contributor Author

beru commented Nov 17, 2018

設定ファイルの保存に関してですが、MRUとか頻繁に変更されるものは別のファイルに分けるみたいな事を @moca_skr さんが紅桜でやっていたような気がします。使った事無いですが…。まぁでも設定ファイルを分けたり設定ファイルのフォーマットをINIから変えるのが正解かというと、変更によるデメリットもある筈なので今更あえて変更するのも良くないかもしれないですね。

設定を全然変更していない場合でも終了時に設定を保存しているようなので、それはしないようにした方が良いと思います。

@berryzplus
Copy link
Contributor

紅桜はMocaさんじゃなかったような・・・
正確に覚えてませんがsuzuなんとかさん。

MRUをiniから切り離す試みは、変更量そんなでもないはずです。
最近使ったファイルと最近使ったフォルダ用に専用クラスがあるので、局所的な変更になると思われます。win10のMRU機能はサクラエディタ以上に高度になってて使い勝手が良いので、いっそのこと外してもいいのかな、と思っています。そうするとMRUで見れなくなっちゃう。

ini初期化用のエントリを用意して、インストーラで書いてもらうのが無難なのかな・・・

「設定リセット」ってボタンを共通設定のどっかに用意して、それを押すとサクラエディタが再起動してまっさらな初期設定に戻るって新機能を妄想。

@beru
Copy link
Contributor Author

beru commented Nov 18, 2018

紅桜はMocaさんじゃなかったような・・・
正確に覚えてませんがsuzuなんとかさん。

あ、ほんとですね。適当に記憶してました。
https://bitbucket.org/suzzsegv/benizakura

MRUをiniから切り離す試みは、変更量そんなでもないはずです。
最近使ったファイルと最近使ったフォルダ用に専用クラスがあるので、局所的な変更になると思われます。win10のMRU機能はサクラエディタ以上に高度になってて使い勝手が良いので、いっそのこと外してもいいのかな、と思っています。そうするとMRUで見れなくなっちゃう。

過去のMRU記録の引き継ぎも出来るようにしたりとか、従来の記録方法も選択できるようにしたりとか考えるとややこしくなりそうですね。。一方通行で良いのかもしれませんが。

win10のMRU機能というのは、Windows7から追加された Jump List の事を指していると考えて良いですか?

ini初期化用のエントリを用意して、インストーラで書いてもらうのが無難なのかな・・・

そっちの方が良いかも知れないですね。MRUのエントリの非存在で設定リセットというのが後になって牙を剥かないか心配なので。。

「設定リセット」ってボタンを共通設定のどっかに用意して、それを押すとサクラエディタが再起動してまっさらな初期設定に戻るって新機能を妄想。

Visual Studio だとメニューのツールの設定のインポートとエクスポート(Import and Export Settings Wizard)という画面で設定の読み書きやリセットが行えますね。サクラエディタにインポートとエクスポートを付けないままリセット機能だけを追加すると、「間違ってリセット押しちゃったけどバックアップ取ってなかったよ、どうしてくれるんだ」と怖い人達に詰め寄られる可能性が有るとかないとか。

@m-tmatma
Copy link
Member

appveyor で rebuild かけたけどだめですね。

@berryzplus
Copy link
Contributor

appveyor で rebuild かけたけどだめですね。

ダメですね。

エラー原因は hhc.exe のエラーだけで、他のビルドは通っているからPR自体に問題はないと思っています。「×」マークが気になるっちゃ気になりますが。

@berryzplus
Copy link
Contributor

win10のMRU機能というのは、Windows7から追加された Jump List の事を指していると考えて良いですか?

そうです。

サクラエディタはジャンプリストには何故か対応しています。
「お気に入り機能との連携」みたいな要望を見かけたことはないんですが、機能が被ってるのでwindowsに任せてしまってもよいのかな、と思っています。複数ファイルをまとめて開く機能とか前回の作業状態を復元する機能とか・・・

設定のインポート・エクスポート機能は既にあると思います。
サクラエディタのコードベースの中で五本の指に入りそうなカオス実装ですけども 😭

@m-tmatma
Copy link
Member

#622 で chm のビルドに失敗したときにリトライするように実装してみました。
失敗しなればこれまでと同じです。

@m-tmatma
Copy link
Member

#622 をマージ後にこの PR のリビルドをかけました。

@m-tmatma
Copy link
Member

#622 をマージ後にこの PR のリビルドをかけました。

https://ci.appveyor.com/project/sakuraeditor/sakura/builds/20382916/job/she82xg2avnnq6el

以下で失敗している。

c:\projects\sakura\sakura_core\dlg\cdlgfavorite.cpp(946): warning C4267: 'argument': conversion from 'size_t' to 'int', possible loss of data [C:\projects\sakura\sakura\sakura.vcxproj]
c:\projects\sakura\sakura_core\dlg\cdlgfavorite.cpp(977): warning C4267: 'argument': conversion from 'size_t' to 'int', possible loss of data [C:\projects\sakura\sakura\sakura.vcxproj]
c:\projects\sakura\sakura_core\dlg\cdlgfavorite.cpp(1138): warning C4267: 'initializing': conversion from 'size_t' to 'int', possible loss of data [C:\projects\sakura\sakura\sakura.vcxproj]
c:\projects\sakura\sakura_core\dlg\cdlgfavorite.cpp(1175): warning C4244: '=': conversion from 'LPARAM' to 'int', possible loss of data [C:\projects\sakura\sakura\sakura.vcxproj]
  CDlgFileUpdateQuery.cpp
  CDlgFind.cpp
  CDlgGrep.cpp
c:\projects\sakura\sakura_core\cgrepenumkeys.h(65): warning C4267: 'initializing': conversion from 'size_t' to 'int', possible loss of data (compiling source file ..\sakura_core\dlg\CDlgGrep.cpp) [C:\projects\sakura\sakura\sakura.vcxproj]
c:\projects\sakura\sakura_core\dlg\cdlggrep.cpp(182): warning C4244: 'initializing': conversion from 'LRESULT' to 'int', possible loss of data [C:\projects\sakura\sakura\sakura.vcxproj]
c:\projects\sakura\sakura_core\dlg\cdlggrep.cpp(703): warning C4267: 'initializing': conversion from 'size_t' to 'int', possible loss of data [C:\projects\sakura\sakura\sakura.vcxproj]
ERROR in msbuild.exe errorlevel 1
error build-sln.bat       
Command exited with code 1

@berryzplus
Copy link
Contributor

何が起きているか分かりませんな・・・w
負荷が高い、という理由で落ちているならそれと分かるログが出て欲しいなぁ。

@KENCHjp
Copy link
Member

KENCHjp commented Nov 18, 2018

ローカルでは再現しないの?

@m-tmatma
Copy link
Member

通ったみたい

@berryzplus
Copy link
Contributor

これはこのままマージでいいように思っていますがどうでしょうか。

設定読み込みをやめて続行するかどうかの判断条件を改善する話が出ていて、ほぼほぼ内容決まってる感じですが、それは別件でPRいれたほうがよい気がしています。

タイミングは任せます > @beru さん

@beru
Copy link
Contributor Author

beru commented Nov 23, 2018

それではいったんこれで merge してしまいます。

インストーラー側で 設定リセット用のエントリ を追加して、サクラエディタ側でその設定を見てリセットするっていう方法案でもそんなに単純には行かないような気がしてきました。

  • 既存インストールのバージョンアップで既に設定ファイルが存在する場合にどうなるか未検証
    • おそらく InnoSetup の記述では ini ファイルが無かったら作成で存在していたら更新なので、単純にリセット用のエントリを追加するという対応ではまずいかも?
  • 設定リセット用のエントリ値が TRUE 時に空設定の読み込みを行わないようにしても、設定リセット用のエントリ値の値を FALSE にする対応が必要

@beru beru merged commit f1122b8 into sakura-editor:master Nov 23, 2018
@beru beru deleted the new_installation_update_settings branch November 23, 2018 02:47
@beru
Copy link
Contributor Author

beru commented Nov 23, 2018

@berryzplus さん

設定のインポート・エクスポート機能は既にあると思います。
サクラエディタのコードベースの中で五本の指に入りそうなカオス実装ですけども 😭

下記の設定は個別にインポート・エクスポート操作が出来るようですが、 sakura.ini の設定全体のインポート・エクスポート機能は見当たりませんでした。そんな機能が要るのかと言われたら、sakura.ini ファイルコピーすれば良いので微妙ですが…。

  • タイプ別設定
    • 色指定
    • 正規表現キーワード
    • キーワードヘルプ
  • 共通設定
    • メインメニュー
    • カスタムメニュー
    • 強調キーワード

@berryzplus
Copy link
Contributor

berryzplus commented Nov 23, 2018

それではいったんこれで merge してしまいます。

りょ。

インストーラー側で 設定リセット用のエントリ を追加して、サクラエディタ側でその設定を見てリセットするっていう方法案でもそんなに単純には行かないような気がしてきました。
•既存インストールのバージョンアップで既に設定ファイルが存在する場合にどうなるか未検証 ◦おそらく InnoSetup の記述では ini ファイルが無かったら作成で存在していたら更新なので、単純にリセット用のエントリを追加するという対応ではまずいかも?
•設定リセット用のエントリ値が TRUE 時に空設定の読み込みを行わないようにしても、設定リセット用のエントリ値の値を FALSE にする対応が必要

実装箇所 機能 備考
exe 設定リセットエントリ 起動時に特定のエントリを見付けたら以降のiniを読まない結果、設定がリセットされる。
exe 設定リセットボタン 「サクラエディタの全終了」を実行し、ini保存の代わりに設定リセットのエントリを書き込む。
installer(新規) 設定リセットエントリを書く 無条件に書く。
installer(既存) 設定リセットエントリを書かない 既存の設定が維持される。

設定リセットエントリは ある or なし の二値で考えています。

具体的なことは今考えてる感じですけど、こんなん。

; sakura.ini テキストエディタ設定ファイル

[Common]
szLanguageDll=
bResetAllSettings=1

bool型なので bResetAllSettings=0 も可能ではあります。

一般の設定項目と同列に扱うと面倒なことが起きそうなので、
書くなら bResetAllSettings=1 固定にして、
一般の設定項目と同じ入出力フローには乗せない感じがよいと思います。

更新インストールについては、なんも考えとらんです。

新機能追加時の設定追随をどう考えるかでissueがあった気がします。

windowsの通知機構を活用したいなぁ、と思ってますけど、そこよりもエディタ機能の強化の方を前に進めたいです 😭

@berryzplus
Copy link
Contributor

#620 (comment)

うーむ。確かに。
一般的なアプリにある「設定のエクスポート/インポート」にあたる機能が存在していませんね。

@beru
Copy link
Contributor Author

beru commented Nov 23, 2018

追加の実装箇所として、「exe 側に 設定リセット エントリ を あるなし に変更、もしくはエントリを削除する」も必要です。そうしておかないと一度 設定リセット エントリ が ある になったら起動するたびに設定をリセットしてしまう事になると思います。

インストーラーについて

InnoSetup の [INI] section のヘルプを見ると、Flags の中に createkeyifdoesntexist というのは有りますが昔の設定ファイルにはこれから新規に追加する(かもしれない) 設定リセット エントリは存在し無いのでこれだと判定には不向きですね。

しかし szLanguageDll エントリにはこれを付けた方が良い気がします。言語設定は LanguageDetectionMethod=uilanguage でOSのUI表示の言語にしていますが、ユーザーが各アプリ側の表示言語設定をそれに合わせているとは限らないからです。

(今も既に szLanguageDll エントリで使われていますが)Check パラメータでスクリプトの関数呼び出しで適用判定が出来るのでそこで FileExists で設定ファイルが存在するかで判断する方法が取れそうです。

@berryzplus
Copy link
Contributor

追加の実装箇所として、「exe 側に 設定リセット エントリ を ある → なし に変更、もしくはエントリを削除する」も必要です。そうしておかないと一度 設定リセット エントリ が ある になったら起動するたびに設定をリセットしてしまう事になると思います。

設定リセット用エントリを通常の設定項目と同じ入出力フローに含めない設計がよいと思っています。サクラエディタのiniファイルは、毎回全設定項目を書きだして上書きする仕様なので、通常の入出力フローに含めないということは「普段は絶対書かない」ということです。設定リセットを行う場合は、その場でデフォルト設定を書きだすようになっていたと思いますが、設定リセットエントリは書き出しが行われた時点で設定ファイルからいなくなります。

インストーラについては、ちゃんと考えられてないです 😢

@beru
Copy link
Contributor Author

beru commented Nov 23, 2018

設定リセット用エントリを通常の設定項目と同じ入出力フローに含めない設計がよいと思っています。サクラエディタのiniファイルは、毎回全設定項目を書きだして上書きする仕様なので、通常の入出力フローに含めないということは「普段は絶対書かない」ということです。設定リセットを行う場合は、その場でデフォルト設定を書きだすようになっていたと思いますが、設定リセットエントリは書き出しが行われた時点で設定ファイルからいなくなります。

インストーラについては、ちゃんと考えられてないです 😢

設定リセットボタンを押した時に初期設定ファイルの書き込みを行うのだからその場合は設定リセットエントリの存在と起動時の初期化(設定ファイルから読んだ内容で設定情報を更新しない)動作に頼る必要も無いという事ですね。それは理解できます。

設定リセット用エントリの話が出てきたのはインストーラーが書いた中途半端な設定ファイルの判断用がそもそもですが、そのエントリを読み込み時に更新するとなると(なんかやってる事が強引ですが)読み込み時には CShareData_IO::ShareData_IO_2 の引数の bReadtrue なので途中で、cProfile.SetWritingMode(); を呼んでから出ないと設定リセットエントリの書き込みは行えない事に気づきました。

設定リセットエントリを使わない方法を考えました。

設定ファイルが存在しない状態で起動した場合の表示言語DLLを、OSの表示言語が日本語で無かったらプログラム側で sakura_lang_en_US.dll に切り替えるというのはどうでしょうか?今はインストーラーが [Common] セクションの szLanguageDll エントリを書き込んでいますがそれを止めるという事です。そうすればインストーラーによって中途半端な設定ファイルが作られる事は無くなります。プログラム側の処理は増えますがしょうがないかなと。

@berryzplus
Copy link
Contributor

berryzplus commented Nov 23, 2018

設定ファイルが存在しない状態で起動した場合の表示言語DLLを、OSの表示言語が日本語で無かったらプログラム側で sakura_lang_en_US.dll に切り替えるというのはどうでしょうか?

正直にいうとそんな感じにしたいです。

言語設定のエントリがない場合はOSの言語選択に追随くらいの勢いで自動判定させたいです。

実現するためには英語化というか、国際化対応ってなんだっけ?から考え直す必要があると思っていて、他の対応に優先して進める決断をできないでいます。#610 のissueの件もあるので、どっかで手は入れないといけないんですけど。

そうすればインストーラーによって中途半端な設定ファイルが作られる事は無くなります。

それでいいと思ってます。

もちろん、別件として「中途半端な設定ファイルを正しく読めない」は解決せにゃならん問題だとおもっていますが、当座の対応としてはそれで十分だと思います。

@KENCHjp
Copy link
Member

KENCHjp commented Nov 24, 2018

そうすればインストーラーによって中途半端な設定ファイルが作られる事は無くなります。

それでいいと思ってます。

それでいいと思います。
インストーラー側は実装に手をつけるのはどうかなってことで対応したので。

@ds14050
Copy link
Contributor

ds14050 commented Nov 24, 2018

@beru
Copy link
Contributor Author

beru commented Nov 24, 2018

@ds14050 さん、転載ありがとうございます。
こちらでも落ちる事を確認しました。#643 を作成しました。

@m-tmatma m-tmatma added this to the next release milestone Dec 1, 2018
@KENCHjp
Copy link
Member

KENCHjp commented Dec 14, 2018

追いかけれてませんが、結局のところ、インストーラーは、iniファイルの szLanguageDll を生成していることそのものをやめてもよいんでしたっけ?
iniファイルがあったらやめるってのは、[Files]セクションじゃないので、 @beru さん書かれてますが、ちょっと関数書かないとだめかなと。

@berryzplus
Copy link
Contributor

インストーラでini書くのはやめたほうがいいかも、なレベルで認識はあってますが
具体的な結論はでてないです。

このPRは単体で「MRUリスト(最近使ったファイル)を全クリアした場合に設定を初期化する」という変更なので、どっかに注意書きしとかないと「バグだ」と騒がれる懸念はあります。書いてあっても騒ぐ人は騒ぐんでしょうけど・・・。

その点についても「どうする」までの合意は取れてなかったはず。

@KENCHjp
Copy link
Member

KENCHjp commented Dec 14, 2018

了解です。
とりあえず、バグは内在してるかと思うのでなんかたてるか、いっそ、いったんインストーラーではiniファイル作らないようにしたほうがいいかもですね。

@beru
Copy link
Contributor Author

beru commented Dec 14, 2018

インストーラーでINIファイル作るようにしたのはもっと国際化対応したいからだと伺ってます。
ただプログラム側が中途半端な設定ファイルにうまく対応していないので無理やりな対応をして、そこで状況は止まってます。

  • プログラム側で、設定ファイルが無かった場合の起動時にOSの表示言語設定が日本語じゃなかったら、言語DLLを sakura_lang_en_US.dll にする。
  • インストーラーではINIファイルを作らないようにする

的な対応をするのが良いと思います。が、手は付けていません(必要に応じてカイジの利根川の名言を再生して下さい)。

@beru
Copy link
Contributor Author

beru commented Dec 14, 2018

このPRは単体で「MRUリスト(最近使ったファイル)を全クリアした場合に設定を初期化する」という変更なので、どっかに注意書きしとかないと「バグだ」と騒がれる懸念はあります。書いてあっても騒ぐ人は騒ぐんでしょうけど・・・。

補足しておきますと、設定ファイルの MRU セクションの _MRU_Counts エントリが存在しない場合に設定読み取りを中断する事で設定をデフォルト値のままにしています。

例えばサクラエディタの 履歴とお気に入りの管理 の画面から履歴の削除をしても、エントリ値が 0 にはなりますがエントリ自体が無くなるわけでは無いので問題は無いです。

「MRUリスト(最近使ったファイル)を全クリアした場合に設定を初期化する」 という記載だと短絡的に、履歴クリアしたら設定も初期化されちゃうの?、と誤解されないか心配です。

なお自分のPRを弁護しましたが、思いもよらぬ操作で設定が消失するバグが存在し無い事の証明は出来ません。

@berryzplus
Copy link
Contributor

「MRUリスト(最近使ったファイル)を全クリアした場合に設定を初期化する」 という記載だと短絡的に、履歴クリアしたら設定も初期化されちゃうの?、と誤解されないか心配です。

そういう変更だと勘違いしてました。 ←
フォローありがとうございます。

@beru
Copy link
Contributor Author

beru commented Jan 4, 2019

InnoSetupのソースコード を調べてみたところ、WindowsAPI の GetUserDefaultUILanguage を使って表示UI言語を取得していました。

という事で起動時に設定ファイルが無くて、GetUserDefaultUILanguage の戻り値を調べて日本語じゃなかったら、言語DLLを sakura_lang_en_US.dll にするのが良いかなと思います。

言語識別子の一覧は下記のURLに載っていました。
https://docs.microsoft.com/ja-jp/windows/desktop/Intl/language-identifier-constants-and-strings

HoppingTappy pushed a commit to HoppingTappy/sakura that referenced this pull request Jun 11, 2019
…e_settings

設定データ読み込み処理において言語設定切り替え後にMRUエントリが無い場合は新規インストール後とみなし false を返すように変更
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants