多言語アプリケーションのコントロールの配置やサイズが言語ごとに変わってしまったら

多言語化した後に、コントロールの位置やサイズを変更していて、ふと気づくと言語ごとに配置やサイズが違ってしまっていた、ということがあります。

サンプルは既定値が英語で、多言語対応として日本語を追加しました。

※多言語化手順はVisual Studioで多言語アプリケーションを作成するを参考にしてください。

「en」英語(既定値)

「ja」日本語

こういうことが何故起こってしまったかというと、Languageの既定値が英語の時、既定値ではない日本語でコントロールの位置やサイズを変更してしまったからです。

 

多言語化したら、コントロールの位置やサイズはLanguageが「既定値」の状態で変更する

多言語化した場合、基本的にコントロールの位置やサイズを変更するときはLanguageが「既定値」の状態で変更しなければなりません。

しかし、うっかり既定値以外の状態で変更してしまった場合、それぞれのテキストだけでなくコントロールの位置やサイズ情報も差分情報として日本語ファイルに保存されます。

日本語と英語では文章の長さなどの違いもあることから、この機能を活用する場合もありますが、言語に関係なく位置とサイズは統一したい場合は、余計なお世話ということになります。

サンプルのように既定値が英語の時、Languageが日本語の状態でコントロールを変更した場合、言語ごとに異なる配置、サイズになります。

 

言語間で統一するには、既定値の英語の状態で変更しなければならないため、日本語で保存されてしまった位置やサイズ情報を削除します。

日本語のForm1.ja.resxをクリックし、中身を表示します。Form1.ja.resxは、あくまで既定値との差分情報のみ保存されればいいので、テキストだけ変更する場合は、本来はこの文字列だけ保存されていればOKということになります。

 

「文字列」となっているところを「その他」に変更します。「その他」にはSizeやLocation情報が保存されています。これらは日本語の状態で変更したので、差分情報として扱われたため保存されてしまっています。

 

これらは不要なので削除します。表の左上隅をクリックし、全て選択し、削除をクリックします。

 

「他のプロジェクト アイテム(フォーム、コントロールなど)の一部であるリソース ファイルを編集しようとしています。このアイテムを編集すると~・・・このファイルの編集を続行しますか?」の警告メッセージが表示されますので、「はい」を選択します。

 

「その他」の中身は空になりました。

これでアプリケーションを起動してみます。

「ja」日本語

日本語表示も既定値と同じ、元のコントロール位置、サイズに戻りました。

 

うっかりLanguageが既定値以外の状態で、コントロールの位置やサイズを変更してしまった場合は、余分な情報を削除すれば元通りになります。

コントロールの配置は再度既定値の状態で配置し直さなければなりません。当初ちょっとはまり、その後は分かっているにも関わらず何度かやってしまいました・・・。

コメント