Compare commits

...

3 commits

Author SHA1 Message Date
5e1108fc7c chore: simplify do refresh 2024-11-30 15:46:55 +01:00
3e7879164b feat: show unfiltered profile list 2024-11-30 15:46:55 +01:00
92daa56f1a Add Japanese translate (#71)
Reviewed-on: PeterCxy/OpenEUICC#71
Co-authored-by: reindex <reindex@noreply.gitea.angry.im>
Co-committed-by: reindex <reindex@noreply.gitea.angry.im>
2024-11-30 15:29:09 +01:00
9 changed files with 229 additions and 5 deletions

View file

@ -65,6 +65,8 @@ open class EuiccManagementFragment : Fragment(), EuiccProfilesChangedListener,
// This gives us access to the "latest" state without having to launch coroutines
private lateinit var disableSafeguardFlow: StateFlow<Boolean>
private lateinit var unfilteredProfileListFlow: StateFlow<Boolean>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
@ -185,15 +187,22 @@ open class EuiccManagementFragment : Fragment(), EuiccProfilesChangedListener,
ensureEuiccChannelManager()
euiccChannelManagerService.waitForForegroundTask()
if (!this@EuiccManagementFragment::disableSafeguardFlow.isInitialized) {
if (!::disableSafeguardFlow.isInitialized) {
disableSafeguardFlow =
preferenceRepository.disableSafeguardFlow.stateIn(lifecycleScope)
}
if (!::unfilteredProfileListFlow.isInitialized) {
unfilteredProfileListFlow =
preferenceRepository.unfilteredProfileListFlow.stateIn(lifecycleScope)
}
val profiles = withEuiccChannel { channel ->
logicalSlotId = channel.logicalSlotId
euiccChannelManager.notifyEuiccProfilesChanged(channel.logicalSlotId)
channel.lpa.profiles.operational
if (unfilteredProfileListFlow.value)
channel.lpa.profiles
else
channel.lpa.profiles.operational
}
withContext(Dispatchers.Main) {
@ -302,7 +311,7 @@ open class EuiccManagementFragment : Fragment(), EuiccProfilesChangedListener,
companion object {
fun fromInt(value: Int) =
Type.values().first { it.value == value }
entries.first { it.value == value }
}
}
}

View file

@ -76,13 +76,16 @@ class SettingsFragment: PreferenceFragmentCompat() {
findPreference<CheckBoxPreference>("pref_developer_experimental_download_wizard")
?.bindBooleanFlow(preferenceRepository.experimentalDownloadWizardFlow, PreferenceKeys.EXPERIMENTAL_DOWNLOAD_WIZARD)
findPreference<CheckBoxPreference>("pref_developer_unfiltered_profile_list")
?.bindBooleanFlow(preferenceRepository.unfilteredProfileListFlow, PreferenceKeys.UNFILTERED_PROFILE_LIST)
findPreference<CheckBoxPreference>("pref_ignore_tls_certificate")
?.bindBooleanFlow(preferenceRepository.ignoreTLSCertificateFlow, PreferenceKeys.IGNORE_TLS_CERTIFICATE)
}
override fun onStart() {
super.onStart()
setupRootViewInsets(requireView().requireViewById(androidx.preference.R.id.recycler_view))
setupRootViewInsets(requireView().requireViewById(R.id.recycler_view))
}
@Suppress("UNUSED_PARAMETER")

View file

@ -32,6 +32,7 @@ object PreferenceKeys {
// ---- Developer Options ----
val DEVELOPER_OPTIONS_ENABLED = booleanPreferencesKey("developer_options_enabled")
val EXPERIMENTAL_DOWNLOAD_WIZARD = booleanPreferencesKey("experimental_download_wizard")
val UNFILTERED_PROFILE_LIST = booleanPreferencesKey("unfiltered_profile_list")
val IGNORE_TLS_CERTIFICATE = booleanPreferencesKey("ignore_tls_certificate")
}
@ -63,6 +64,9 @@ class PreferenceRepository(context: Context) {
val experimentalDownloadWizardFlow: Flow<Boolean> =
dataStore.data.map { it[PreferenceKeys.EXPERIMENTAL_DOWNLOAD_WIZARD] ?: false }
val unfilteredProfileListFlow: Flow<Boolean> =
dataStore.data.map { it[PreferenceKeys.UNFILTERED_PROFILE_LIST] ?: false }
val ignoreTLSCertificateFlow: Flow<Boolean> =
dataStore.data.map { it[PreferenceKeys.IGNORE_TLS_CERTIFICATE] ?: false }

View file

@ -0,0 +1,139 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="no_euicc">このアプリでアクセスできるリムーバブル eUICC カードがデバイス上で検出されていません。互換性のあるカード挿入または USB リーダーを接続してください。</string>
<string name="no_profile">この eSIM にはプロファイルがありません。</string>
<string name="unknown">不明</string>
<string name="help">ヘルプ</string>
<string name="reload">スロットを再読み込み</string>
<string name="channel_name_format">論理スロット %d</string>
<string name="usb">USB</string>
<string name="omapi">OpenMobile API (OMAPI)</string>
<string name="enabled">有効済み</string>
<string name="disabled">無効済み</string>
<string name="provider">プロバイダー:</string>
<string name="iccid">ICCID:</string>
<string name="enable">有効化</string>
<string name="disable">無効化</string>
<string name="delete">削除</string>
<string name="rename">名前を変更</string>
<string name="enable_disable_timeout">eSIM チップがプロファイルの切り替えの待機中にタイムアウトしました。これはデバイスのモデムファームウェアのバグの可能性があります。機内モードに切り替えるかアプリを再起動、デバイスを再起動してください。</string>
<string name="switch_did_not_refresh">操作は成功しましたが、デバイスのモデムが更新を拒否しました。新しいプロファイルを使用するには機内モードに切り替えるか、再起動する必要があります。</string>
<string name="toast_profile_enable_failed">新しい eSIM プロファイルに切り替えることができません。</string>
<string name="toast_profile_name_too_long">ニックネームは 64 文字以内にしてください</string>
<string name="toast_iccid_copied">ICCID をクリップボードにコピーしました</string>
<string name="slot_select">スロットを選択</string>
<string name="slot_select_select">選択</string>
<string name="usb_permission">USB の権限を許可</string>
<string name="usb_permission_needed">USB スマートカードリーダーにアクセスするには許可が必要です。</string>
<string name="usb_failed">USB スマートカードリーダー経由で eSIM に接続できません。</string>
<string name="task_notification">長時間実行されるタスク</string>
<string name="task_profile_download">eSIM プロファイルをダウンロード中です</string>
<string name="task_profile_download_failure">eSIM プロファイルのダウンロードに失敗しました</string>
<string name="task_profile_rename">eSIM プロファイルの名前を変更中です</string>
<string name="task_profile_rename_failure">eSIM プロファイルの名前の変更に失敗しました</string>
<string name="task_profile_delete">eSIM プロファイルを削除中です</string>
<string name="task_profile_delete_failure">eSIM プロファイルの削除に失敗しました</string>
<string name="task_profile_switch">eSIM プロファイルを切り替え中</string>
<string name="task_profile_switch_failure">eSIM プロファイルの切り替えに失敗しました</string>
<string name="profile_download">新しい eSIM</string>
<string name="profile_download_server">サーバー (RSP / SM-DP+)</string>
<string name="profile_download_code">アクティベーションコード</string>
<string name="profile_download_confirmation_code">確認コード (オプション)</string>
<string name="profile_download_imei">IMEI (オプション)</string>
<string name="profile_download_free_space">残りの容量: %s</string>
<string name="profile_download_scan">QR コードをスキャン</string>
<string name="profile_download_scan_from_gallery">ギャラリーから QR コードをスキャン</string>
<string name="profile_download_ok">ダウンロード</string>
<string name="profile_download_failed">eSIM のダウンロードに失敗しました。アクティベーションまたは QR コードを確認してください。</string>
<string name="profile_download_low_nvram_title">ダウンロードに失敗する可能性があります</string>
<string name="profile_download_low_nvram_message">残り容量が少ないため、ダウンロードに失敗する可能性があります。</string>
<string name="download_wizard">ダウンロードウィザード</string>
<string name="download_wizard_back">戻る</string>
<string name="download_wizard_next">次へ</string>
<string name="download_wizard_slot_select">ダウンロードする eSIM を選択または確認:</string>
<string name="download_wizard_slot_title">論理スロット %d</string>
<string name="download_wizard_slot_type">タイプ:</string>
<string name="download_wizard_slot_type_removable">リムーバブル</string>
<string name="download_wizard_slot_type_internal">内部</string>
<string name="download_wizard_slot_type_internal_port">内部 - ポート: %d</string>
<string name="download_wizard_slot_eid">eID:</string>
<string name="download_wizard_slot_active_profile">有効なプロファイル:</string>
<string name="download_wizard_slot_free_space">空き容量:</string>
<string name="download_wizard_method_select">eSIM プロファイルをどの方法でダウンロードしますか?</string>
<string name="download_wizard_method_qr_code">カメラで QR コードをスキャン</string>
<string name="download_wizard_method_gallery">ギャラリーから QR コードをスキャン</string>
<string name="download_wizard_method_manual">手動で入力</string>
<string name="download_wizard_details">eSIM をダウンロードするための詳細情報を入力または確認:</string>
<string name="download_wizard_progress">eSIM をダウンロード中です…</string>
<string name="download_wizard_progress_step_preparing">準備中</string>
<string name="download_wizard_progress_step_connecting">サーバーへの接続を確立しています</string>
<string name="download_wizard_progress_step_authenticating">サーバーでデバイスを認証中です</string>
<string name="download_wizard_progress_step_downloading">eSIM プロファイルをダウンロード中です</string>
<string name="download_wizard_progress_step_finalizing">eSIM プロファイルをストレージに読み込み中です</string>
<string name="download_wizard_diagnostics">エラー診断</string>
<string name="download_wizard_diagnostics_last_http_status">最終の HTTP ステータス (サーバー): %d</string>
<string name="download_wizard_diagnostics_last_http_response">最終の HTTP レスポンス (サーバー):</string>
<string name="download_wizard_diagnostics_last_http_exception">最終の HTTP 例外:</string>
<string name="download_wizard_diagnostics_last_apdu_response">最終の APDU レスポンス (SIM): %s</string>
<string name="download_wizard_diagnostics_last_apdu_response_success">最終の APDU レスポンス (SIM) は成功しました</string>
<string name="download_wizard_diagnostics_last_apdu_response_fail">最終の APDU レスポンス (SIM) は失敗しました</string>
<string name="download_wizard_diagnostics_last_apdu_exception">最終の APDU 例外:</string>
<string name="profile_rename_new_name">新しいニックネーム</string>
<string name="profile_delete_confirm">%s のプロファイルを削除してもよろしいですか?この操作は元に戻せません。</string>
<string name="profile_delete_confirm_input">削除を確認するには「%s」を入力してください</string>
<string name="profile_notifications">通知</string>
<string name="profile_notifications_detailed_format">通知 (%s)</string>
<string name="profile_notifications_show">通知の管理</string>
<string name="profile_notifications_help">eSIM プロファイルはダウンロードや削除、有効化や無効化されたときに通信事業者に通知を送信できます。送信されるこれらの通知のキューはここにリストされます。\n\n設定では、各タイプの通知を自動的に送信するかどうかを指定できます。通知が送信された場合でもキューのスペースが不足していない限り、記録から自動的に削除されることはありません。\n\nここでは保留中の各通知を手動で送信または削除できます。</string>
<string name="profile_notification_operation_download">ダウンロードしました</string>
<string name="profile_notification_operation_delete">削除しました</string>
<string name="profile_notification_operation_enable">有効化しました</string>
<string name="profile_notification_operation_disable">無効化しました</string>
<string name="profile_notification_name_format">&lt;b&gt;%1$s&lt;/b&gt; %2$s (%3$s)</string>
<string name="profile_notification_process">処理</string>
<string name="profile_notification_delete">削除</string>
<string name="euicc_info">eUICC 情報</string>
<string name="euicc_info_activity_title">eUICC 情報 (%s)</string>
<string name="euicc_info_access_mode">アクセスモード</string>
<string name="euicc_info_removable">リムーバブル</string>
<string name="euicc_info_eid">EID</string>
<string name="euicc_info_firmware_version">eUICC OS のバージョン</string>
<string name="euicc_info_globalplatform_version">グローバルプラットフォームのバージョン</string>
<string name="euicc_info_sas_accreditation_number">SAS 認定番号</string>
<string name="euicc_info_pp_version">保護されたプロファイルのバージョン</string>
<string name="euicc_info_free_nvram">NVRAM の空き容量 (eSIM プロファイルストレージ)</string>
<string name="euicc_info_gsma_prod">GSMA プロダクション証明書</string>
<string name="euicc_info_gsma_test">GSMA テスト証明書</string>
<string name="supported">対応</string>
<string name="unsupported">非対応</string>
<string name="yes">はい</string>
<string name="no">いいえ</string>
<string name="logs_save">保存</string>
<string name="logs_filename_template">%s のログ</string>
<string name="developer_options_steps">開発者になるまであと %d ステップです。</string>
<string name="developer_options_enabled">あなたは開発者になりました!</string>
<string name="pref_settings">設定</string>
<string name="pref_notifications">通知</string>
<string name="pref_notifications_desc">eSIM のプロファイル操作により、通信事業者に通知が送信されます。必要に応じてこの動作を微調整できます。</string>
<string name="pref_notifications_download">ダウンロード</string>
<string name="pref_notifications_download_desc">プロファイルを<i>ダウンロード中</i>の通知を送信します</string>
<string name="pref_notifications_delete">削除</string>
<string name="pref_notifications_delete_desc">プロファイルを<i>削除中</i>の通知を送信します</string>
<string name="pref_notifications_switch">切り替え中</string>
<string name="pref_notifications_switch_desc">プロファイルを<i>切り替え中</i>の通知を送信します\nこのタイプの通知は信頼できないことに注意してください。</string>
<string name="pref_advanced">高度な設定</string>
<string name="pref_advanced_disable_safeguard_removable_esim">有効なプロファイルの無効化と削除を許可する</string>
<string name="pref_advanced_disable_safeguard_removable_esim_desc">デフォルトでは、このアプリでデバイスに挿入された取り外し可能な eSIM の有効なプロファイルを無効化することを防いでいます。なぜなのかというと<i>時々</i>アクセスができなくなるからです。\nこのチェックボックスを ON にすることで、この保護機能を<i>解除</i>します。</string>
<string name="pref_advanced_verbose_logging">詳細ログ</string>
<string name="pref_advanced_verbose_logging_desc">詳細ログを有効化します。これには個人的な情報が含まれている可能性があります。この機能を ON にした後は、信頼できるユーザーとのみログを共有してください。</string>
<string name="pref_advanced_logs">ログ</string>
<string name="pref_advanced_logs_desc">アプリの最新デバッグログを表示します</string>
<string name="pref_developer">開発者オプション</string>
<string name="pref_developer_experimental_download_wizard">実験的なダウンロードウィザード</string>
<string name="pref_developer_experimental_download_wizard_desc">実験的な新しいダウンロードウィザードを有効化します。まだ完全に機能していないことにご注意ください。</string>
<string name="pref_developer_ignore_tls_certificate">SM-DP+ TLS 証明書を無視する</string>
<string name="pref_developer_ignore_tls_certificate_desc">SM-DP+ TLS 証明書を無視して任意の RSP を許可します</string>
<string name="pref_info">情報</string>
<string name="pref_info_app_version">アプリバージョン</string>
<string name="pref_info_source_code">ソースコード</string>
</resources>

View file

@ -151,6 +151,8 @@
<string name="pref_developer">Developer Options</string>
<string name="pref_developer_experimental_download_wizard">Experimental Download Wizard</string>
<string name="pref_developer_experimental_download_wizard_desc">Enable the experimental new download wizard. Note that it is not fully working yet.</string>
<string name="pref_developer_unfiltered_profile_list">Show unfiltered profile list</string>
<string name="pref_developer_unfiltered_profile_list_desc">Display any profile class in the list</string>
<string name="pref_developer_ignore_tls_certificate">Ignore SM-DP+ TLS certificate</string>
<string name="pref_developer_ignore_tls_certificate_desc">Ignore SM-DP+ TLS certificate, allow any RSP</string>
<string name="pref_info">Info</string>

View file

@ -55,6 +55,12 @@
app:title="@string/pref_developer_experimental_download_wizard"
app:summary="@string/pref_developer_experimental_download_wizard_desc" />
<CheckBoxPreference
app:iconSpaceReserved="false"
app:key="pref_developer_unfiltered_profile_list"
app:summary="@string/pref_developer_unfiltered_profile_list_desc"
app:title="@string/pref_developer_unfiltered_profile_list" />
<CheckBoxPreference
app:iconSpaceReserved="false"
app:key="pref_developer_ignore_tls_certificate"

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="channel_name_format">SIM %d</string>
<string name="compatibility_check">互換性のチェック</string>
<string name="open_sim_toolkit">SIM ツールキットを開く</string>
<!-- Compatibility Check Descriptions -->
<string name="compatibility_check_system_features">システムの機能</string>
<string name="compatibility_check_system_features_desc">デバイスにリムーバブル eUICC カードの管理に必要なすべての機能が備わっているかどうか。例えば基本的な電話機能や OMAPI のサポートなど。</string>
<string name="compatibility_check_system_features_no_telephony">使用しているデバイスには電話機能がありません。</string>
<string name="compatibility_check_system_features_no_omapi">使用しているデバイスまたはシステムには OMAPI のサポートを宣言していません。これは、ハードウェアからのサポートが不足していることが原因の可能性があります。または、フラグが不足していることが原因の可能性もあります。OMAPI が実際にサポートされているかどうかを判断するには次の 2 つのチェック項目を参照してください。</string>
<string name="compatibility_check_omapi_connectivity">OMAPI の接続</string>
<string name="compatibility_check_omapi_connectivity_desc">使用しているデバイスは、OMAPI 経由で SIM カード上のセキュアエレメントへのアクセスを許可していますか?</string>
<string name="compatibility_check_omapi_connectivity_fail">OMAPI 経由で SIM カードのセキュアエレメントリーダーを検出できません。このデバイスに SIM を挿入していない場合は、SIM を挿入後にこのチェックを再試行してください。</string>
<string name="compatibility_check_omapi_connectivity_partial_success_sim_number">セキュアエレメントアクセスが正常に検出されましたが、次の SIM スロットでのみ有効です: <b>SIM%s</b>.</string>
<string name="compatibility_check_isdr_channel">ISD-R チャネルアクセス</string>
<string name="compatibility_check_isdr_channel_desc">使用しているデバイスは、OMAPI 経由で eSIM への ISD-R (管理) チャネルを開くことをサポートしていますか?</string>
<string name="compatibility_check_isdr_channel_desc_unknown">OMAPI 経由での ISD-R アクセスがサポートされているかどうかを確認できません。まだ SIM カードが挿入されていない場合は、挿入した状態で再試行してください (どの SIM カードでも構いません)。</string>
<string name="compatibility_check_isdr_channel_desc_partial_fail">ISD-R への OMAPI アクセスは、次のスロットでのみ可能です: <b>SIM%s</b>.</string>
<string name="compatibility_check_known_broken">既知の破損リストに掲載されていない</string>
<string name="compatibility_check_known_broken_desc">取り外し可能な eSIM に関連するバグがデバイスに存在しないかを確認します。</string>
<string name="compatibility_check_known_broken_fail">おっと...使用しているデバイスには、取り外し可能な eSIM へのアクセス時にバグが存在します。これは必ずしも全く機能しないことを意味するわけではありませんが、注意して進める必要があります。</string>
<string name="compatibility_check_usb">USB カードリーダーのサポート</string>
<string name="compatibility_check_usb_desc">使用しているデバイスは、USB カードリーダー経由の eSIM の管理をサポートしていますか?</string>
<string name="compatibility_check_usb_ok">このデバイスの標準 USB CCID リーダーを介して eSIM を管理できます (ここで他のチェック項目に失敗した場合でも)。カードリーダーを挿入し、このアプリを開いてこの方法で eSIM を管理できます。</string>
<string name="compatibility_check_usb_fail">使用しているデバイスは USB ホストとしての機能をサポートしていません。</string>
<string name="compatibility_check_verdict">判定 (USB 以外)</string>
<string name="compatibility_check_verdict_desc">これまでのすべてのチェック項目に基づいて、デバイスに挿入された取り外し可能な eSIM の管理と互換性がある可能性はどのくらいありますか?</string>
<string name="compatibility_check_verdict_ok">このデバイスに挿入された取り外し可能な eSIM の使用および管理が使用できる可能性があります。</string>
<string name="compatibility_check_verdict_known_broken">挿入された取り外し可能な eSIM にアクセスするとデバイスにバグが発生することが知られています。\n%s</string>
<string name="compatibility_check_verdict_unknown_likely_ok">挿入された取り外し可能な eSIM が使用しているデバイスで管理できるかはわかりません。ただし、このデバイスは OMAPI のサポートを宣言しているため、動作する可能性はわずかに高くなります。\n%s</string>
<string name="compatibility_check_verdict_unknown_likely_fail">挿入された取り外し可能な eSIM がデバイス上で管理できるかどうかは判断できません。デバイスが OMAPI のサポートを宣言していないため、このデバイス上で取り外し可能な eSIM を管理することはサポートされていない可能性があります。\n%s</string>
<string name="compatibility_check_verdict_unknown">挿入された取り外し可能な eSIM がデバイス上で管理できるかどうかを確認できません。\n%s</string>
<string name="compatibility_check_verdict_fail_shared">ただし、eSIM プロファイルがすでに読み込まれている場合、有効化されたプロファイル自体は引き続き機能します。また、プロファイルが管理できない場合は、このデバイスで USB カードリーダーを介してプロファイルを管理できる可能性があります。</string>
</resources>

View file

@ -13,6 +13,7 @@ import im.angry.openeuicc.core.EuiccChannelManager
import im.angry.openeuicc.service.EuiccChannelManagerService.Companion.waitDone
import im.angry.openeuicc.util.*
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.runBlocking
import kotlin.IllegalStateException
@ -190,7 +191,12 @@ class OpenEuiccService : EuiccService(), OpenEuiccContextMarker {
slotId,
port
) { channel ->
val profiles = channel.lpa.profiles.operational.map {
val filteredProfiles =
if (runBlocking { preferenceRepository.unfilteredProfileListFlow.first() })
channel.lpa.profiles
else
channel.lpa.profiles.operational
val profiles = filteredProfiles.map {
EuiccProfileInfo.Builder(it.iccid).apply {
setProfileName(it.name)
setNickname(it.displayName)

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">OpenEUICC</string>
<string name="no_euicc">このデバイスで eUICC が見つかりません。\nデバイスによってはアプリのメニューからデュアル SIM を有効化する必要があります。</string>
<string name="telephony_manager">TelephonyManager (特権)</string>
<string name="dsds">デュアル SIM</string>
<string name="toast_dsds_switched">DSDS の状態が切り替わりました。モデムが再起動するまでお待ちください。</string>
<string name="footer_mep">このスロットは MEP (Multiple Enabled Profiles) をサポートしています。この機能を有効化または無効化するには「スロットマッピングツール」を使用してください。</string>
<string name="slot_mapping">スロットマッピング</string>
<string name="slot_mapping_logical_slot">論理スロット %d:</string>
<string name="slot_mapping_port">スロット %1$d ポート %2$d</string>
<string name="slot_mapping_help">使用しているデバイスは、%1$d 個の論理 SIM スロットと %2$d 個の物理 SIM スロットがあります。%3$s\n\n各論理スロットに対応する物理スロットまたはポートを選択してください。すべてのマッピングモードがハードウェアでサポートされているわけではないことにご注意ください。</string>
<string name="slot_mapping_help_mep">\n\n物理スロット %1$d は、複数の有効なプロファイル (MEP) をサポートしています。この機能を使用するには、%2$d の仮想ポートを上記の異なる論理スロットに割り当てます。\n\nMEP を有効化すると、ポートは共有プロファイルの一覧を除いて OpenEUICC の個別の eSIM スロットのように動作します。</string>
<string name="slot_mapping_help_dsds">\nデュアル SIM モードはサポートされていますが、無効化されています。デバイスに内部 eSIM チップが搭載されている場合は、デフォルトで有効化されていない可能性があります。上記のマッピングを変更するか、デュアル SIM を有効化して eSIM にアクセスしてください。</string>
<string name="slot_mapping_completed">新しいスロットマッピングが設定されました。モデムがスロットを更新するまでお待ちください。</string>
<string name="slot_mapping_failure">指定されたマッピングが無効化されているか、ハードウェアがサポートをしていない可能性があります。</string>
<string name="lui_title">eSIM をダウンロードしてモバイルネットワークに接続</string>
<string name="lui_desc">使用しているデバイスは eSIM をサポートしています。モバイルネットワークに接続するには通信事業者が発行した eSIM をダウンロードするか、物理 SIM を挿入してください。</string>
<string name="lui_skip">スキップ</string>
<string name="lui_download">eSIM をダウンロード</string>
</resources>