質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

Q&A

解決済

3回答

3342閲覧

リソースファイル以外で行う多言語対応の方法

ianaka3

総合スコア24

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

1グッド

1クリップ

投稿2020/01/15 14:58

編集2020/01/15 22:01

いつもお世話になっております。
何かいい方法がありましたら、教えて頂ければと思います。

タイトルにあります通り、リソースファイルを使用しないで多言語対応をしたいと考えています。

環境について

  • Visual Studio2019
  • Windowsフォームアプリケーション(C#) .Net Framework 4.8
  • ASP.NET MVC(C#) .Net Framework4.8

多言語対応するにあたり一番最初に思いつくのがリソースファイルを用いた方法かと思います。
私自身もその方法にしようかと思っておりましたが対応する言語が増えるたびにリソースファイルを作成するのは
大変だから、他の方法にして欲しいと上司から依頼がありました。

そこで、UI上に表示する文言だったりメッセージとそれに該当するキーをファイルに保存しておき
フォームやメッセージを表示するタイミングで、現在のカルチャとキーから表示する内容を取得すればいいのでは
ないかと思っています。

しかし、その実現方法がわからずに困っています。

フォームアプリケーションとASP.NET MVCで作成したWebアプリを一つのパッケージとするため、
多言語対応の仕組みは、フォームアプリケーションとASP.NET MVCで同じ方法にしておきたいと思っています。

文言などを保存しておくファイルの形式としては何が適当なのでしょうか?
(XMLやJSON形式?)

Web上を色々と探してみましたが、探しかたが悪いのか有力な情報は得られませんでした。
直接的な回答でなくても、リソースファイル以外で多言語対応の方法を紹介しているURLを教えて頂くだけでも
結構ですので、何か情報を頂けませんでしょうか?

よろしく、お願いいたします。

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/01/15 21:57

ASP.NET のタグをつけて下さい。
guest

回答3

0

回答にあたっての免責事項(オフトピック)

以下の回答はリソースファイルを推奨するものであるため、
外部翻訳ファイルを作成するという点に対しての解決策ではありません。
ASP.NETにおける多言語化も、言及できていません。
あらかじめご了承願います。

事前対応

設計段階から織り込んでおく必要があります。

リソース化

WinForms等の場合は、Localizableプロパティをtrueにする必要があります。(default:false)
リテラル(ソースコード上に埋め込まれている文字列)で、画面表示に関わる部分については、リソースを使用するように変更する必要があります。

注意点 - 複数形の扱い

数量を表すものについては積極的にFormatを使用するべきです。
英語等において単数・複数の表現について「{0} item(s)」等の表現を用いることができるように合意しておくことを推奨いたします。(うまくできる方法はある?)

注意点 - サーバー

サーバーコントラクト等によるサーバー処理がある場合、クライアントのロケールがサーバーへ連携されないことがあります。
IISの設定を含めて確認する必要があります。

注意点 - 日付

ロケールを反映することにより、サーバー上でDateTimeのタイムゾーンも反映されることがありますので、よく注意しましょう。
ご存じでしょうが、海外ではYY/MM/DDではありません。
MM/DD/YYだったりするので、日付の入出力には注意してください。
数字の3桁区切りがドットだったり、小数点の表記がカンマだったりします。

注意点 - RTL言語

左右が反転します。

注意点 - 3rdパーティのライブラリ

ActiveReports等、デザイナで対応しているものが多いですが、
物によっては、全く対応していないものがあります。

注意点 - デザイナ

言語を選択したうえで、コントロールの配置を変更した場合、
規定の言語へは配置情報が反映されません。(WinFormsの場合)
※特定の言語でデザインが崩れる等、簡単に発生します
デザイナ上での言語選択での翻訳はあまりお勧めできません。
※全言語でくまなく動作確認をするのであるのならば、何も言うことはありません

利用中のロケールを変更せずにデバッグしたい

スレッド上にCurrentUICultureおよびCurrentCultureプロパティが存在するので、それらの値を変更することで、デバッグ用にロケールを切り替えることが可能です。
ただし、新たにスレッドを起こしている場合や、Delegateによる実行等、コンテキストスイッチによりそれらの情報が失われて、ユーザー環境でのロケールとなってしまうことがあるのでご注意ください。

事例および解決案(ResXManager)

ツールを用いることで以下の問題点に対応することができています。

https://marketplace.visualstudio.com/items?itemName=TomEnglert.ResXManager

スタンドアロン版は以下からダウンロード可能です。
https://github.com/tom-englert/ResXResourceManager/releases

翻訳に回す際に一覧でほしい

Excelへ出力することが可能です。
取り込む際にも、Excelをそのままインポートすることができます。
ツールとしては、変更したらそのままファイルに反映されるので、ソース管理をしたうえで、変更することを推奨いたします。

Excelのみでは文脈がわからないことがあるので、別途資料を作る必要が出てくるかもしれません。(見積・作業範囲に注意してください)

スタンドアロン版の注意

言語を追加しても、プロジェクトへ対象の言語が追加されません。
言語をプロジェクトへ追加する場合は、VisualStudioのプラグインをインストールする必要があります。

そのほか機能

ライセンスとして大丈夫なのかはわかりませんが、機械翻訳を使うことできます。(Microsoft Translator)

強力な連携ツール

有料ですが、翻訳者と協力しやすいプラットフォームです。

http://transifex.com

リソースファイルをそのままアップロード・ダウンロードできます。
リソースファイルの追加等はResXManagerと組み合わせて行うと作業しやすくなるかもしれません。

投稿2020/01/20 18:10

testset

総合スコア221

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

頂いた内容は、解決につながるアンサーではないと判断させて頂き、
自己解決とさせて頂きます。

リソースファイルの使用も含めて、再検討いたします。

投稿2020/01/20 12:29

ianaka3

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/01/20 12:36 編集

解決策は上司と話し合ってリソースファイルを使うことにするだと思います。回答欄に書くなら、少なくとも、上司と話し合った結果どうすることにしたのか、何故そうすることになったかを書いていただければと思います。
guest

0

ASP.NET のフレームワーク組み込みの多言語対応機能がどのような仕組みで動いているか理解してますか?

resource を使わないということは組み込みの機能を捨てて、あなたが独自機能を自ら作って組み込むということになります。

不可能ではないかもしれませんが、現実的ではありません。(はっきり言うと、ここでこのような質問をしているようでは無理だと思います)

将来言語が増えたときの対応が容易になると上司が思っての指示と言うことですが、そうであれば上司にやり方を聞いてください。ここで聞くのは間違ってます。

投稿2020/01/15 21:51

編集2020/01/15 22:03
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ianaka3

2020/01/20 12:26

ご指摘いただき、ありがとう御座いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問