2016-11-25 9 views
2

表示名からテキスト音声言語を設定しようとしています。問題は、Text-to-SpeechにsetLanguageのロケールが必要であることです。表示言語からロケールに進む方法は?私が最初にこのように私のリサイクル業者のリストを設定します。言語表示名からロケールを取得

public void getSystemLanguages() { 
    systemLanguages = Resources.getSystem().getAssets().getLocales(); 
    for (int i = 1; i < systemLanguages.length; i++) { 
     String sL = systemLanguages[i]; 
     Locale loc = Locale.forLanguageTag(sL); 
     String locDisplayResults = loc.getDisplayName(); 
     languagesList.add(new Languages(locDisplayResults)); 
     Collections.sort(languagesList, new Comparator<Languages>() { 
      @Override 
      public int compare(Languages languages1, Languages languages2) { 
       return languages1.getLocaleDisplay().compareTo(languages2.getLocaleDisplay()); 
      } 
     }); 
     recyclerAdapter.notifyDataSetChanged(); 
    } 
} 

私は、このようになりますリサイクラーアダプタがあります。

public void onClick(View view) { 
              final Languages currentLanguages = languagesList.get(getAdapterPosition()); 
              Snackbar snackbar; 
              snackbar = Snackbar.make(view, currentLanguages.getLocaleDisplay() + " selected", Snackbar.LENGTH_INDEFINITE) 
                .setAction("Next", new View.OnClickListener() { 
                 @Override 
                 public void onClick(View v) { 
                  Intent intent = new Intent(v.getContext(), MainActivity.class); 
                  chosenLanguage = localeDisplay.getText().toString(); 
                  intent.putExtra("language_key", chosenLanguage); 
                  v.getContext().startActivity(intent); 
                 } 
                }); 

              View snackBarView = snackbar.getView(); 
              snackBarView.setBackgroundColor(grey_blue); 
              snackbar.show(); 
             } 

を私は以上を費やしているが、達成することはかなり簡単であるべきだと思いますこれで一週間は成功しません。どんな助けも素晴らしいだろう!

編集:

public class Language { 

public String localeDisplay; 

public Language (String localeDisplay) { 
    this.localeDisplay = localeDisplay; 
} 

public String getLocaleDisplay() { 
    return localeDisplay; 

}} 乾杯:私は誰もがAndreasのソリューションで私を助けることができる場合には、私の語学クラスを追加しています!ここで

は、私が試したものです:

public class Language { 

public String localeDisplay; 
public Locale mLocale; 


public Language(String localeDisplay) { 
    this.localeDisplay = localeDisplay; 
} 

public Language(Locale mLocale){ 
    this.mLocale = mLocale; 
} 

public String getLocaleDisplay() { 
    return localeDisplay; 
} 

public void setmLocale(Locale mLocale) { 
    this.mLocale = mLocale; 
} 

public Locale getmLocale() { 
    return mLocale; 
} 

}

新編集:

public class Language implements Comparable <Language> { 

public String localeDisplay; 
public Locale mLocale; 

public Language(Locale mLocale, String localeDisplay) { 
    if (mLocale != null) 
     this.mLocale = mLocale; 
    if (localeDisplay != null) 
     this.localeDisplay = localeDisplay; 
} 

public Locale getmLocale(){ 
    return mLocale; 
} 

public String getLocaleDisplay(){ 
    return localeDisplay; 
} 

public int compareTo(Language l){ 
    return localeDisplay.compareTo(l.localeDisplay); 
} 

}

+2

*「表示言語からロケールに移行するにはどうすればよいですか?あなたは、表示名と一緒になっている言語タグを覚えておくことで、言語タグからロケールに進むことができます。つまり、 '言語'クラス*(名前は '言語'単数)*を更新します。 'Locale'自体です。 – Andreas

+0

ありがとう、私はあなたの答えをupvoteすることはできませんが、私はそれを試してみましょう。 –

+0

@アンドレアス、可能な限り、どうすればいいか教えていただけますか?私は自分の投稿を編集しました。 –

答えて

0

あなたはブロードキャストを持つことができます:ここでの正しいバージョンがありますロケールの変更を受信する受信者。 https://developer.android.com/reference/android/content/Intent.html#ACTION_LOCALE_CHANGED

このブロードキャストレシーバーは、このアダプターを実装するために使用される変数を設定します。

新しいロケールが変更された後、notifyDatasetChanged()を行う必要があることに注意してください。

幸運にも役に立ちます。

+0

ありがとうございます、あなたのアイデアを見てみましょう! :) –

関連する問題