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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

4095閲覧

日本語以外に対応した表示の仕方「ロケール」

suu

総合スコア13

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2015/11/18 09:15

編集2015/11/18 15:33
import java.util.Locale; public class LocaleDisplay { public static void main(String[] args) { // 現在のロケール取得 Locale local = Locale.getDefault(); // jaを得る String language = local.getLanguage(); if( "ja".equals(language) ){ System.out.println("こんにちは"); }else{ System.out.println("hello"); } } }

使うPC環境によって言語が違いますが、例えば英語表示させたい場合
上のを思いついたのですが、表示する言葉が多い場合、if文が多くなるので
下の配列にデータベースみたいに入れてみました

import java.util.Locale; public class LocaleDisplay_Allay { public static void main(String[] args) { Locale local = Locale.getDefault(); String language = local.getLanguage(); String[] asa = {"おはよう","morning"}; String[] hiru = {"こんにちは","hello"}; String[] ban = {"さよなら","bye"}; int a; if( "ja".equals(language) ){ a = 0; }else{ a = 1; } System.out.println(asa[a]); System.out.println(hiru[a]); System.out.println(ban[a]); } }

これらはよく使われる記述なのか? 他にやり方があるのか知りたいです。

今はandroidアプリが作りたくてjavaを勉強してます
android studioにはエディタで弄れるローカライズ方法が備わっていると聞いたのですが
javaではどうするのだろうと気になったので質問しました

>>>>>>>>
みなさんの言っていたPropertiesで書いてみました
try分の例外の書き方がわからなかったのでテキトウですがなんとか表示されました
あと文字化けに苦労しましたがnative2asciiで出来ました
自分の参考にコードを載せときます

jp.properties

asa=おはよう hiru=こんにちは ban=さよなら

en.properties

asa = morning hiru = hello ban = bye
import java.util.Locale; import java.util.Properties; import java.io.FileInputStream; public class LocaleDisplay_Properties { public static void main(String[] args) { Locale local = Locale.getDefault(); String language = local.getLanguage(); String country; if( "ja".equals(language) ){ country = "jp.properties"; }else{ country = "english.properties"; } Properties properties = new Properties(); try { FileInputStream myConfFileIn = new FileInputStream(country); properties.load(myConfFileIn); } catch (Exception ex) { System.out.println("error"); } System.out.println(properties.getProperty("asa")); System.out.println(properties.getProperty("hiru")); System.out.println(properties.getProperty("ban")); } }

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

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

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

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

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

guest

回答4

0

java で用意されている property については、他の回答の通りです。

私はjava で用意されている property を使わない場合についてコメントをしたいと思います。

質問文のコードでは、asa, hiru, ban をそれぞれ配列にしています。

大きいプログラムでは、文字列の種類数が大きくなります。
ひとつひとつに配列名をわりあてるのは大変です。
そこで、次のよう対処する案があります。

Messages として Hash を用意し、
Mesages["ja"]['asa"] とすると "おはよう"
Mesages["en"]['asa"] とすると "moning"

Messages["ja"]["hiru"] とすると "こんにちは"
Messages["en"]["hiru"] とすると "hello"

Messages["ja"]["ban"] とすると "さよなら"
Messages["en"]["ban"] とすると "bye"
となるようにするのです。

Messages の値設定は
ソースコード中で文字列を直接 書いて組み立てていく
という方法がまずは頭に浮かびます。
でも Database に
"ja", "asa", ”おはよう”
のような行を登録して、プログラム起動時にデータベースから値を持ってくる
という方法もあるとおもいます。

java のproperty の方法は,
Database でなく、ロケール毎に分割させたテキストファイル
から読み込むようにしているわけです。

投稿2015/11/18 14:48

katoy

総合スコア22324

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

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

suu

2015/11/18 15:34

こんなやり方もあるのですね。参考にさせてもらいます
guest

0

既に他の回答者さま方が書かれていますように、プロパティーファイルに書いておくことで、言語ごとにメッセージを切り替えることができます。
java.util.ResourceBundleというクラスを使います。詳しくは、参考リンクのページをご覧ください。

少し面倒なのが、マルチバイト文字(日本語の全角文字など)を格納する際に、native2asciiというコマンドを通して変換しなければならないという点です。

EclipseなどのIDEではプラグインによってその手間を省くことができます。

余談:ResourceBundleはいろいろ使い勝手が悪いので、私は独自のライブラリー(まだ未完成ですが)を使っています。

参考リンク:

ResourceBundle - NAVER まとめ
http://matome.naver.jp/odai/2142034276402703301

※少し古い記事↓ですが...

プログラマーの常識をJavaで身につける(9):コードから情報を追い出せ!プロパティファイルの常識 (3/3) - @IT
http://www.atmarkit.co.jp/ait/articles/0711/29/news143_3.html

投稿2015/11/18 14:05

argius

総合スコア9390

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

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

suu

2015/11/18 15:35

文字化けに苦労しましたがnative2asciiで解決しました。ありがとうございます
guest

0

考え方はあっています。
同じ変数に、日本語、英語、フランス語…と対応する言葉を当てはめていきます。

今回は配列に入れていますが、jiu3bao3さんがおっしゃるようにpropertiesというファイルで対応するのがメインになります。
propertyファイルごとに、日本語、英語、と作っていくイメージです。

英語圏であれば、英語のpropertyファイルを読み込み、日本語圏であれば日本語のpropertyファイルを読み込むという手法で対応しているのです。

投稿2015/11/18 10:52

anonymouskawa

総合スコア856

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

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

suu

2015/11/18 15:36 編集

propertiesファイルで作ってみました。ありがとうございます
guest

0

ベストアンサー

私はロケール別にpropertyファイルを作成して、そこからメッセージを取り出すようにしています。

投稿2015/11/18 09:18

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

suu

2015/11/18 15:36

ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問