diff --git a/Authenticator/Info.plist b/Authenticator/Info.plist
index 49ecd685..abd33305 100644
--- a/Authenticator/Info.plist
+++ b/Authenticator/Info.plist
@@ -16,8 +16,6 @@
$(PRODUCT_NAME)
CFBundlePackageType
APPL
- ITSAppUsesNonExemptEncryption
-
CFBundleShortVersionString
$(MARKETING_VERSION)
CFBundleURLTypes
@@ -39,7 +37,7 @@
LSRequiresIPhoneOS
NFCReaderUsageDescription
- The application needs access to NFC reading to communicate with your Yubikey.
+ The application needs access to NFC reading to communicate with your YubiKey.
NSCameraUsageDescription
The application needs access to Camera to scan QR codes.
NSFaceIDUsageDescription
diff --git a/Authenticator/InfoPlist.xcstrings b/Authenticator/InfoPlist.xcstrings
index 45e2ab01..9e1e7d67 100644
--- a/Authenticator/InfoPlist.xcstrings
+++ b/Authenticator/InfoPlist.xcstrings
@@ -13,14 +13,14 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "Authenticator"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Authenticator"
+ "state" : "translated",
+ "value" : "認証"
}
}
}
@@ -32,19 +32,19 @@
"en" : {
"stringUnit" : {
"state" : "new",
- "value" : "The application needs access to NFC reading to communicate with your Yubikey."
+ "value" : "The application needs access to NFC reading to communicate with your YubiKey."
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "L'appli doit accéder à la lecture NFC pour communiquer avec votre Yubikey."
+ "value" : "L'application doit avoir accès à la lecture NFC pour communiquer avec votre YubiKey."
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Yubikeyと通信するには、アプリケーションがNFC読み取りにアクセスできる必要があります."
+ "value" : "アプリケーションはYubiKeyと通信するためにNFC読み取りへのアクセスが必要です。"
}
}
}
diff --git a/Authenticator/Localizable.xcstrings b/Authenticator/Localizable.xcstrings
index 15009578..b0247828 100644
--- a/Authenticator/Localizable.xcstrings
+++ b/Authenticator/Localizable.xcstrings
@@ -22,13 +22,13 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "*** *** "
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "*** *** "
}
}
@@ -38,13 +38,13 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "%@"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "%@"
}
}
@@ -54,13 +54,13 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "888 888"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "888 888"
}
}
@@ -338,122 +338,82 @@
}
}
},
- "Change PIN" : {
- "localizations" : {
- "fr" : {
- "stringUnit" : {
- "state" : "new",
- "value" : "Change PIN"
- }
- },
- "ja" : {
- "stringUnit" : {
- "state" : "new",
- "value" : "Change PIN"
- }
- }
- }
- },
- "Clear" : {
- "comment" : "Clear password alert button",
- "extractionState" : "stale",
+ "Change" : {
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Effacer"
+ "value" : "Changer"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "消去"
+ "value" : "変更"
}
}
}
},
- "Clear passwords" : {
+ "Change password" : {
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Clear passwords"
+ "state" : "translated",
+ "value" : "Modifier le mot de passe"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Clear passwords"
+ "state" : "translated",
+ "value" : "パスワードを管理"
}
}
}
},
- "Clear passwords saved on" : {
- "comment" : "Substring from 'Clear passwords saved on [iPad/iPhone]. This will prompt for a passowrd next time a password protected YubiKey is used.'.",
- "extractionState" : "stale",
+ "Change PIN" : {
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Effacez les mots de passe enregistrés sur"
+ "value" : "Modifier le code PIN"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "に保存されているパスワードを消去します"
+ "value" : "PINを変更"
}
}
}
},
- "Clear passwords saved on iPhone. This will prompt for a password next time a password protected YubiKey is used." : {
- "comment" : "Clear password alert message",
- "extractionState" : "stale",
+ "Clear passwords" : {
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Effacez les mots de passe enregistrés sur l'iPhone. Un mot de passe sera requis à la prochaine utilisation d'une YubiKey protégée par mot de passe."
+ "value" : "Effacer les mots de passe"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "iPhoneに保存されているパスワードを消去します。これにより、パスワードで保護されたYubiKeyの次回使用時にパスワードの入力を求められます."
+ "value" : "パスワードを消去する"
}
}
}
},
"Clear passwords saved on this device. This will prompt for a password next time a password protected YubiKey is used." : {
- "localizations" : {
- "fr" : {
- "stringUnit" : {
- "state" : "new",
- "value" : "Clear passwords saved on this device. This will prompt for a password next time a password protected YubiKey is used."
- }
- },
- "ja" : {
- "stringUnit" : {
- "state" : "new",
- "value" : "Clear passwords saved on this device. This will prompt for a password next time a password protected YubiKey is used."
- }
- }
- }
- },
- "Clear passwords?" : {
- "comment" : "Clear password alert title",
- "extractionState" : "stale",
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Effacer les mots de passe ?"
+ "value" : "Efface les mots de passe enregistrés sur ce dispositif. Un mot de passe sera demandé lors de la prochaine utilisation d'une YubiKey protégée par un mot de passe."
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "パスワードを消去しますか?"
+ "value" : "このデバイスに保存されているパスワードを消去します。これにより、次回パスワード保護されたYubiKeyを使用する際にパスワードの入力を求められます。"
}
}
}
@@ -462,14 +422,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Clear saved OATH passwords"
+ "state" : "translated",
+ "value" : "Effacer les mots de passe OATH enregistrés"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Clear saved OATH passwords"
+ "state" : "translated",
+ "value" : "保存したパスワードを消去"
}
}
}
@@ -478,14 +438,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Clear saved passwords"
+ "state" : "translated",
+ "value" : "Effacer les mots de passe enregistrés"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Clear saved passwords"
+ "state" : "translated",
+ "value" : "保存したパスワードを消去"
}
}
}
@@ -563,7 +523,7 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "Configuration"
}
},
@@ -579,14 +539,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Confirm OATH reset"
+ "state" : "translated",
+ "value" : "Confirmer la réinitialisation de l'OATH"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Confirm OATH reset"
+ "state" : "translated",
+ "value" : "OATHリセットの確認"
}
}
}
@@ -642,17 +602,18 @@
}
},
"Current" : {
+ "comment" : "Enter current password in secure field to change password.",
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Current"
+ "state" : "translated",
+ "value" : "Actuel"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Current"
+ "state" : "translated",
+ "value" : "現在"
}
}
}
@@ -661,14 +622,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Current PIN"
+ "state" : "translated",
+ "value" : "PIN actuel"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Current PIN"
+ "state" : "translated",
+ "value" : "現在のPIN"
}
}
}
@@ -826,14 +787,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "enter current password"
+ "state" : "translated",
+ "value" : "mot de passe actuel"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "enter current password"
+ "state" : "translated",
+ "value" : "現在のパスワード"
}
}
}
@@ -842,14 +803,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "enter current PIN"
+ "state" : "translated",
+ "value" : "saisir le code PIN actuel"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "enter current PIN"
+ "state" : "translated",
+ "value" : "現在の暗証番号を入力"
}
}
}
@@ -875,14 +836,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "enter password"
+ "state" : "translated",
+ "value" : "saisir le mot de passe"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "enter password"
+ "state" : "translated",
+ "value" : "新しいパスワード"
}
}
}
@@ -908,14 +869,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "enter PIN"
+ "state" : "translated",
+ "value" : "saisir le code PIN"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "enter PIN"
+ "state" : "translated",
+ "value" : "暗証番号を入力"
}
}
}
@@ -1020,54 +981,18 @@
}
}
},
- "Failed to clear passwords" : {
- "comment" : "Clear passwords failure alert title",
- "extractionState" : "stale",
- "localizations" : {
- "fr" : {
- "stringUnit" : {
- "state" : "translated",
- "value" : "Impossible d'effacer le mot de passe"
- }
- },
- "ja" : {
- "stringUnit" : {
- "state" : "translated",
- "value" : "パスワードの消去に失敗しました"
- }
- }
- }
- },
- "Failed to reset YubiKey" : {
- "comment" : "Reset YubiKey failure alert title",
- "extractionState" : "stale",
+ "FIDO factory reset" : {
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Échec de la réinitialisation de la YubiKey"
+ "value" : "Réinitialisation d'usine FIDO"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "YubiKeyのリセットに失敗しました"
- }
- }
- }
- },
- "FIDO factory reset" : {
- "localizations" : {
- "fr" : {
- "stringUnit" : {
- "state" : "new",
- "value" : "FIDO factory reset"
- }
- },
- "ja" : {
- "stringUnit" : {
- "state" : "new",
- "value" : "FIDO factory reset"
+ "value" : "工場出荷時の状態にリセット"
}
}
}
@@ -1082,8 +1007,8 @@
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "FIDO over USB-C is not supported by iOS. Use NFC or the desktop Yubico Authenticator instead."
+ "state" : "translated",
+ "value" : "USB-C経由のFIDOはiOSではサポートされていません。代わりにNFCまたはデスクトップのYubico Authenticatorをご利用ください。"
}
}
}
@@ -1092,13 +1017,13 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "FIDO PIN"
+ "state" : "translated",
+ "value" : "PIN FIDO"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "FIDO PIN"
}
}
@@ -1108,14 +1033,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "FIDO PIN protection"
+ "state" : "translated",
+ "value" : "Protection PIN FIDO"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "FIDO PIN protection"
+ "state" : "translated",
+ "value" : "FIDO PIN保護"
}
}
}
@@ -1124,14 +1049,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "FIDO reset"
+ "state" : "translated",
+ "value" : "Réinitialisation FIDO"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "FIDO reset"
+ "state" : "translated",
+ "value" : "FIDOリセット"
}
}
}
@@ -1157,14 +1082,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "For additional security and to prevent unauthorized access the FIDO application can be protected by a PIN."
+ "state" : "translated",
+ "value" : "Pour plus de sécurité et pour empêcher tout accès non autorisé, l'application FIDO peut être protégée par un code PIN."
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "For additional security and to prevent unauthorized access the FIDO application can be protected by a PIN."
+ "state" : "translated",
+ "value" : "さらにセキュリティを高め、不正アクセスを防ぐために、FIDOアプリケーションはPINで保護することができる。"
}
}
}
@@ -1173,14 +1098,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "For additional security and to prevent unauthorized access the YubiKey can be password protected."
+ "state" : "translated",
+ "value" : "Pour plus de sécurité et pour empêcher tout accès non autorisé, le YubiKey peut être protégé par un mot de passe."
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "For additional security and to prevent unauthorized access the YubiKey can be password protected."
+ "state" : "translated",
+ "value" : "さらにセキュリティを高め、不正アクセスを防ぐために、YubiKeyはパスワードで保護することができます。"
}
}
}
@@ -1322,7 +1247,7 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "Menu"
}
},
@@ -1352,17 +1277,18 @@
}
},
"New" : {
+ "comment" : "Enter new password in secure field.",
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "New"
+ "state" : "translated",
+ "value" : "Nouveau"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "New"
+ "state" : "translated",
+ "value" : "新しい"
}
}
}
@@ -1607,14 +1533,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "OATH password protection"
+ "state" : "translated",
+ "value" : "Protection par mot de passe OATH"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "OATH password protection"
+ "state" : "translated",
+ "value" : "オプションのパスワード保護"
}
}
}
@@ -1623,14 +1549,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "OATH passwords"
+ "state" : "translated",
+ "value" : "Mots de passe OATH"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "OATH passwords"
+ "state" : "translated",
+ "value" : "OATHパスワード"
}
}
}
@@ -1657,13 +1583,13 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "OK"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "OK"
}
}
@@ -1703,6 +1629,22 @@
}
}
},
+ "Operation timed out." : {
+ "localizations" : {
+ "fr" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "L'opération a été interrompue."
+ }
+ },
+ "ja" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "オペレーションがタイムアウトしました。"
+ }
+ }
+ }
+ },
"or pull down to activate NFC" : {
"localizations" : {
"fr" : {
@@ -1769,7 +1711,7 @@
}
},
"Password" : {
- "comment" : "Password alert",
+ "comment" : "Enter password in secure field to remove password.\nPassword alert",
"localizations" : {
"fr" : {
"stringUnit" : {
@@ -1853,6 +1795,38 @@
}
}
},
+ "Password state read" : {
+ "localizations" : {
+ "fr" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "Lecture de l'état du mot de passe"
+ }
+ },
+ "ja" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "パスワード状態の読み取り"
+ }
+ }
+ }
+ },
+ "Passwords don't match" : {
+ "localizations" : {
+ "fr" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "Les mots de passe ne correspondent pas"
+ }
+ },
+ "ja" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "パスワードが一致しない"
+ }
+ }
+ }
+ },
"Period" : {
"comment" : "Add account select period",
"localizations" : {
@@ -1887,18 +1861,50 @@
}
}
},
+ "PIN has been changed" : {
+ "localizations" : {
+ "fr" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "Le code PIN a été modifié"
+ }
+ },
+ "ja" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "暗証番号が変更されました"
+ }
+ }
+ }
+ },
+ "PIN has been set" : {
+ "localizations" : {
+ "fr" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "Le code PIN a été défini"
+ }
+ },
+ "ja" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "暗証番号が設定されている"
+ }
+ }
+ }
+ },
"PIN is permanently blocked. Factory reset FIDO application to continue." : {
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "PIN is permanently blocked. Factory reset FIDO application to continue."
+ "state" : "translated",
+ "value" : "Le code PIN est bloqué de manière permanente. Réinitialisez l'application FIDO pour continuer."
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "PIN is permanently blocked. Factory reset FIDO application to continue."
+ "state" : "translated",
+ "value" : "PINは永久にブロックされます。FIDOアプリケーションを工場出荷時にリセットしてください。"
}
}
}
@@ -1907,14 +1913,46 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "PIN is temporary blocked. Remove and reinsert YubiKey to try again."
+ "state" : "translated",
+ "value" : "Le code PIN est temporairement bloqué. Retirez et réinsérez YubiKey pour réessayer."
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "PIN is temporary blocked. Remove and reinsert YubiKey to try again."
+ "state" : "translated",
+ "value" : "PINが一時的にブロックされています。YubiKeyを取り外して再度挿入してください。"
+ }
+ }
+ }
+ },
+ "PIN should be at least %llu characters long." : {
+ "localizations" : {
+ "fr" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "Le code PIN doit comporter au moins %llu caractères."
+ }
+ },
+ "ja" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "暗証番号は少なくとも %llu。"
+ }
+ }
+ }
+ },
+ "PIN state read" : {
+ "localizations" : {
+ "fr" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "Lecture de l'état du PIN"
+ }
+ },
+ "ja" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "PIN状態読み取り"
}
}
}
@@ -1935,6 +1973,39 @@
}
}
},
+ "PINs do not match." : {
+ "comment" : "Set PIN view validation error",
+ "localizations" : {
+ "fr" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "Les codes PIN ne correspondent pas."
+ }
+ },
+ "ja" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "PIN が一致しません."
+ }
+ }
+ }
+ },
+ "PINs don't match" : {
+ "localizations" : {
+ "fr" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "Les codes PIN ne correspondent pas"
+ }
+ },
+ "ja" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "PIN が一致しません"
+ }
+ }
+ }
+ },
"Plug-in your YubiKey for that operation" : {
"comment" : "No service found",
"localizations" : {
@@ -1990,14 +2061,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "re-enter password"
+ "state" : "translated",
+ "value" : "supprimer mot de passe"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "re-enter password"
+ "state" : "translated",
+ "value" : "パスワード再入力"
}
}
}
@@ -2006,14 +2077,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "re-enter PIN"
+ "state" : "translated",
+ "value" : "saisir à nouveau le code PIN"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "re-enter PIN"
+ "state" : "translated",
+ "value" : "暗証番号の再入力"
}
}
}
@@ -2052,139 +2123,135 @@
}
}
},
- "Remove and re-insert your YubiKey" : {
+ "Reinsert your YubiKey." : {
+ "comment" : "FIDO reset view",
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Retirez et réinsérez votre YubiKey"
+ "value" : "Réinsérez votre YubiKey."
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "YubiKeyを取り外して再挿入してください"
+ "value" : "YubiKeyを再挿入してください."
}
}
}
},
- "Remove and reinsert your YubiKey" : {
- "comment" : "PIV extension error reinsert key",
+ "Remove" : {
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Retirez et réinsérez votre YubiKey"
+ "value" : "Retirer"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "YubiKeyを取り外して再挿入してください"
+ "value" : "削除"
}
}
}
},
- "Remove password" : {
- "comment" : "Remove password alert title",
- "extractionState" : "stale",
+ "Remove and re-insert your YubiKey" : {
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Supprimer mot de passe"
+ "value" : "Retirez et réinsérez votre YubiKey"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "パスワードを削除"
+ "value" : "YubiKeyを取り外して再挿入してください"
}
}
}
},
- "Remove password for this YubiKey?" : {
- "comment" : "Remove password alert message",
- "extractionState" : "stale",
+ "Remove and reinsert your YubiKey" : {
+ "comment" : "PIV extension error reinsert key",
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Supprimer le mot de passe pour cette YubiKey ?"
+ "value" : "Retirez et réinsérez votre YubiKey"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "このYubiKeyのパスワードを削除しますか?"
+ "value" : "YubiKeyを取り外して再挿入してください"
}
}
}
},
- "Rename" : {
- "comment" : "Menu",
+ "Remove password" : {
+ "comment" : "Remove password alert title",
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Renommer"
+ "value" : "Supprimer mot de passe"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "名前変更"
+ "value" : "パスワードを削除"
}
}
}
},
- "Reset" : {
- "comment" : "Reset YubiKey alert button",
+ "Rename" : {
+ "comment" : "Menu",
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Réinitialiser"
+ "value" : "Renommer"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "リセット"
+ "value" : "名前変更"
}
}
}
},
- "Reset all accounts stored on YubiKey, make sure they are not in use anywhere before doing this." : {
+ "Reset" : {
+ "comment" : "Reset YubiKey alert button",
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Reset all accounts stored on YubiKey, make sure they are not in use anywhere before doing this."
+ "state" : "translated",
+ "value" : "Réinitialiser"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Reset all accounts stored on YubiKey, make sure they are not in use anywhere before doing this."
+ "state" : "translated",
+ "value" : "リセット"
}
}
}
},
- "Reset complete" : {
- "comment" : "Reset YubiKey complete alert title",
- "extractionState" : "stale",
+ "Reset all accounts stored on YubiKey, make sure they are not in use anywhere before doing this." : {
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Réinitialisation terminée"
+ "value" : "Réinitialisez tous les comptes stockés sur YubiKey, assurez-vous qu'ils ne sont utilisés nulle part avant de procéder à cette réinitialisation."
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "リセットが完了しました"
+ "value" : "YubiKeyに保存されているすべてのアカウントをリセットします。"
}
}
}
@@ -2194,14 +2261,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Reset FIDO application"
+ "state" : "translated",
+ "value" : "Réinitialiser l'application FIDO"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Reset FIDO application"
+ "state" : "translated",
+ "value" : "FIDOアプリケーションのリセット"
}
}
}
@@ -2210,48 +2277,30 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Reset OATH"
+ "state" : "translated",
+ "value" : "Réinitialiser OATH"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Reset OATH"
+ "state" : "translated",
+ "value" : "誓いのリセット"
}
}
}
},
"Reset OATH application" : {
- "localizations" : {
- "fr" : {
- "stringUnit" : {
- "state" : "new",
- "value" : "Reset OATH application"
- }
- },
- "ja" : {
- "stringUnit" : {
- "state" : "new",
- "value" : "Reset OATH application"
- }
- }
- }
- },
- "Reset YubiKey?" : {
- "comment" : "Reset YubiKey alert title",
- "extractionState" : "stale",
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Réinitialiser la YubiKey ?"
+ "value" : "Réinitialiser l'application OATH"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "YubiKeyをリセットしますか?"
+ "value" : "OATHアプリケーションのリセット"
}
}
}
@@ -2344,14 +2393,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Saved passwords has been cleared"
+ "state" : "translated",
+ "value" : "Les mots de passe enregistrés ont été effacés"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Saved passwords has been cleared"
+ "state" : "translated",
+ "value" : "保存されたパスワードがクリアされました"
}
}
}
@@ -2426,14 +2475,30 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Set"
+ "state" : "translated",
+ "value" : "Set (jeu de mots)"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Set"
+ "state" : "translated",
+ "value" : "セット"
+ }
+ }
+ }
+ },
+ "Set password" : {
+ "localizations" : {
+ "fr" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "Nouveau mot de passe"
+ }
+ },
+ "ja" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "パスワードを設定"
}
}
}
@@ -2442,14 +2507,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Set PIN"
+ "state" : "translated",
+ "value" : "Nouveau PIN"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Set PIN"
+ "state" : "translated",
+ "value" : "PINを設定"
}
}
}
@@ -2555,24 +2620,6 @@
}
}
},
- "Stored passwords have been cleared from this phone." : {
- "comment" : "Clear passwords confirmation alert message",
- "extractionState" : "stale",
- "localizations" : {
- "fr" : {
- "stringUnit" : {
- "state" : "translated",
- "value" : "Les mots de passe enregistrés ont été effacés de ce téléphone."
- }
- },
- "ja" : {
- "stringUnit" : {
- "state" : "translated",
- "value" : "保存されたパスワードがこのスマートフォンから消去されました。"
- }
- }
- }
- },
"String to Data conversion error" : {
"localizations" : {
"fr" : {
@@ -2657,6 +2704,23 @@
}
}
},
+ "The FIDO application of your YubiKey has been reset to factory defaults." : {
+ "comment" : "FIDO reset view",
+ "localizations" : {
+ "fr" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "L'application FIDO de votre YubiKey a été réinitialisée aux valeurs d'usine."
+ }
+ },
+ "ja" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "YubiKeyのFIDOアプリケーションは工場出荷時の状態にリセットされています。"
+ }
+ }
+ }
+ },
"The key doesn't respond" : {
"comment" : "Timeout issue",
"localizations" : {
@@ -2810,153 +2874,150 @@
}
}
},
- "This will delete all accounts and restore factory defaults of your YubiKey." : {
- "comment" : "Reset YubiKey alert message",
- "extractionState" : "stale",
+ "This will irrevocably delete all U2F and FIDO2 accounts, including passkeys, from your YubiKey." : {
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Cette action supprimera tous les comptes et restaurera les paramètres d'usine de votre YubiKey."
+ "value" : "Cela supprimera irrévocablement tous les comptes U2F et FIDO2, y compris les passkeys, de votre YubiKey."
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "これにより、すべてのアカウントが削除され、YubiKeyの工場出荷時のデフォルトに戻ります。"
+ "value" : "警告!これにより、すべてのU2FおよびFIDO2アカウントがパスキーを含めてYubiKeyから削除されます。削除は取り消すことができません。"
}
}
}
},
- "This will irrevocably delete all U2F and FIDO2 accounts, including passkeys, from your YubiKey." : {
+ "This will permanently delete the account from the YubiKey, and your ability to generate codes for it!" : {
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "This will irrevocably delete all U2F and FIDO2 accounts, including passkeys, from your YubiKey."
+ "state" : "translated",
+ "value" : "Cela supprimera définitivement le compte de la YubiKey et vous ne pourrez plus générer de codes!"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "This will irrevocably delete all U2F and FIDO2 accounts, including passkeys, from your YubiKey."
+ "state" : "translated",
+ "value" : "これにより、YubiKeyからアカウントが完全に削除され、コードを生成できなくなります!"
}
}
}
},
- "This will permanently delete the account from the YubiKey, and your ability to generate codes for it!" : {
+ "This YubiKey has Yubico OTP enabled which makes it appear as an external keyboard to the iPhone. Unfortunately this causes problem with the normal on-screen keyboard." : {
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Cela supprimera définitivement le compte de la YubiKey et vous ne pourrez plus générer de codes!"
+ "value" : "Yubico OTP étant activé, cette YubiKey apparaît comme clavier externe pour l'iPhone. Cela pose problème avec le clavier à l'écran normal."
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "これにより、YubiKeyからアカウントが完全に削除され、コードを生成できなくなります!"
+ "value" : "このYubiKeyはYubico OTPが有効になっているため、iPhoneへの外付けキーボードとして表示されます。これが原因で、標準のオンスクリーンキーボードで問題が発生します."
}
}
}
},
- "This will prompt for a password next time a password protected YubiKey is used" : {
- "comment" : "Substring from 'Clear passwords saved on [iPad/iPhone]. This will prompt for a passowrd next time a password protected YubiKey is used.'.",
- "extractionState" : "stale",
+ "To prevent unauthorized access this YubiKey is protected with a password." : {
+ "comment" : "OATH password entry enter password",
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Un mot de passe sera requis à la prochaine utilisation d'une YubiKey protégée par mot de passe"
+ "value" : "Pour empêcher tout accès non autorisé, cette YubiKey est protégée par un mot de passe."
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "これにより、パスワードで保護されたYubiKeyの次回使用時にパスワードの入力を求められます"
+ "value" : "不正アクセスを防止するため、このYubiKeyはパスワードで保護されます。"
}
}
}
},
- "This YubiKey has Yubico OTP enabled which makes it appear as an external keyboard to the iPhone. Unfortunately this causes problem with the normal on-screen keyboard." : {
+ "To scan a QR code you need to enable camera permissions for the Authenticator app." : {
+ "comment" : "Scan QR code camera error message",
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Yubico OTP étant activé, cette YubiKey apparaît comme clavier externe pour l'iPhone. Cela pose problème avec le clavier à l'écran normal."
+ "value" : "Pour scanner un code QR, vous devez activer les autorisations de caméra pour l'application Authenticator."
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "このYubiKeyはYubico OTPが有効になっているため、iPhoneへの外付けキーボードとして表示されます。これが原因で、標準のオンスクリーンキーボードで問題が発生します."
+ "value" : "QRコードをスキャンするには、Authenticatorアプリのカメラ権限を有効にする必要があります。"
}
}
}
},
- "To prevent unauthorized access this YubiKey is protected with a password." : {
- "comment" : "OATH password entry enter password",
+ "Touch the button on the YubiKey now." : {
+ "comment" : "FIDO reset view",
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Pour empêcher tout accès non autorisé, cette YubiKey est protégée par un mot de passe."
+ "value" : "Appuyez maintenant sur le bouton de la YubiKey."
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "不正アクセスを防止するため、このYubiKeyはパスワードで保護されます。"
+ "value" : "ここでYubiKeyのボタンをタッチしてください."
}
}
}
},
- "To scan a QR code you need to enable camera permissions for the Authenticator app." : {
- "comment" : "Scan QR code camera error message",
+ "Type" : {
+ "comment" : "Add account select type",
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Pour scanner un code QR, vous devez activer les autorisations de caméra pour l'application Authenticator."
+ "value" : "Type"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "QRコードをスキャンするには、Authenticatorアプリのカメラ権限を有効にする必要があります。"
+ "value" : "タイプ"
}
}
}
},
- "Type" : {
- "comment" : "Add account select type",
+ "Unhandled Error" : {
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Type"
+ "state" : "translated",
+ "value" : "Erreur non gérée"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "タイプ"
+ "value" : "未処理エラー"
}
}
}
},
- "Unhandled Error" : {
+ "Unknown error" : {
"localizations" : {
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Erreur non gérée"
+ "value" : "Erreur inconnue"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
- "value" : "未処理エラー"
+ "value" : "不明なエラー"
}
}
}
@@ -2995,6 +3056,23 @@
}
}
},
+ "Unplug your YubiKey." : {
+ "comment" : "FIDO reset view",
+ "localizations" : {
+ "fr" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "Retirez votre YubiKey."
+ }
+ },
+ "ja" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "YubiKeyを抜いてください."
+ }
+ }
+ }
+ },
"Use your PUK code to reset PIN." : {
"comment" : "PIV extension pin blocked text",
"localizations" : {
@@ -3013,17 +3091,18 @@
}
},
"Verify" : {
+ "comment" : "Re-enter new password in secure field.",
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Verify"
+ "state" : "translated",
+ "value" : "Vérifier"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Verify"
+ "state" : "translated",
+ "value" : "ベリファイ"
}
}
}
@@ -3055,8 +3134,8 @@
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Warning!"
+ "state" : "translated",
+ "value" : "警告だ!"
}
}
}
@@ -3179,6 +3258,22 @@
}
}
},
+ "Your credentials, as well as any PIN set, will be removed from this YubiKey. Make sure to first disable these from their respective web sites to avoid being locked out of your accounts." : {
+ "localizations" : {
+ "fr" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "Vos identifiants OATH, ainsi que tout mot de passe défini, seront supprimés de cette YubiKey. Assurez-vous de les désactiver d'abord de leurs sites Web respectifs pour que vos comptes ne soient pas bloqués."
+ }
+ },
+ "ja" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "認証情報とPINセットがこのYubiKeyから削除されます。アカウントからロックアウトされないよう、初めに各Webサイトからこれらを無効にしてください。"
+ }
+ }
+ }
+ },
"Your PIN has ben blocked" : {
"comment" : "PIV extension pin blocked title",
"localizations" : {
@@ -3200,13 +3295,13 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "Yubico OTP"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "Yubico OTP"
}
}
@@ -3249,14 +3344,14 @@
"localizations" : {
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "YubiKey has been reset"
+ "state" : "translated",
+ "value" : "YubiKey a été réinitialisé"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "YubiKey has been reset"
+ "state" : "translated",
+ "value" : "YubiKeyがリセットされました"
}
}
}
diff --git a/Authenticator/Model/FIDOPINViewModel.swift b/Authenticator/Model/FIDOPINViewModel.swift
index ee6e0d87..cced6f4c 100644
--- a/Authenticator/Model/FIDOPINViewModel.swift
+++ b/Authenticator/Model/FIDOPINViewModel.swift
@@ -21,13 +21,13 @@ enum FidoViewModelError: Error, LocalizedError {
public var errorDescription: String? {
switch self {
case .pinsDoNotMatch:
- return "PINs don't match"
+ return String(localized: "PINs don't match")
case .usbNotSupported:
return String(localized: "FIDO over USB-C is not supported by iOS. Use NFC or the desktop Yubico Authenticator instead.")
case .timeout:
- return "Operation timed out."
+ return String(localized: "Operation timed out.")
case .locked:
- return "PIN is permanently blocked. Factory reset FIDO application to continue."
+ return String(localized: "PIN is permanently blocked. Factory reset FIDO application to continue.")
}
}
}
@@ -152,7 +152,7 @@ class FIDOPINViewModel: ObservableObject {
if !pinIsSet {
DispatchQueue.main.async {
self.state = .notSet
- YubiKitManager.shared.stopNFCConnection(withMessage: "PIN state read")
+ YubiKitManager.shared.stopNFCConnection(withMessage: String(localized: "PIN state read"))
}
} else {
session.getPinRetries { retries, error in
@@ -168,7 +168,7 @@ class FIDOPINViewModel: ObservableObject {
YubiKitManager.shared.stopNFCConnection(withErrorMessage: FidoViewModelError.locked.localizedDescription)
self.state = .error(FidoViewModelError.locked)
} else {
- YubiKitManager.shared.stopNFCConnection(withMessage: "PIN state read")
+ YubiKitManager.shared.stopNFCConnection(withMessage: String(localized: "PIN state read"))
self.state = .set
}
}
@@ -208,7 +208,7 @@ class FIDOPINViewModel: ObservableObject {
YubiKitManager.shared.stopNFCConnection(withErrorMessage: error.localizedDescription)
} else {
self.state = .didSet
- YubiKitManager.shared.stopNFCConnection(withMessage: "PIN has been set")
+ YubiKitManager.shared.stopNFCConnection(withMessage: String(localized: "PIN has been set"))
}
self.isProcessing = false
}
@@ -237,7 +237,7 @@ class FIDOPINViewModel: ObservableObject {
YubiKitManager.shared.stopNFCConnection(withErrorMessage: error.localizedDescription)
} else {
self.state = .didChange
- YubiKitManager.shared.stopNFCConnection(withMessage: "PIN has been changed")
+ YubiKitManager.shared.stopNFCConnection(withMessage: String(localized: "PIN has been changed"))
}
self.isProcessing = false
}
diff --git a/Authenticator/Model/FIDOResetViewModel.swift b/Authenticator/Model/FIDOResetViewModel.swift
index a3b22d71..09020060 100644
--- a/Authenticator/Model/FIDOResetViewModel.swift
+++ b/Authenticator/Model/FIDOResetViewModel.swift
@@ -76,7 +76,7 @@ class FIDOResetViewModel: ObservableObject {
self.resetAccessory(connection: connection)
return
}
- self.state = .error("Unknown error")
+ self.state = .error(String(localized: "Unknown error"))
}
}
diff --git a/Authenticator/Model/OATHPasswordViewModel.swift b/Authenticator/Model/OATHPasswordViewModel.swift
index a239df25..a15294a4 100644
--- a/Authenticator/Model/OATHPasswordViewModel.swift
+++ b/Authenticator/Model/OATHPasswordViewModel.swift
@@ -22,9 +22,9 @@ enum OATHViewModelError: Error, LocalizedError {
public var errorDescription: String? {
switch self {
case .wrongPassword:
- return "Wrong password"
+ return String(localized: "Wrong password")
case .passwordsDoNotMatch:
- return "Passwords don't match"
+ return String(localized: "Passwords don't match")
}
}
}
@@ -99,7 +99,7 @@ class OATHPasswordViewModel: ObservableObject {
}
session.listCredentials { _, error in
DispatchQueue.main.async {
- defer { YubiKitManager.shared.stopNFCConnection(withMessage: "Password state read") }
+ defer { YubiKitManager.shared.stopNFCConnection(withMessage: String(localized: "Password state read")) }
guard let error = error else {
self.state = .notSet
return
@@ -146,7 +146,7 @@ class OATHPasswordViewModel: ObservableObject {
YubiKitManager.shared.stopNFCConnection(withErrorMessage: error.localizedDescription)
} else {
self.state = .didSet
- YubiKitManager.shared.stopNFCConnection(withMessage: "Password has been set")
+ YubiKitManager.shared.stopNFCConnection(withMessage: String(localized: "Password has been set"))
}
self.isProcessing = false
}
@@ -195,7 +195,7 @@ class OATHPasswordViewModel: ObservableObject {
YubiKitManager.shared.stopNFCConnection(withErrorMessage: error.localizedDescription)
} else {
self.state = newPassword != nil ? .didSet : .notSet
- YubiKitManager.shared.stopNFCConnection(withMessage: newPassword != nil ? "Password has been changed" : "Password has been removed")
+ YubiKitManager.shared.stopNFCConnection(withMessage: newPassword != nil ? String(localized: "Password has been changed") : String(localized: "Password has been removed"))
}
self.isProcessing = false
}
diff --git a/Authenticator/Model/ResetOATHViewModel.swift b/Authenticator/Model/ResetOATHViewModel.swift
index 19898ffb..60a5a97b 100644
--- a/Authenticator/Model/ResetOATHViewModel.swift
+++ b/Authenticator/Model/ResetOATHViewModel.swift
@@ -30,7 +30,7 @@ class ResetOATHViewModel: ObservableObject {
connection.startConnection { connection in
connection.oathSession { session, error in
guard let session = session else {
- let errorMessage = error?.localizedDescription ?? "Unknown error"
+ let errorMessage = error?.localizedDescription ?? String(localized: "Unknown error")
YubiKitManager.shared.stopNFCConnection(withErrorMessage: errorMessage)
DispatchQueue.main.async {
self.state = .error(errorMessage)
diff --git a/Authenticator/UI/Authentication/AddCredential/mul.lproj/AddCredential.xcstrings b/Authenticator/UI/Authentication/AddCredential/mul.lproj/AddCredential.xcstrings
index 22434495..8c23c020 100644
--- a/Authenticator/UI/Authentication/AddCredential/mul.lproj/AddCredential.xcstrings
+++ b/Authenticator/UI/Authentication/AddCredential/mul.lproj/AddCredential.xcstrings
@@ -37,7 +37,7 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "Type"
}
},
@@ -85,13 +85,13 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "6"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "6"
}
}
@@ -181,13 +181,13 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "30"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "30"
}
}
@@ -253,13 +253,13 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "TOTP"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "TOTP"
}
}
@@ -277,7 +277,7 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "Secret"
}
},
@@ -301,13 +301,13 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "john@doe.com"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "john@doe.com"
}
}
@@ -325,13 +325,13 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "SHA1"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "SHA1"
}
}
@@ -349,7 +349,7 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "Secret"
}
},
diff --git a/Authenticator/UI/Authentication/EditCredential/mul.lproj/EditCredential.xcstrings b/Authenticator/UI/Authentication/EditCredential/mul.lproj/EditCredential.xcstrings
index 01ac2712..d9404c76 100644
--- a/Authenticator/UI/Authentication/EditCredential/mul.lproj/EditCredential.xcstrings
+++ b/Authenticator/UI/Authentication/EditCredential/mul.lproj/EditCredential.xcstrings
@@ -13,13 +13,13 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "jens.utbult@yubico.com"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "jens.utbult@yubico.com"
}
}
diff --git a/Authenticator/UI/YubiKeyConfiguration/FIDOPINView.swift b/Authenticator/UI/YubiKeyConfiguration/FIDOPINView.swift
index 6153c702..ee823b9c 100644
--- a/Authenticator/UI/YubiKeyConfiguration/FIDOPINView.swift
+++ b/Authenticator/UI/YubiKeyConfiguration/FIDOPINView.swift
@@ -66,7 +66,7 @@ struct FIDOPINView: View {
.sheet(isPresented: $presentChangePIN) {
FIDOSetChangePINView(type: .change)
}
- .alert(error?.localizedDescription ?? "Unknown error", isPresented: $presentErrorAlert, actions: {
+ .alert(error?.localizedDescription ?? String(localized: "Unknown error"), isPresented: $presentErrorAlert, actions: {
Button(role: .cancel) {
error = nil
if model.state.isFatalError() {
@@ -183,7 +183,7 @@ struct FIDOSetChangePINView: View {
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color(.systemGroupedBackground))
- .navigationBarTitle(type == .set ? "Set PIN" : "Change PIN", displayMode: .inline)
+ .navigationBarTitle(type == .set ? String(localized: "Set PIN") : String(localized: "Change PIN"), displayMode: .inline)
.navigationBarItems(leading: Button(action: { dismiss() }, label: { Text("Cancel") }))
.navigationBarItems(trailing: Button(action: {
setNewPin()
@@ -205,7 +205,7 @@ struct FIDOSetChangePINView: View {
default: break
}
}
- .alert(errorMessage ?? "Unknown error", isPresented: $presentErrorAlert, actions: {
+ .alert(errorMessage ?? String(localized: "Unknown error"), isPresented: $presentErrorAlert, actions: {
Button(role: .cancel) {
errorMessage = nil
if model.state.isFatalError() {
@@ -229,11 +229,11 @@ struct FIDOSetChangePINView: View {
private func setNewPin() {
guard newPIN == repeatedPIN else {
- presentValidationError("PINs do not match.")
+ presentValidationError(String(localized: "PINs do not match.", comment: "Set PIN view validation error"))
return
}
guard newPIN.count >= model.minPinLength else {
- presentValidationError("PIN should be at least \(model.minPinLength) characters long.")
+ presentValidationError(String(localized: "PIN should be at least \(model.minPinLength) characters long."))
return
}
if type == .set {
diff --git a/Authenticator/UI/YubiKeyConfiguration/FIDOResetView.swift b/Authenticator/UI/YubiKeyConfiguration/FIDOResetView.swift
index c8d05993..5d79c1c1 100644
--- a/Authenticator/UI/YubiKeyConfiguration/FIDOResetView.swift
+++ b/Authenticator/UI/YubiKeyConfiguration/FIDOResetView.swift
@@ -16,7 +16,7 @@
import SwiftUI
-fileprivate let resetMessageText = "Your credentials, as well as any PIN set, will be removed from this YubiKey. Make sure to first disable these from their respective web sites to avoid being locked out of your accounts."
+fileprivate let resetMessageText = String(localized: "Your credentials, as well as any PIN set, will be removed from this YubiKey. Make sure to first disable these from their respective web sites to avoid being locked out of your accounts.")
struct FIDOResetView: View {
@@ -58,7 +58,7 @@ struct FIDOResetView: View {
}, message: { _ in
Text("This will irrevocably delete all U2F and FIDO2 accounts, including passkeys, from your YubiKey.")
})
- .alert(errorMessage ?? "Unknown error", isPresented: $presentErrorAlert, actions: {
+ .alert(errorMessage ?? String(localized: "Unknown error"), isPresented: $presentErrorAlert, actions: {
Button(role: .cancel) {
errorMessage = nil
if model.state.isError() {
@@ -85,20 +85,20 @@ struct FIDOResetView: View {
case .waitingForKeyRemove:
self.enableResetButton = false
self.progress = 1.0
- self.messageText = "Unplug your YubiKey."
+ self.messageText = String(localized: "Unplug your YubiKey.", comment: "FIDO reset view")
case .waitingForKeyReinsert:
self.enableResetButton = false
self.progress = 2.0
- self.messageText = "Reinsert your Yubikey."
+ self.messageText = String(localized: "Reinsert your YubiKey.", comment: "FIDO reset view")
case .waitingForKeyTouch:
self.progress = 3.0
self.enableResetButton = false
- self.messageText = "Touch the button on the YubiKey now."
+ self.messageText = String(localized: "Touch the button on the YubiKey now.", comment: "FIDO reset view")
case .success:
self.progress = 4.0
self.opacity = 0.5
self.enableResetButton = false
- self.messageText = "The FIDO application of your Yubikey has been reset to factory defaults."
+ self.messageText = String(localized: "The FIDO application of your YubiKey has been reset to factory defaults.", comment: "FIDO reset view")
case .error(let error):
self.enableResetButton = true
self.presentErrorAlert = true
diff --git a/Authenticator/UI/YubiKeyConfiguration/OATHPasswordView.swift b/Authenticator/UI/YubiKeyConfiguration/OATHPasswordView.swift
index 8b5b6492..d8f118a6 100644
--- a/Authenticator/UI/YubiKeyConfiguration/OATHPasswordView.swift
+++ b/Authenticator/UI/YubiKeyConfiguration/OATHPasswordView.swift
@@ -62,7 +62,7 @@ struct OATHPasswordView: View {
.sheet(isPresented: $presentRemovePassword) {
OATHSetChangePasswordView(type: .remove)
}
- .alert(error?.localizedDescription ?? "Unknown error", isPresented: $presentErrorAlert, actions: {
+ .alert(error?.localizedDescription ?? String(localized: "Unknown error"), isPresented: $presentErrorAlert, actions: {
Button(role: .cancel) {
error = nil
if model.state.isError() {
@@ -129,22 +129,22 @@ struct OATHSetChangePasswordView: View {
var navBarTitle: String {
switch self.type {
case .set:
- return "Set password"
+ return String(localized: "Set password")
case .change:
- return "Change password"
+ return String(localized: "Change password")
case .remove:
- return "Remove password"
+ return String(localized: "Remove password")
}
}
var buttonTitle: String {
switch self.type {
case .set:
- return "Set"
+ return String(localized: "Set")
case .change:
- return "Change"
+ return String(localized: "Change")
case .remove:
- return "Remove"
+ return String(localized: "Remove")
}
}
@@ -154,7 +154,7 @@ struct OATHSetChangePasswordView: View {
VStack(spacing: 0) {
if type == .change || type == .remove {
HStack {
- Text(type == .remove ? "Password" : "Current").frame(maxWidth: 100, alignment: .leading).padding()
+ Text(type == .remove ? String(localized: "Password", comment: "Enter password in secure field to remove password.") : String(localized: "Current", comment: "Enter current password in secure field to change password.")).frame(maxWidth: 100, alignment: .leading).padding()
SecureField("enter current password", text: $currentPassword).submitLabel(.next).focused($focusedField, equals: .currentPassword)
}
Color(.separator)
@@ -164,7 +164,7 @@ struct OATHSetChangePasswordView: View {
}
if type != .remove {
HStack {
- Text("New").frame(maxWidth: 100, alignment: .leading).padding()
+ Text(String(localized: "New", comment: "Enter new password in secure field.")).frame(maxWidth: 100, alignment: .leading).padding()
SecureField("enter password", text: $newPassword).submitLabel(.next).focused($focusedField, equals: .newPassword)
}
Color(.separator)
@@ -172,7 +172,7 @@ struct OATHSetChangePasswordView: View {
.frame(maxWidth: .infinity)
.padding(0)
HStack {
- Text("Verify").frame(maxWidth: 100, alignment: .leading).padding()
+ Text(String(localized: "Verify", comment: "Re-enter new password in secure field.")).frame(maxWidth: 100, alignment: .leading).padding()
SecureField("re-enter password", text: $repeatedPassword).submitLabel(.return).focused($focusedField, equals: .repeatedPassword)
}
}
@@ -222,7 +222,7 @@ struct OATHSetChangePasswordView: View {
default: break
}
}
- .alert(errorMessage ?? "Unknown error", isPresented: $presentErrorAlert, actions: {
+ .alert(errorMessage ?? String(localized: "Unknown error"), isPresented: $presentErrorAlert, actions: {
Button(role: .cancel) {
errorMessage = nil
if model.state.isFatalError() {
diff --git a/Authenticator/UI/YubiKeyConfiguration/OATHResetView.swift b/Authenticator/UI/YubiKeyConfiguration/OATHResetView.swift
index 54d068b8..327407b6 100644
--- a/Authenticator/UI/YubiKeyConfiguration/OATHResetView.swift
+++ b/Authenticator/UI/YubiKeyConfiguration/OATHResetView.swift
@@ -26,12 +26,12 @@ struct OATHResetView: View {
var body: some View {
SettingsView(image: Image(systemName: "exclamationmark.triangle").foregroundColor(.red)) {
- Text(keyHasBeenReset ? "YubiKey has been reset" : "Reset OATH application").font(.headline)
+ Text(keyHasBeenReset ? String(localized: "YubiKey has been reset") : String(localized: "Reset OATH application")).font(.headline)
Text("Reset all accounts stored on YubiKey, make sure they are not in use anywhere before doing this.")
.multilineTextAlignment(.center)
.opacity(keyHasBeenReset ? 0.2 : 1.0)
} buttons: {
- SettingsButton("Reset Yubikey") {
+ SettingsButton("Reset YubiKey") {
presentConfirmAlert.toggle()
}
.disabled(keyHasBeenReset)
@@ -50,7 +50,7 @@ struct OATHResetView: View {
Text("Cancel")
}
})
- .alert(errorMessage ?? "Unknown error", isPresented: $presentErrorAlert, actions: { })
+ .alert(errorMessage ?? String(localized: "Unknown error"), isPresented: $presentErrorAlert, actions: { })
.onChange(of: model.state) { state in
withAnimation {
switch state {
diff --git a/Authenticator/UI/YubiKeyConfiguration/OATHSavedPasswordsView.swift b/Authenticator/UI/YubiKeyConfiguration/OATHSavedPasswordsView.swift
index 0882777d..51269389 100644
--- a/Authenticator/UI/YubiKeyConfiguration/OATHSavedPasswordsView.swift
+++ b/Authenticator/UI/YubiKeyConfiguration/OATHSavedPasswordsView.swift
@@ -49,7 +49,7 @@ struct OATHSavedPasswordsView: View {
Text("Cancel")
}
})
- .alert(errorMessage ?? "Unknown error", isPresented: $presentErrorAlert, actions: { })
+ .alert(errorMessage ?? String(localized: "Unknown error"), isPresented: $presentErrorAlert, actions: { })
.onChange(of: model.state) { state in
withAnimation {
switch state {
diff --git a/Authenticator/UI/mul.lproj/Main.xcstrings b/Authenticator/UI/mul.lproj/Main.xcstrings
index d203cb0b..10d1414d 100644
--- a/Authenticator/UI/mul.lproj/Main.xcstrings
+++ b/Authenticator/UI/mul.lproj/Main.xcstrings
@@ -79,13 +79,13 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "FIDO"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "FIDO"
}
}
@@ -121,13 +121,13 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "1.0"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "1.0"
}
}
@@ -271,14 +271,14 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Enabled"
+ "state" : "translated",
+ "value" : "Activé"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Enabled"
+ "state" : "translated",
+ "value" : "有効"
}
}
}
@@ -313,14 +313,14 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Reset FIDO application"
+ "state" : "translated",
+ "value" : "Réinitialiser l'application FIDO"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Reset FIDO application"
+ "state" : "translated",
+ "value" : "FIDOアプリケーションのリセット"
}
}
}
@@ -337,7 +337,7 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "Firmware"
}
},
@@ -583,14 +583,14 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Reset OATH application"
+ "state" : "translated",
+ "value" : "Réinitialiser l'application OATH"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Reset OATH application"
+ "state" : "translated",
+ "value" : "OATHアプリケーションのリセット"
}
}
}
@@ -625,7 +625,7 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "Configuration"
}
},
@@ -799,14 +799,14 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Manage PIN"
+ "state" : "translated",
+ "value" : "Modifier PIN"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Manage PIN"
+ "state" : "translated",
+ "value" : "PINを変更"
}
}
}
@@ -1255,14 +1255,14 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Manage password"
+ "state" : "translated",
+ "value" : "Gérer mot de passe"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Manage password"
+ "state" : "translated",
+ "value" : "パスワードを管理"
}
}
}
@@ -1279,14 +1279,14 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Clear saved passwords"
+ "state" : "translated",
+ "value" : "Effacer mot de passe enregistré"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Clear saved passwords"
+ "state" : "translated",
+ "value" : "保存したパスワードを消去"
}
}
}
@@ -1357,8 +1357,8 @@
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "N/A"
+ "state" : "translated",
+ "value" : "該当なし"
}
}
}
@@ -1423,13 +1423,13 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "OATH"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "OATH"
}
}
@@ -1543,8 +1543,8 @@
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "N/A"
+ "state" : "translated",
+ "value" : "該当なし"
}
}
}
@@ -1585,7 +1585,7 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "Application"
}
},
@@ -1633,14 +1633,14 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "Configuration"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Configuration"
+ "state" : "translated",
+ "value" : "構成"
}
}
}
@@ -1663,8 +1663,8 @@
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "UnwindButton"
+ "state" : "translated",
+ "value" : "巻き戻しボタン"
}
}
}
@@ -1759,8 +1759,8 @@
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "N/A"
+ "state" : "translated",
+ "value" : "該当なし"
}
}
}
@@ -1795,13 +1795,13 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "Yubico Authenticator"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "Yubico Authenticator"
}
}
@@ -1933,13 +1933,13 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "PIV"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "PIV"
}
}
@@ -2071,14 +2071,14 @@
},
"fr" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Smart card extension"
+ "state" : "translated",
+ "value" : "Extension de la carte à puce"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
- "value" : "Smart card extension"
+ "state" : "translated",
+ "value" : "スマートカード拡張"
}
}
}
diff --git a/TokenExtension/InfoPlist.xcstrings b/TokenExtension/InfoPlist.xcstrings
index fce74682..069a2c45 100644
--- a/TokenExtension/InfoPlist.xcstrings
+++ b/TokenExtension/InfoPlist.xcstrings
@@ -14,12 +14,12 @@
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Extension jeton"
+ "value" : "TokenExtension"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "TokenExtension"
}
}
@@ -38,12 +38,12 @@
"fr" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Extension jeton"
+ "value" : "TokenExtension"
}
},
"ja" : {
"stringUnit" : {
- "state" : "new",
+ "state" : "translated",
"value" : "TokenExtension"
}
}