diff --git a/app/src/main/java/jp/atled/agileworks/model/ApiSessionResponse.kt b/app/src/main/java/jp/atled/agileworks/model/ApiSessionResponse.kt index c1b258fd30e5c9da70b3b349ffaebf60a3360b46..d75f5e7b7c1b64ad981a51408b097a9cbda23185 100644 --- a/app/src/main/java/jp/atled/agileworks/model/ApiSessionResponse.kt +++ b/app/src/main/java/jp/atled/agileworks/model/ApiSessionResponse.kt @@ -14,7 +14,8 @@ data class SessionResponse( data class ResponseSessionUser ( var code: String, var name: String, - var loginId: String + var loginId: String, + var displayLanguage: String ) @JsonClass(generateAdapter = true) data class ResponseSessionUnit ( diff --git a/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebFragment.kt b/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebFragment.kt index 63f8a950086afa41f1724e6431e448e1ccf48855..2362181b2b2561b8c9361a929e93faa52aa17a36 100644 --- a/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebFragment.kt +++ b/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebFragment.kt @@ -32,6 +32,7 @@ class DocumentWebFragment : Fragment(), DocumentWebPresenter { private lateinit var networkEvent: NetworkEvent private lateinit var swipeControl : SwipeControl private lateinit var surveillanceNetwork : SurveillanceNetwork + private lateinit var multilingualControl: MultilingualControl private var webview: WebView? = null private var lastUrl: String? = null private var connectUrl: String? = null @@ -46,6 +47,7 @@ class DocumentWebFragment : Fragment(), DocumentWebPresenter { setLifecycleOwner(viewLifecycleOwner) } networkEvent = NetworkEvent(viewDataBinding) + multilingualControl = MultilingualControl(requireActivity()) return viewDataBinding.root } @@ -299,6 +301,10 @@ class DocumentWebFragment : Fragment(), DocumentWebPresenter { .apply() } if (urlLoading) { + // 多言語対応 + response.user.displayLanguage.let { displayLanguage -> + multilingualControl.setNewLanguage(displayLanguage, webview) + } webview?.let { it.loadUrl(url!!) } diff --git a/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/MultilingualControl.kt b/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/MultilingualControl.kt new file mode 100644 index 0000000000000000000000000000000000000000..f097141c0bc910f9f0e6bbc03ea6efca12b62968 --- /dev/null +++ b/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/MultilingualControl.kt @@ -0,0 +1,58 @@ +package jp.atled.agileworks.view.ui.documentweb + +import android.content.Context +import android.content.res.Configuration +import android.os.LocaleList +import android.webkit.WebView +import androidx.fragment.app.FragmentActivity +import java.util.* + +class MultilingualControl(var activity: FragmentActivity) { + + fun setNewLanguage(displayLanguage: String, webView: WebView?) { + // 現在の設定言語取得 + val locale = Locale.getDefault() + // セッション情報で取得した言語情報をLocaleデータに変換する + val newLocale = convLanguageToLocale(displayLanguage) + + if (locale.language == newLocale.language && locale.country == newLocale.country) { + // 現在の言語設定及び新たな言語設定が同じ場合、以降の処理はスキップする + return + } + + // 新たな言語設定を使用してContextを作成する + val newContext = createContext(newLocale) + + newContext?.let { + activity.getSharedPreferences("settings", Context.MODE_PRIVATE).edit().apply() { + putString("localeLanguage", it.resources.configuration.locales[0].language) + putString("localeCountry", it.resources.configuration.locales[0].country) + apply() + } + activity.recreate() + } + } + + private fun convLanguageToLocale(displayLanguage: String): Locale { + return when (displayLanguage) { + "auto" -> { activity.applicationContext.resources.configuration.locales[0] } // OS設定 + "ja" -> { Locale("ja", "JP") } // 日本語 + "en" -> { Locale("en", "US") } // English + "zh_CN" -> { Locale("zh", "CN") } // 中文(中国) + "zh_TW" -> { Locale("zh", "TW") } // 中文(台湾) + else -> { Locale("ja", "JP") } // 上記以外は日本語 + } + } + + private fun createContext(newLocale: Locale): Context? { + val resources = activity.baseContext.resources + val config = Configuration(resources.configuration) + + // リソース情報設定 + val newLocaleList = LocaleList(newLocale) + LocaleList.setDefault(newLocaleList) + config.setLocales(newLocaleList) + + return activity.baseContext.createConfigurationContext(config) + } +} \ No newline at end of file diff --git a/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginActivity.kt b/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginActivity.kt index 9d2fef87436957e16cae125d35afd307f2bbc655..536ab6c164e9810faec3ecff61e3e76c12f3f532 100644 --- a/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginActivity.kt +++ b/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginActivity.kt @@ -5,34 +5,19 @@ import android.content.Intent import android.content.res.Configuration import android.os.Bundle import android.util.Log +import androidx.appcompat.app.AppCompatActivity import jp.atled.agileworks.R -import jp.atled.agileworks.view.base.BaseActivity import jp.atled.agileworks.view.ui.toDeepLinkArguments import jp.atled.agileworks.view.ui.toDirectOpenArguments -class LoginActivity : BaseActivity() { +class LoginActivity : AppCompatActivity() { private val TAG = "LoginActivity" - private lateinit var multilingualControl: MultilingualControl - override fun onCreate(savedInstanceState: Bundle?) { Log.d(TAG, "call onCreate()") super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) - multilingualControl = MultilingualControl(this) - multilingualControl.multilingualControl() - multilingualControl.setOnItemSelectedListener { newContext -> - newContext?.let { - getSharedPreferences("settings", Context.MODE_PRIVATE).edit().apply() { - putString("localeLanguage", it.resources.configuration.locales[0].language) - putString("localeCountry", it.resources.configuration.locales[0].country) - apply() - } - this.recreate() - } - } - supportFragmentManager.beginTransaction() .replace(R.id.frameLayout, loginFragment()) .commit() diff --git a/app/src/main/java/jp/atled/agileworks/view/ui/login/MultilingualControl.kt b/app/src/main/java/jp/atled/agileworks/view/ui/login/MultilingualControl.kt deleted file mode 100644 index ee9bab20bec5f7cb32bab9794a0ad7d1d431cb3a..0000000000000000000000000000000000000000 --- a/app/src/main/java/jp/atled/agileworks/view/ui/login/MultilingualControl.kt +++ /dev/null @@ -1,91 +0,0 @@ -package jp.atled.agileworks.view.ui.login - -import android.content.ContextWrapper -import android.content.res.Configuration -import android.os.LocaleList -import android.view.View -import android.widget.AdapterView -import android.widget.ArrayAdapter -import android.widget.Spinner -import jp.atled.agileworks.R -import java.util.* - -class MultilingualControl(var activity: LoginActivity) { - private lateinit var spinner : Spinner - private lateinit var locale: Locale - - // プルダウン設定値 - private val spinnerItems = arrayOf(activity.baseContext.getString(R.string.login_multilingual_auto), "日本語", "English", "中文(簡体)", "中文(繫体)") - - fun multilingualControl() { - // プルダウン設定 - spinner = activity.findViewById(R.id.multilingual_spinner) - val adapter = ArrayAdapter(activity, R.layout.spinner_item, spinnerItems) - adapter.setDropDownViewResource(R.layout.spinner_dropdown_item) - spinner.adapter = adapter - - // 設定言語取得 - locale = Locale.getDefault() - // プルダウンの初期設定値を設定 - setInitialLanguage() - } - - private fun setInitialLanguage() { - // 設定言語からプルダウンの初期設定値を設定する - when (locale.language) { - "ja" -> { spinner.setSelection(1) } // 日本語 - "en" -> { spinner.setSelection(2) } // English - "zh" -> { - when (locale.country) { - "TW" -> { spinner.setSelection(4) } // 中文(繫体) - else -> { spinner.setSelection(3) } // 中文(簡体) - } - } - else -> { spinner.setSelection(1) } // 日本語 - } - } - - fun setOnItemSelectedListener(newContext:(ContextWrapper?) -> Unit) { - spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onItemSelected(spinner: AdapterView<*>?, view: View?, position: Int, id: Long) { - // 項目が選択された時 - newContext(getNewContext(spinner?.selectedItem.toString())) - } - - override fun onNothingSelected(p0: AdapterView<*>?) { - // アイテムが選択されることなくプルダウンが閉じられた時に呼ばれるので処理なし - newContext(null) - } - } - } - - private fun getNewContext(selectedLanguage: String): ContextWrapper? { - val resources = activity.baseContext.resources - val config = Configuration(resources.configuration) - - val newLocale = convSelectedLanguageToLocale(selectedLanguage) - if (newLocale.language == locale.language && newLocale.country == locale.country) { - // 同一言語・国の場合、言語設定しない - return null - } - - val newLocaleList = LocaleList(newLocale) - LocaleList.setDefault(newLocaleList) - config.setLocales(newLocaleList) - - val newContext = activity.baseContext.createConfigurationContext(config) - - return ContextWrapper(newContext) - } - - private fun convSelectedLanguageToLocale(selectedLanguage: String): Locale { - return when (selectedLanguage) { - "自動" -> { activity.applicationContext.resources.configuration.locales[0] } - "日本語" -> { Locale("ja", "JP") } - "English" -> { Locale("en", "US") } - "中文(簡体)" -> { Locale("zh", "CN") } - "中文(繫体)" -> { Locale("zh", "TW") } - else -> { Locale("ja", "JP") } - } - } -} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 290fc338b2bff55a91e08e9f29737240849350c4..dcbd25bcb70954b4cde793ed1d6adb554c50544c 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -1,6 +1,5 @@ - + - - - - - - - diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index be135251b7aa9baa3b8a47992955d1aaa36fce1d..53b1e84c0be27784a8b451c2f894c0fc262480e6 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -37,8 +37,6 @@ 再ログイン - language - auto https:// AgileWorks server (example.com[:443]) / diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 0abef278ddd81538db8b825cdc0b82bc25c7bbcc..0c8f7106f61a674c8c629afbd870dd8e54906db2 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -37,8 +37,6 @@ 再ログイン - language - 自動 https:// AgileWorksサーバ (example.com[:443]) / diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 93dbb2da9570ff4166025e1798dd6f4b4c4d9a63..649bdb80c53ed457fa25ca0db4671b9644934236 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -37,8 +37,6 @@ 再ログイン - language - 自動 https:// AgileWorks服務器 (example.com[:443]) / diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 9f808a086ec446760a858e63a8a399145ee68794..bfc7083c514adfea0409e350e35be68c1ec972bc 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -37,8 +37,6 @@ 再ログイン - language - 自動 https:// AgileWorks服务器 (example.com[:443]) / diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0abef278ddd81538db8b825cdc0b82bc25c7bbcc..0c8f7106f61a674c8c629afbd870dd8e54906db2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -37,8 +37,6 @@ 再ログイン - language - 自動 https:// AgileWorksサーバ (example.com[:443]) /