diff --git a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj index e9c986c21b65f7581a2ff94b2157f6d1b9b4d778..2ec4c6fa630bc203b9ea2cffd699982757081d9f 100644 --- a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj +++ b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj @@ -24,6 +24,26 @@ 3AED7EE42449387600FC6BCC /* SearchResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AED7EE32449387600FC6BCC /* SearchResponse.swift */; }; 3AF4A84524A06A73006C0C0A /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 3AF4A84724A06A73006C0C0A /* Localizable.strings */; }; 430C967B2E966FC047726763 /* Pods_All_AgileWorks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF516C40B9AA44C977664C98 /* Pods_All_AgileWorks.framework */; }; + 75917F9C27BDF0F10051E201 /* Japanese.strings in Resources */ = {isa = PBXBuildFile; fileRef = 75917F9B27BDF0F10051E201 /* Japanese.strings */; }; + 75917F9E27BDF1C30051E201 /* English.strings in Resources */ = {isa = PBXBuildFile; fileRef = 75917F9D27BDF1C30051E201 /* English.strings */; }; + 75917FA027BDF2050051E201 /* Chinese-Simplified.strings in Resources */ = {isa = PBXBuildFile; fileRef = 75917F9F27BDF2050051E201 /* Chinese-Simplified.strings */; }; + 75917FA227BDF2250051E201 /* Chinese-Traditional.strings in Resources */ = {isa = PBXBuildFile; fileRef = 75917FA127BDF2250051E201 /* Chinese-Traditional.strings */; }; + 75917FA727C36D0C0051E201 /* Japanese.strings in Resources */ = {isa = PBXBuildFile; fileRef = 75917F9B27BDF0F10051E201 /* Japanese.strings */; }; + 75917FA827C36D220051E201 /* English.strings in Resources */ = {isa = PBXBuildFile; fileRef = 75917F9D27BDF1C30051E201 /* English.strings */; }; + 75917FA927C36D220051E201 /* Chinese-Simplified.strings in Resources */ = {isa = PBXBuildFile; fileRef = 75917F9F27BDF2050051E201 /* Chinese-Simplified.strings */; }; + 75917FAA27C36D220051E201 /* Chinese-Traditional.strings in Resources */ = {isa = PBXBuildFile; fileRef = 75917FA127BDF2250051E201 /* Chinese-Traditional.strings */; }; + 75917FAB27C36D340051E201 /* Japanese.strings in Resources */ = {isa = PBXBuildFile; fileRef = 75917F9B27BDF0F10051E201 /* Japanese.strings */; }; + 75917FAC27C36D340051E201 /* English.strings in Resources */ = {isa = PBXBuildFile; fileRef = 75917F9D27BDF1C30051E201 /* English.strings */; }; + 75917FAD27C36D340051E201 /* Chinese-Simplified.strings in Resources */ = {isa = PBXBuildFile; fileRef = 75917F9F27BDF2050051E201 /* Chinese-Simplified.strings */; }; + 75917FAE27C36D340051E201 /* Chinese-Traditional.strings in Resources */ = {isa = PBXBuildFile; fileRef = 75917FA127BDF2250051E201 /* Chinese-Traditional.strings */; }; + 75917FAF27C36E4A0051E201 /* KeychainDataStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDEA2CD4246CDAEF00D3E15F /* KeychainDataStore.swift */; }; + 75917FB027C36E950051E201 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD5061B3242866780014F3FA /* Configuration.swift */; }; + 75917FB127C36F7B0051E201 /* UserDefaultsDataStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD928CCD2407500400ED04C2 /* UserDefaultsDataStore.swift */; }; + 75917FB327C371390051E201 /* StringsUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75917FB227C371390051E201 /* StringsUtility.swift */; }; + 75917FB427C371390051E201 /* StringsUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75917FB227C371390051E201 /* StringsUtility.swift */; }; + 75917FB527C371390051E201 /* StringsUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75917FB227C371390051E201 /* StringsUtility.swift */; }; + 75917FB627C372C80051E201 /* XCGLoggerExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD8D55D82420609000A667B0 /* XCGLoggerExtensions.swift */; }; + 75917FB727C373060051E201 /* UserDefaultsExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDAB1F6C240D0D0000EA15FD /* UserDefaultsExtensions.swift */; }; 7604950425380980000D6951 /* FirebaseSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7604950325380980000D6951 /* FirebaseSupport.swift */; }; 761F49E2255511A1007708D8 /* NumberUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761F49E1255511A1007708D8 /* NumberUtility.swift */; }; 761F4A0925551FCF007708D8 /* NumberUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761F49E1255511A1007708D8 /* NumberUtility.swift */; }; @@ -190,6 +210,19 @@ 3AED7EE32449387600FC6BCC /* SearchResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResponse.swift; sourceTree = ""; }; 3AF4A84624A06A73006C0C0A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 3AF4A84824A06AD0006C0C0A /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; + 75917F8F27BD315A0051E201 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/LaunchScreen.strings"; sourceTree = ""; }; + 75917F9027BD315A0051E201 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MainInterface.strings"; sourceTree = ""; }; + 75917F9127BD315A0051E201 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MainInterface.strings"; sourceTree = ""; }; + 75917F9227BD315A0051E201 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; + 75917F9327BD317D0051E201 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/LaunchScreen.strings"; sourceTree = ""; }; + 75917F9427BD317D0051E201 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/MainInterface.strings"; sourceTree = ""; }; + 75917F9527BD317D0051E201 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/MainInterface.strings"; sourceTree = ""; }; + 75917F9627BD317E0051E201 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; + 75917F9B27BDF0F10051E201 /* Japanese.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = Japanese.strings; sourceTree = ""; }; + 75917F9D27BDF1C30051E201 /* English.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = English.strings; sourceTree = ""; }; + 75917F9F27BDF2050051E201 /* Chinese-Simplified.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = "Chinese-Simplified.strings"; sourceTree = ""; }; + 75917FA127BDF2250051E201 /* Chinese-Traditional.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = "Chinese-Traditional.strings"; sourceTree = ""; }; + 75917FB227C371390051E201 /* StringsUtility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringsUtility.swift; sourceTree = ""; }; 7604950325380980000D6951 /* FirebaseSupport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirebaseSupport.swift; sourceTree = ""; }; 761F49E1255511A1007708D8 /* NumberUtility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NumberUtility.swift; sourceTree = ""; }; 761F4A48255D15DA007708D8 /* AppShared.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppShared.swift; sourceTree = ""; }; @@ -398,12 +431,25 @@ path = Main; sourceTree = ""; }; + 75917F9A27BDEC880051E201 /* Strings */ = { + isa = PBXGroup; + children = ( + 3AF4A84724A06A73006C0C0A /* Localizable.strings */, + 75917F9D27BDF1C30051E201 /* English.strings */, + 75917F9B27BDF0F10051E201 /* Japanese.strings */, + 75917F9F27BDF2050051E201 /* Chinese-Simplified.strings */, + 75917FA127BDF2250051E201 /* Chinese-Traditional.strings */, + ); + path = Strings; + sourceTree = ""; + }; 761F49E025551159007708D8 /* Utility */ = { isa = PBXGroup; children = ( 761F49E1255511A1007708D8 /* NumberUtility.swift */, 764D0E1A2580ABCB00AB6617 /* URLAuthenticationUtility.swift */, 76AE52DC25D35CDC00AFA45A /* LicenseUtility.swift */, + 75917FB227C371390051E201 /* StringsUtility.swift */, ); path = Utility; sourceTree = ""; @@ -739,7 +785,7 @@ 76AE52DB25D358D700AFA45A /* License */, BDEB7D8D23F5293800EFAF31 /* Podfile */, BDA1832823F406A600C9A6DD /* README.md */, - 3AF4A84724A06A73006C0C0A /* Localizable.strings */, + 75917F9A27BDEC880051E201 /* Strings */, ); path = AgileWorks; sourceTree = ""; @@ -949,12 +995,14 @@ }; buildConfigurationList = BDA1830A23F3FD7F00C9A6DD /* Build configuration list for PBXProject "AgileWorks" */; compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; + developmentRegion = ja; hasScannedForEncodings = 0; knownRegions = ( + ja, en, Base, - ja, + "zh-Hans", + "zh-Hant", ); mainGroup = BDA1830623F3FD7F00C9A6DD; productRefGroup = BDA1831023F3FD7F00C9A6DD /* Products */; @@ -973,6 +1021,10 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 75917FA827C36D220051E201 /* English.strings in Resources */, + 75917FA927C36D220051E201 /* Chinese-Simplified.strings in Resources */, + 75917FAA27C36D220051E201 /* Chinese-Traditional.strings in Resources */, + 75917FA727C36D0C0051E201 /* Japanese.strings in Resources */, 3127EE12241A2A9500535CC7 /* MainInterface.storyboard in Resources */, BD6DE26F24D1079700C1479E /* Localizable.strings in Resources */, ); @@ -982,6 +1034,10 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 75917FAB27C36D340051E201 /* Japanese.strings in Resources */, + 75917FAC27C36D340051E201 /* English.strings in Resources */, + 75917FAD27C36D340051E201 /* Chinese-Simplified.strings in Resources */, + 75917FAE27C36D340051E201 /* Chinese-Traditional.strings in Resources */, 7672AD6F257EFF500063884A /* MainInterface.storyboard in Resources */, 764D0E122580641F00AB6617 /* Localizable.strings in Resources */, ); @@ -998,15 +1054,19 @@ BDA1831C23F3FD8000C9A6DD /* Assets.xcassets in Resources */, 76AE52D725D358A800AFA45A /* License.rtf in Resources */, 76AE52FB25D3624200AFA45A /* LicenseViewController.storyboard in Resources */, + 75917F9E27BDF1C30051E201 /* English.strings in Resources */, BDA1832923F406A600C9A6DD /* README.md in Resources */, EVOMTNLDKX75D3I1FNY2QSS7 /* SplashViewController.storyboard in Resources */, 3AF4A84524A06A73006C0C0A /* Localizable.strings in Resources */, CRJ55ZZNLTXIY1R10AXQL1VZ /* LoginViewController.storyboard in Resources */, + 75917FA027BDF2050051E201 /* Chinese-Simplified.strings in Resources */, BDA1832F23F40F1000C9A6DD /* Colors.xcassets in Resources */, BD917FD82473C800005D2437 /* FormWebViewController.storyboard in Resources */, + 75917F9C27BDF0F10051E201 /* Japanese.strings in Resources */, BDA6D6A52411FFAA00FA9C33 /* Settings.bundle in Resources */, 76C4996C24E5097200759B93 /* GoogleService-Info-Production.plist in Resources */, I07ZJPNVIS069WBRK1L3WPOY /* MainViewController.storyboard in Resources */, + 75917FA227BDF2250051E201 /* Chinese-Traditional.strings in Resources */, 3A1F975224AF2D0000AE6A42 /* ModalFullCollectionViewController.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1116,6 +1176,7 @@ BD7DC0F324C061EA00C3FBED /* ErrorResponse.swift in Sources */, 3127EE0F241A2A9500535CC7 /* TodayViewController.swift in Sources */, BD13676C244427C600767222 /* GetSubmissionsIDEndpoint.swift in Sources */, + 75917FB427C371390051E201 /* StringsUtility.swift in Sources */, BDA74C52245016AC000D4351 /* XCGLoggerExtensions.swift in Sources */, BD1B50DD244DABF900783FB5 /* OAuthService.swift in Sources */, ); @@ -1125,8 +1186,14 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 75917FB727C373060051E201 /* UserDefaultsExtensions.swift in Sources */, + 75917FB627C372C80051E201 /* XCGLoggerExtensions.swift in Sources */, + 75917FB127C36F7B0051E201 /* UserDefaultsDataStore.swift in Sources */, + 75917FB027C36E950051E201 /* Configuration.swift in Sources */, + 75917FAF27C36E4A0051E201 /* KeychainDataStore.swift in Sources */, 764D0E1D2580ABCB00AB6617 /* URLAuthenticationUtility.swift in Sources */, 7672AD6C257EFF500063884A /* ShareViewController.swift in Sources */, + 75917FB527C371390051E201 /* StringsUtility.swift in Sources */, 764D0DB1257F44DF00AB6617 /* CertificateDataStore.swift in Sources */, 764D0DB9257F4A9200AB6617 /* Log.swift in Sources */, ); @@ -1211,6 +1278,7 @@ BD3E90822474D56100B449A7 /* WKWebViewExtensions.swift in Sources */, 76F9B9452505FAA600BD2EBA /* FormWebViewScriptMessageHandler.swift in Sources */, BD25F853242A05510014B726 /* Session.swift in Sources */, + 75917FB327C371390051E201 /* StringsUtility.swift in Sources */, BD9D569F24AF14AB00C73B33 /* NotificationData.swift in Sources */, BDEA2CD5246CDAEF00D3E15F /* KeychainDataStore.swift in Sources */, BDAABA1F24A364D00077EC69 /* DeviceRequest.swift in Sources */, @@ -1239,6 +1307,8 @@ isa = PBXVariantGroup; children = ( 3127EE11241A2A9500535CC7 /* Base */, + 75917F9027BD315A0051E201 /* zh-Hans */, + 75917F9427BD317D0051E201 /* zh-Hant */, ); name = MainInterface.storyboard; sourceTree = ""; @@ -1248,6 +1318,8 @@ children = ( 3AF4A84624A06A73006C0C0A /* en */, 3AF4A84824A06AD0006C0C0A /* ja */, + 75917F9227BD315A0051E201 /* zh-Hans */, + 75917F9627BD317E0051E201 /* zh-Hant */, ); name = Localizable.strings; sourceTree = ""; @@ -1256,6 +1328,8 @@ isa = PBXVariantGroup; children = ( 7672AD6E257EFF500063884A /* Base */, + 75917F9127BD315A0051E201 /* zh-Hans */, + 75917F9527BD317D0051E201 /* zh-Hant */, ); name = MainInterface.storyboard; sourceTree = ""; @@ -1264,6 +1338,8 @@ isa = PBXVariantGroup; children = ( BDA1831E23F3FD8000C9A6DD /* Base */, + 75917F8F27BD315A0051E201 /* zh-Hans */, + 75917F9327BD317D0051E201 /* zh-Hant */, ); name = LaunchScreen.storyboard; sourceTree = ""; diff --git a/AgileWorks/AgileWorks/App/AppShared.swift b/AgileWorks/AgileWorks/App/AppShared.swift index 71a9d0203e0c7a0805b388b13f599f4caca4981f..0492ce6e7111ac6b6efd621a854521af0843d76e 100644 --- a/AgileWorks/AgileWorks/App/AppShared.swift +++ b/AgileWorks/AgileWorks/App/AppShared.swift @@ -39,5 +39,5 @@ class AppShared { func appVersionLabelText() -> String { let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String - return String(format: NSLocalizedString("AppVersion", comment: ""), version) + return String(format: localizadString(key: "AppVersion", comment: ""), version) } diff --git a/AgileWorks/AgileWorks/App/zh-Hans.lproj/LaunchScreen.strings b/AgileWorks/AgileWorks/App/zh-Hans.lproj/LaunchScreen.strings new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/AgileWorks/AgileWorks/App/zh-Hans.lproj/LaunchScreen.strings @@ -0,0 +1 @@ + diff --git a/AgileWorks/AgileWorks/App/zh-Hant.lproj/LaunchScreen.strings b/AgileWorks/AgileWorks/App/zh-Hant.lproj/LaunchScreen.strings new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/AgileWorks/AgileWorks/App/zh-Hant.lproj/LaunchScreen.strings @@ -0,0 +1 @@ + diff --git a/AgileWorks/AgileWorks/Form/View/Cell/ModalCollectionViewCell.swift b/AgileWorks/AgileWorks/Form/View/Cell/ModalCollectionViewCell.swift index 92d77425ae8b284d9ba5d7200107e33c1b80734d..1f8795b882df2f7586ee0d94aabc64065d0180b2 100644 --- a/AgileWorks/AgileWorks/Form/View/Cell/ModalCollectionViewCell.swift +++ b/AgileWorks/AgileWorks/Form/View/Cell/ModalCollectionViewCell.swift @@ -84,8 +84,8 @@ class ModalCollectionViewCell: UICollectionViewCell { // naviBtns.enabled に override.enabled の内容も反映されているが処理の対称性のために両方見ておく。 textLabel.isEnabled = override?.enabled ?? naviBtns.enabled isUserInteractionEnabled = naviBtns.enabled ? true : false - layer.borderColor = naviBtns.enabled ? UIColor(named: NSLocalizedString("MainColor", comment: ""))!.cgColor : UIColor(named: NSLocalizedString("ClickBtnColor", comment: ""))!.cgColor - textLabel.textColor = naviBtns.enabled ? UIColor(named: NSLocalizedString("MainColor", comment: ""))! : UIColor(named: NSLocalizedString("ClickBtnColor", comment: ""))! + layer.borderColor = naviBtns.enabled ? UIColor(named: localizadString(key: "MainColor", comment: ""))!.cgColor : UIColor(named: localizadString(key: "ClickBtnColor", comment: ""))!.cgColor + textLabel.textColor = naviBtns.enabled ? UIColor(named: localizadString(key: "MainColor", comment: ""))! : UIColor(named: localizadString(key: "ClickBtnColor", comment: ""))! if let size = textLabelSize { textLabel.sizeThatFits(size) } else { @@ -93,7 +93,7 @@ class ModalCollectionViewCell: UICollectionViewCell { textLabel.sizeToFit() } iconView.image = UIImage(named: getType(type: naviBtns.type).rawValue) - iconView.tintColor = naviBtns.enabled ? UIColor(named: NSLocalizedString("MainColor", comment: ""))! : UIColor(named: NSLocalizedString("ClickBtnColor", comment: ""))! + iconView.tintColor = naviBtns.enabled ? UIColor(named: localizadString(key: "MainColor", comment: ""))! : UIColor(named: localizadString(key: "ClickBtnColor", comment: ""))! setBadge(badge) } diff --git a/AgileWorks/AgileWorks/Form/View/FormWebViewController.swift b/AgileWorks/AgileWorks/Form/View/FormWebViewController.swift index c438cd5f9e71bb72f6a27dada21772672978800b..47689158267890e67e6b9191cab1a278a4066719 100644 --- a/AgileWorks/AgileWorks/Form/View/FormWebViewController.swift +++ b/AgileWorks/AgileWorks/Form/View/FormWebViewController.swift @@ -102,7 +102,7 @@ class FormWebViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - self.navigationController?.navigationBar.barTintColor = UIColor(named: NSLocalizedString("MainColor", comment: "")) + self.navigationController?.navigationBar.barTintColor = UIColor(named: localizadString(key: "MainColor", comment: "")) self.navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white] self.navigationController?.presentationController?.delegate = self // モーダルDismiss設定(iOS13のみ) @@ -118,7 +118,7 @@ class FormWebViewController: UIViewController { } self.navigationItem.title = self.formTitle - self.closeButton.title = NSLocalizedString("Close", comment: "") + self.closeButton.title = localizadString(key: "Close", comment: "") self.subWebViewStack.eventDelegate = self self.updateSession() } @@ -445,7 +445,7 @@ class FormWebViewController: UIViewController { extension FormWebViewController: SubWebViewStackEventDelegate { func onClose(webView: WKWebView, stack: SubWebViewStack) { if stack.isEmpty { - closeButton.title = NSLocalizedString("Close", comment: "") + closeButton.title = localizadString(key: "Close", comment: "") } } } @@ -674,7 +674,7 @@ extension FormWebViewController: WKUIDelegate { func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) { let alertController = UIAlertController(title: "", message: message, preferredStyle: .alert) - let okAction = UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default) { _ in + let okAction = UIAlertAction(title: localizadString(key: "OK", comment: ""), style: .default) { _ in completionHandler() } alertController.addAction(okAction) @@ -683,10 +683,10 @@ extension FormWebViewController: WKUIDelegate { func webView(_ webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) { let alertController = UIAlertController(title: "", message: message, preferredStyle: .alert) - let okAction = UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default) { _ in + let okAction = UIAlertAction(title: localizadString(key: "OK", comment: ""), style: .default) { _ in completionHandler(true) } - let cancelAction = UIAlertAction(title: NSLocalizedString("Cancel", comment: ""), style: .cancel) { _ in + let cancelAction = UIAlertAction(title: localizadString(key: "Cancel", comment: ""), style: .cancel) { _ in completionHandler(false) } alertController.addAction(okAction) @@ -699,7 +699,7 @@ extension FormWebViewController: WKUIDelegate { let webView = WKWebView(frame: view.frame, configuration: configuration) webView.load(navigationAction.request) subWebViewStack.push(webView, superView: view) - closeButton.title = NSLocalizedString("Close Subwindow", comment: "") + closeButton.title = localizadString(key: "Close Subwindow", comment: "") return webView } return nil diff --git a/AgileWorks/AgileWorks/Form/View/FormWebViewScriptMessageHandler.swift b/AgileWorks/AgileWorks/Form/View/FormWebViewScriptMessageHandler.swift index e4f3c4cad95f859db9cc9478c35faef0d858a270..8c94f7a27c2db806062d7b9f0ec6ac8f0171508c 100644 --- a/AgileWorks/AgileWorks/Form/View/FormWebViewScriptMessageHandler.swift +++ b/AgileWorks/AgileWorks/Form/View/FormWebViewScriptMessageHandler.swift @@ -51,8 +51,8 @@ class FormWebViewScriptMessageHandler: NSObject { // パラメータ: なし "loggedOut": { controller, _, _ in DispatchQueue.main.async { - let alertController = UIAlertController(title: NSLocalizedString("LogoutAlertTitle", comment: ""), message: NSLocalizedString("LogoutAlertMessage", comment: ""), preferredStyle: .alert) - let okAction = UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default) { _ in + let alertController = UIAlertController(title: localizadString(key: "LogoutAlertTitle", comment: ""), message: localizadString(key: "LogoutAlertMessage", comment: ""), preferredStyle: .alert) + let okAction = UIAlertAction(title: localizadString(key: "OK", comment: ""), style: .default) { _ in controller.dismiss(animated: true, completion: nil) } alertController.addAction(okAction) diff --git a/AgileWorks/AgileWorks/Login/View/LoginViewController.storyboard b/AgileWorks/AgileWorks/Login/View/LoginViewController.storyboard index 77d6638cebf00386559aced461dba4537b725846..6576ee90ba104407974b7f05fefb8b382f2eb5e7 100644 --- a/AgileWorks/AgileWorks/Login/View/LoginViewController.storyboard +++ b/AgileWorks/AgileWorks/Login/View/LoginViewController.storyboard @@ -22,14 +22,64 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -95,7 +145,7 @@ - + + + + - + @@ -186,18 +243,10 @@ - - - - - @@ -211,6 +260,8 @@ + + diff --git a/AgileWorks/AgileWorks/Login/View/LoginViewController.swift b/AgileWorks/AgileWorks/Login/View/LoginViewController.swift index 0b32a18b1bdd3b7f7f077d17b238db483851f920..b5346026aff9f30acb8b773ec4b7190024f87797 100644 --- a/AgileWorks/AgileWorks/Login/View/LoginViewController.swift +++ b/AgileWorks/AgileWorks/Login/View/LoginViewController.swift @@ -8,16 +8,20 @@ import AuthenticationServices import AVFoundation +import DropDown import UIKit protocol LoginView: AnyObject { } class LoginViewController: UIViewController { + private let languageDropDown = DropDown() private let serverProtocol = "https://" private static let kValidServerPattern = try? NSRegularExpression(pattern: #"^[-a-z0-9]+(?:\.[-a-z0-9]+)*\.?(?::\d+)?$"#, options: .caseInsensitive) private static let kValidContextPattern = try? NSRegularExpression(pattern: #"^[a-z0-9]+"#, options: .caseInsensitive) + @IBOutlet private var languageView: UIView! + @IBOutlet private var languageLabel: UILabel! @IBOutlet private var appVersionLabel: UILabel! @IBOutlet private var urlStackView: UIStackView! @IBOutlet private var httpsLavel: UILabel! @@ -58,9 +62,12 @@ class LoginViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() + createLanguageDropDown() + clientCertificateSettingView.isHidden = (CertificateDataStore().readClientCertificate() == nil) - qrCodeReadLabel.text = NSLocalizedString("QRCodeReadLabel", comment: "") + //固定文言表示 + loguinTranslation() appVersionLabel.text = appVersionLabelText() @@ -74,7 +81,7 @@ class LoginViewController: UIViewController { view.addSubview(activityIndicator) activityIndicator.frame = view.bounds - activityIndicator.backgroundColor = UIColor(named: NSLocalizedString("IndicatorBackgroud", comment: "")) + activityIndicator.backgroundColor = UIColor(named: localizadString(key: "IndicatorBackgroud", comment: "")) activityIndicator.translatesAutoresizingMaskIntoConstraints = false @@ -87,6 +94,58 @@ class LoginViewController: UIViewController { NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil) } + //言語選択(ドロップダウン)の作成 + private func createLanguageDropDown() { + //現在設定中の言語 + let language = localizadString(key: "Language", comment: "") + //プルダウンメニュー詳細設定 + languageView.layer.borderColor = UIColor.black.cgColor + languageView.layer.borderWidth = 0.5 + languageView.layer.cornerRadius = 5 + languageLabel.text = language + languageDropDown.anchorView = languageView + languageDropDown.dataSource = languageArray + languageDropDown.backgroundColor = UIColor.white + languageDropDown.cornerRadius = 10 + languageDropDown.selectRow(at: getLanguageIndex(dropDownItem: language)) + //言語が選択されたアクションは以下に記載する + languageDropDown.selectionAction = { [unowned self] (index: Int, item: String) in + languageDropDownAction(item: item) + } + } + + @IBAction private func languageTapped(_ sender: Any) { + //ドロップダウン表示 + languageDropDown.show() + } + + private func languageDropDownAction(item: String) { + languageLabel.text = item + //選択した言語をセットする + switch item { + case "English": + setStringsName(stringsName: "English") + case "日本語": + setStringsName(stringsName: "Japanese") + case "中文(簡体)": + setStringsName(stringsName: "Chinese-Simplified") + case "中文(繁体)": + setStringsName(stringsName: "Chinese-Traditional") + default: + setStringsName(stringsName: "Localizable") + languageLabel.text = localizadString(key: "Language", comment: "") + } + //ログイン画面の固定文言表示を変更する + loguinTranslation() + } + + //ログイン画面の固定文言表示 + private func loguinTranslation() { + loginButton.setTitle(localizadString(key: "LoginButton", comment: ""), for: .normal) + qrCodeReadLabel.text = localizadString(key: "QRCodeReadLabel", comment: "") + serverTextField.placeholder = localizadString(key: "ServerURLPlaceholder", comment: "") + } + override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() //テキストフィールドの幅を決定 @@ -138,8 +197,8 @@ class LoginViewController: UIViewController { case .failure(let error): log.e(error) DispatchQueue.main.async { - let message = NSLocalizedString("LoginErrorMessage", comment: "") - let okAction = UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default, handler: nil) + let message = localizadString(key: "LoginErrorMessage", comment: "") + let okAction = UIAlertAction(title: localizadString(key: "OK", comment: ""), style: .default, handler: nil) AppDelegate.shared.rootViewController.showAlertScreen(view: self, title: "", message: message, defaultAction: okAction, cancelAction: nil) self.enableLogin() } @@ -156,19 +215,19 @@ class LoginViewController: UIViewController { // 読み込めるカメラ範囲設定 qrCodeReader.readRange() // ガイダンス設定 - qrCodeReader.setCameraGuide(guide: NSLocalizedString("QRCodeReadGuidance", comment: "")) + qrCodeReader.setCameraGuide(guide: localizadString(key: "QRCodeReadGuidance", comment: "")) } else { qrCodeReader.delegate = nil // カメラ起動失敗 - let message = NSLocalizedString("CameraStartupErrorMessage", comment: "") - let defaultAction = UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default) { _ in } + let message = localizadString(key: "CameraStartupErrorMessage", comment: "") + let defaultAction = UIAlertAction(title: localizadString(key: "OK", comment: ""), style: .default) { _ in } AppDelegate.shared.rootViewController.showAlertScreen(view: self, title: "", message: message, defaultAction: defaultAction, cancelAction: nil) } } private func updateCloudUsage() { - serverTextField.placeholder = NSLocalizedString("ServerURLPlaceholder", comment: "") - contextTextField.placeholder = NSLocalizedString("ContextPlaceholder", comment: "") + serverTextField.placeholder = localizadString(key: "ServerURLPlaceholder", comment: "") + contextTextField.placeholder = localizadString(key: "ContextPlaceholder", comment: "") loginButton.isEnabled = isTextFieldValue() } @@ -228,12 +287,12 @@ class LoginViewController: UIViewController { } @IBAction private func clientCertificateRemovalTapped(_ sender: Any) { - let alertController = UIAlertController(title: "", message: NSLocalizedString("ClientCertificateRemovalConfirmation", comment: ""), preferredStyle: .alert) - let okAction = UIAlertAction(title: NSLocalizedString("ClientCertificateRemovalOK", comment: ""), style: .default) { _ in + let alertController = UIAlertController(title: "", message: localizadString(key: "ClientCertificateRemovalConfirmation", comment: ""), preferredStyle: .alert) + let okAction = UIAlertAction(title:localizadString(key: "ClientCertificateRemovalOK", comment: ""), style: .default) { _ in CertificateDataStore().removeClientCertificate() self.clientCertificateSettingView.isHidden = true } - let cancelAction = UIAlertAction(title: NSLocalizedString("ClientCertificateRemovalCancel", comment: ""), style: .cancel, handler: nil) + let cancelAction = UIAlertAction(title: localizadString(key: "ClientCertificateRemovalCancel", comment: ""), style: .cancel, handler: nil) alertController.addAction(okAction) alertController.addAction(cancelAction) present(alertController, animated: true, completion: nil) diff --git a/AgileWorks/AgileWorks/Main/Builder/MainTabBarViewBuilder.swift b/AgileWorks/AgileWorks/Main/Builder/MainTabBarViewBuilder.swift index cfa0b6fd6bc430b1308aaed62c1a35e4bc184cba..b8d6367d14d772d47cd6e89ed7f64430f0351c0f 100644 --- a/AgileWorks/AgileWorks/Main/Builder/MainTabBarViewBuilder.swift +++ b/AgileWorks/AgileWorks/Main/Builder/MainTabBarViewBuilder.swift @@ -60,35 +60,35 @@ extension MainTabBarViewBuilderImpl { let viewVC = view.viewControllers[view.viewControllers.count - 1] as! WebViewController switch type { case ViewType.home.rawValue: - view.tabBarItem.title = NSLocalizedString("HomeTitle", comment: "") + view.tabBarItem.title = localizadString(key: "HomeTitle", comment: "") //view.tabBarItem.image = "" //view.tabBarItem.selectedItem = "" viewVC.loadURL = createLoadUrl(urlPath: ViewURL.home.rawValue) - viewVC.naviTitle = NSLocalizedString("HomeTitle", comment: "") + viewVC.naviTitle = localizadString(key: "HomeTitle", comment: "") case ViewType.work.rawValue: - view.tabBarItem.title = NSLocalizedString("WorkTitle", comment: "") + view.tabBarItem.title = localizadString(key: "WorkTitle", comment: "") //view.tabBarItem.image = "" //view.tabBarItem.selectedItem = "" viewVC.loadURL = createLoadUrl(urlPath: ViewURL.work.rawValue) - viewVC.naviTitle = NSLocalizedString("WorkTitle", comment: "") + viewVC.naviTitle = localizadString(key: "WorkTitle", comment: "") case ViewType.documents.rawValue: - view.tabBarItem.title = NSLocalizedString("DocumentsTitle", comment: "") + view.tabBarItem.title = localizadString(key: "DocumentsTitle", comment: "") //view.tabBarItem.image = "" //view.tabBarItem.selectedItem = "" viewVC.loadURL = ViewURL.documents.rawValue - viewVC.naviTitle = NSLocalizedString("DocumentsTitle", comment: "") + viewVC.naviTitle = localizadString(key: "DocumentsTitle", comment: "") case ViewType.search.rawValue: - view.tabBarItem.title = NSLocalizedString("SearchTitle", comment: "") + view.tabBarItem.title = localizadString(key: "SearchTitle", comment: "") //view.tabBarItem.image = "" //view.tabBarItem.selectedItem = "" viewVC.loadURL = createLoadUrl(urlPath: ViewURL.search.rawValue) - viewVC.naviTitle = NSLocalizedString("SearchTitle", comment: "") + viewVC.naviTitle = localizadString(key: "SearchTitle", comment: "") default: - view.tabBarItem.title = NSLocalizedString("HomeTitle", comment: "") + view.tabBarItem.title = localizadString(key: "HomeTitle", comment: "") //view.tabBarItem.image = "" //view.tabBarItem.selectedItem = "" viewVC.loadURL = createLoadUrl(urlPath: ViewURL.home.rawValue) - viewVC.naviTitle = NSLocalizedString("HomeTitle", comment: "") + viewVC.naviTitle = localizadString(key: "HomeTitle", comment: "") } return view } diff --git a/AgileWorks/AgileWorks/Splash/View/SplashViewController.swift b/AgileWorks/AgileWorks/Splash/View/SplashViewController.swift index 0eac4216423aa9f6c16053e36d32bc20d0ce20a5..bbaa738be330ddf9309fcda110fe7b0b602503fd 100644 --- a/AgileWorks/AgileWorks/Splash/View/SplashViewController.swift +++ b/AgileWorks/AgileWorks/Splash/View/SplashViewController.swift @@ -29,10 +29,10 @@ class SplashViewController: UIViewController { super.viewDidLoad() logoImage.tintColor = .white - self.view.backgroundColor = UIColor(named: NSLocalizedString("MainColor", comment: "")) + self.view.backgroundColor = UIColor(named: localizadString(key: "MainColor", comment: "")) view.addSubview(activityIndicator) activityIndicator.frame = view.bounds - activityIndicator.backgroundColor = UIColor(named: NSLocalizedString("IndicatorBackgroud", comment: "")) + activityIndicator.backgroundColor = UIColor(named: localizadString(key: "IndicatorBackgroud", comment: "")) activityIndicator.translatesAutoresizingMaskIntoConstraints = false @@ -54,7 +54,7 @@ class SplashViewController: UIViewController { var error: NSError? if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) { - context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: NSLocalizedString("Auth", comment: "")) { sucess, error in + context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: localizadString(key: "Auth", comment: "")) { sucess, error in if sucess { self.freshToken() } else { diff --git a/AgileWorks/AgileWorks/Strings/Chinese-Simplified.strings b/AgileWorks/AgileWorks/Strings/Chinese-Simplified.strings new file mode 100644 index 0000000000000000000000000000000000000000..c0fb7e897f57871e9d0ad7894672bbbd9b53b1b6 --- /dev/null +++ b/AgileWorks/AgileWorks/Strings/Chinese-Simplified.strings @@ -0,0 +1,145 @@ +/* + Chinese-Simplified.strings + AgileWorks + + Created by Azuma Kasumi on 2022/02/17. + Copyright © 2022 ATLED CORP. All rights reserved. +*/ + +// Splash +"Auth" = "認証"; + +// Version +"AppVersion" = "App ver. %@"; + +// Login +"Language" = "中文(簡体)"; +"ServerURLPlaceholder" = "AgileWorksサーバ"; +"ContextPlaceholder" = "AgileWorks"; +"LoginButton" = "接続"; +"QRCodeReadLabel" = "QRコードリード"; +"QRCodeReadGuidance" = "ログインQRコードを読み込んでください"; +"ClientCertificateRemovalConfirmation" = "クライアント証明書の設定を削除します。よろしいですか?"; +"ClientCertificateRemovalOK" = "削除"; +"ClientCertificateRemovalCancel" = "キャンセル"; +"LoginErrorMessage" = "ログインに失敗しました。再度ログインしてください。"; +"CameraStartupErrorMessage" = "カメラの起動に失敗しました。"; + +// WebView +"HomeTitle" = "HOME"; +"WorkTitle" = "仕事"; +"DocumentsTitle" = "書類作成"; +"SearchTitle" = "検索"; +"CheckConnectButton" = "接続確認"; + +// SideMenu +"ProfileTitle" = "プロファイル"; +"LogoutTitle" = "ログアウト"; +"LicenseTitle" = "ライセンス"; +"OpenLicenseTitle" = "オープンソースライセンス"; + +// Approval +"ApprovalTitle" = "承認一覧"; +"ApprovalData" = "%1$@ (%2$@)"; + +// Approval Detail, Search Result +"Number" = "No. %d"; +"Form" = "%@"; +"Draft" = "下書き"; +"Approving" = "承認中"; +"Hold" = "保留"; +"Reject" = "却下"; +"RejectDraft" = "差し戻し"; +"RejectAuthorize" = "差し戻し"; +"SendBack" = "起票者へ差し戻し"; +"Remand" = "承認者へ差し戻し"; +"Approved" = "承認完了"; +"Request" = "申請: %1$@"; +"Update" = "更新: %1$@"; +"Approvers" = "承認者: [%@]"; +"Total" = " %@件 "; + +// Submission +"SubmissionTitle" = "提出一覧"; +"SubmissionData" = "%1$@ (%2$@)"; +"AutoSelectRoute" = "(自動選択ルート)"; + +// Submission Detail +"SubmissionName" = "%@"; +"SubmissionRoute" = "%@"; + +// Search +"FormName" = "フォーム名"; +"DocNumber" = "書類 No"; +"Subject" = "件名"; +"FalseDocButton" = "書類Noは数値のみ入力可能"; + +// Search Result +"SearchResultTitle" = "検索結果"; +"SearchNoData" = "条件に一致する結果は見つかりませんでした"; +"Loading" = "検索中"; + +"NoData" = "データがありません"; + +// Refresh Token Error +"RefreshTokenUpdateErrorTitle" = "アクセストークン更新エラー"; +"RefreshTokenUpdateError" = "AgileWorksサーバへアクセスするためのトークンの更新が行えませんでした。\n再ログインする必要があります。"; + +// Network Error Message +"DisconnectNetworkLabel" = "現在オフラインです。\nオフライン中の操作はお控えください。"; +"UnknownNetworkError" = "ネットワークエラーが発生しました"; +"NotConnectNetworkError" = "インターネットにアクセスするにはモバイルデータ通信をオンにするかWi-Fiを利用してください"; +"TimedOutNetworkError" = "インターネットに接続できません\nしばらく経ってから再度おためしください"; + +// Setting +"SettingTitle" = "設定"; +"Domain" = "所属ドメイン"; +"Name" = "氏名"; +"Character" = "カナ"; +"primaryGroupName" = "所属"; +"PrimaryGroupPartName" = "役職"; +"LogoutConfirm" = "ログアウトしますか?"; +"YES" = "はい"; +"NO" = "いいえ"; + +// Form +"OK" = "OK"; +"Cancel" = "キャンセル"; +"Close" = "閉じる"; +"Close Subwindow" = "閉じる (サブウィンドウ)"; + +// Form (ログアウト通知) +"LogoutAlertTitle" = "ログアウト通知"; +"LogoutAlertMessage"= "セッションタイムアウトによりログアウトしました。書類を開き直してください。"; + +// Color +"MainColor" = "DarkMauve"; +"IndicatorBackgroud" = "IndicatorBackgroud"; +"SectionColor" = "DarkGray"; +"SeparatorColor" = "PastelGray"; +"SelectCellBgColor" = "PastelGray"; +"DraftColor" = "Gray"; +"ApprovingColor" = "Orange"; +"HoldColor" = "DarkMauve"; +"RejectColor" = "Red"; +"RemandColor" = "Blue"; +"ApprovedColor" = "Green"; +"ClickBtnColor" = "Mouse"; + +// Image +"HeaderIcon" = "folder"; +"HeaderRightIcon" = "right"; +"checkIcon" = "CheckIcon"; +"checkNoIcon" = "CheckNoIcon"; + +// TodayExtension +"NotLogedin" = "アプリからログインしてください"; + +// WfAction +"WfApprove" = "承認"; +"WfSuspend" = "保留"; + +// ShareExtension +"CertificateImportSuccess" = "クライアント証明書をインポートしました。"; +"IncorrectPassphrase" = "パスフレーズが違います。"; +"CertificateImportError" = "証明書のインポート中にエラーが発生しました。"; diff --git a/AgileWorks/AgileWorks/Strings/Chinese-Traditional.strings b/AgileWorks/AgileWorks/Strings/Chinese-Traditional.strings new file mode 100644 index 0000000000000000000000000000000000000000..37a66eee2db3a44a5745d5dd3a09f96aa7829fe0 --- /dev/null +++ b/AgileWorks/AgileWorks/Strings/Chinese-Traditional.strings @@ -0,0 +1,145 @@ +/* + Chinese-Traditional.strings + AgileWorks + + Created by Azuma Kasumi on 2022/02/17. + Copyright © 2022 ATLED CORP. All rights reserved. +*/ + +// Splash +"Auth" = "認証"; + +// Version +"AppVersion" = "App ver. %@"; + +// Login +"Language" = "中文(繁体)"; +"ServerURLPlaceholder" = "AgileWorksサーバ"; +"ContextPlaceholder" = "AgileWorks"; +"LoginButton" = "接続"; +"QRCodeReadLabel" = "QRコードリード"; +"QRCodeReadGuidance" = "ログインQRコードを読み込んでください"; +"ClientCertificateRemovalConfirmation" = "クライアント証明書の設定を削除します。よろしいですか?"; +"ClientCertificateRemovalOK" = "削除"; +"ClientCertificateRemovalCancel" = "キャンセル"; +"LoginErrorMessage" = "ログインに失敗しました。再度ログインしてください。"; +"CameraStartupErrorMessage" = "カメラの起動に失敗しました。"; + +// WebView +"HomeTitle" = "HOME"; +"WorkTitle" = "仕事"; +"DocumentsTitle" = "書類作成"; +"SearchTitle" = "検索"; +"CheckConnectButton" = "接続確認"; + +// SideMenu +"ProfileTitle" = "プロファイル"; +"LogoutTitle" = "ログアウト"; +"LicenseTitle" = "ライセンス"; +"OpenLicenseTitle" = "オープンソースライセンス"; + +// Approval +"ApprovalTitle" = "承認一覧"; +"ApprovalData" = "%1$@ (%2$@)"; + +// Approval Detail, Search Result +"Number" = "No. %d"; +"Form" = "%@"; +"Draft" = "下書き"; +"Approving" = "承認中"; +"Hold" = "保留"; +"Reject" = "却下"; +"RejectDraft" = "差し戻し"; +"RejectAuthorize" = "差し戻し"; +"SendBack" = "起票者へ差し戻し"; +"Remand" = "承認者へ差し戻し"; +"Approved" = "承認完了"; +"Request" = "申請: %1$@"; +"Update" = "更新: %1$@"; +"Approvers" = "承認者: [%@]"; +"Total" = " %@件 "; + +// Submission +"SubmissionTitle" = "提出一覧"; +"SubmissionData" = "%1$@ (%2$@)"; +"AutoSelectRoute" = "(自動選択ルート)"; + +// Submission Detail +"SubmissionName" = "%@"; +"SubmissionRoute" = "%@"; + +// Search +"FormName" = "フォーム名"; +"DocNumber" = "書類 No"; +"Subject" = "件名"; +"FalseDocButton" = "書類Noは数値のみ入力可能"; + +// Search Result +"SearchResultTitle" = "検索結果"; +"SearchNoData" = "条件に一致する結果は見つかりませんでした"; +"Loading" = "検索中"; + +"NoData" = "データがありません"; + +// Refresh Token Error +"RefreshTokenUpdateErrorTitle" = "アクセストークン更新エラー"; +"RefreshTokenUpdateError" = "AgileWorksサーバへアクセスするためのトークンの更新が行えませんでした。\n再ログインする必要があります。"; + +// Network Error Message +"DisconnectNetworkLabel" = "現在オフラインです。\nオフライン中の操作はお控えください。"; +"UnknownNetworkError" = "ネットワークエラーが発生しました"; +"NotConnectNetworkError" = "インターネットにアクセスするにはモバイルデータ通信をオンにするかWi-Fiを利用してください"; +"TimedOutNetworkError" = "インターネットに接続できません\nしばらく経ってから再度おためしください"; + +// Setting +"SettingTitle" = "設定"; +"Domain" = "所属ドメイン"; +"Name" = "氏名"; +"Character" = "カナ"; +"primaryGroupName" = "所属"; +"PrimaryGroupPartName" = "役職"; +"LogoutConfirm" = "ログアウトしますか?"; +"YES" = "はい"; +"NO" = "いいえ"; + +// Form +"OK" = "OK"; +"Cancel" = "キャンセル"; +"Close" = "閉じる"; +"Close Subwindow" = "閉じる (サブウィンドウ)"; + +// Form (ログアウト通知) +"LogoutAlertTitle" = "ログアウト通知"; +"LogoutAlertMessage"= "セッションタイムアウトによりログアウトしました。書類を開き直してください。"; + +// Color +"MainColor" = "DarkMauve"; +"IndicatorBackgroud" = "IndicatorBackgroud"; +"SectionColor" = "DarkGray"; +"SeparatorColor" = "PastelGray"; +"SelectCellBgColor" = "PastelGray"; +"DraftColor" = "Gray"; +"ApprovingColor" = "Orange"; +"HoldColor" = "DarkMauve"; +"RejectColor" = "Red"; +"RemandColor" = "Blue"; +"ApprovedColor" = "Green"; +"ClickBtnColor" = "Mouse"; + +// Image +"HeaderIcon" = "folder"; +"HeaderRightIcon" = "right"; +"checkIcon" = "CheckIcon"; +"checkNoIcon" = "CheckNoIcon"; + +// TodayExtension +"NotLogedin" = "アプリからログインしてください"; + +// WfAction +"WfApprove" = "承認"; +"WfSuspend" = "保留"; + +// ShareExtension +"CertificateImportSuccess" = "クライアント証明書をインポートしました。"; +"IncorrectPassphrase" = "パスフレーズが違います。"; +"CertificateImportError" = "証明書のインポート中にエラーが発生しました。"; diff --git a/AgileWorks/AgileWorks/Strings/English.strings b/AgileWorks/AgileWorks/Strings/English.strings new file mode 100644 index 0000000000000000000000000000000000000000..8bcd43bf45f1466c28f7e8497b513a38d853172b --- /dev/null +++ b/AgileWorks/AgileWorks/Strings/English.strings @@ -0,0 +1,145 @@ +/* + English.strings + AgileWorks + + Created by Azuma Kasumi on 2022/02/17. + Copyright © 2022 ATLED CORP. All rights reserved. +*/ + +// Splash +"Auth" = "認証"; + +// Version +"AppVersion" = "App ver. %@"; + +// Login +"Language" = "English"; +"ServerURLPlaceholder" = "AgileWorksサーバ"; +"ContextPlaceholder" = "AgileWorks"; +"LoginButton" = "接続"; +"QRCodeReadLabel" = "QRコードリード"; +"QRCodeReadGuidance" = "ログインQRコードを読み込んでください"; +"ClientCertificateRemovalConfirmation" = "クライアント証明書の設定を削除します。よろしいですか?"; +"ClientCertificateRemovalOK" = "削除"; +"ClientCertificateRemovalCancel" = "キャンセル"; +"LoginErrorMessage" = "ログインに失敗しました。再度ログインしてください。"; +"CameraStartupErrorMessage" = "カメラの起動に失敗しました。"; + +// WebView +"HomeTitle" = "HOME"; +"WorkTitle" = "仕事"; +"DocumentsTitle" = "書類作成"; +"SearchTitle" = "検索"; +"CheckConnectButton" = "接続確認"; + +// SideMenu +"ProfileTitle" = "プロファイル"; +"LogoutTitle" = "ログアウト"; +"LicenseTitle" = "ライセンス"; +"OpenLicenseTitle" = "オープンソースライセンス"; + +// Approval +"ApprovalTitle" = "承認一覧"; +"ApprovalData" = "%1$@ (%2$@)"; + +// Approval Detail, Search Result +"Number" = "No. %d"; +"Form" = "%@"; +"Draft" = "下書き"; +"Approving" = "承認中"; +"Hold" = "保留"; +"Reject" = "却下"; +"RejectDraft" = "差し戻し"; +"RejectAuthorize" = "差し戻し"; +"SendBack" = "起票者へ差し戻し"; +"Remand" = "承認者へ差し戻し"; +"Approved" = "承認完了"; +"Request" = "申請: %1$@"; +"Update" = "更新: %1$@"; +"Approvers" = "承認者: [%@]"; +"Total" = " %@件 "; + +// Submission +"SubmissionTitle" = "提出一覧"; +"SubmissionData" = "%1$@ (%2$@)"; +"AutoSelectRoute" = "(自動選択ルート)"; + +// Submission Detail +"SubmissionName" = "%@"; +"SubmissionRoute" = "%@"; + +// Search +"FormName" = "フォーム名"; +"DocNumber" = "書類 No"; +"Subject" = "件名"; +"FalseDocButton" = "書類Noは数値のみ入力可能"; + +// Search Result +"SearchResultTitle" = "検索結果"; +"SearchNoData" = "条件に一致する結果は見つかりませんでした"; +"Loading" = "検索中"; + +"NoData" = "データがありません"; + +// Refresh Token Error +"RefreshTokenUpdateErrorTitle" = "アクセストークン更新エラー"; +"RefreshTokenUpdateError" = "AgileWorksサーバへアクセスするためのトークンの更新が行えませんでした。\n再ログインする必要があります。"; + +// Network Error Message +"DisconnectNetworkLabel" = "現在オフラインです。\nオフライン中の操作はお控えください。"; +"UnknownNetworkError" = "ネットワークエラーが発生しました"; +"NotConnectNetworkError" = "インターネットにアクセスするにはモバイルデータ通信をオンにするかWi-Fiを利用してください"; +"TimedOutNetworkError" = "インターネットに接続できません\nしばらく経ってから再度おためしください"; + +// Setting +"SettingTitle" = "設定"; +"Domain" = "所属ドメイン"; +"Name" = "氏名"; +"Character" = "カナ"; +"primaryGroupName" = "所属"; +"PrimaryGroupPartName" = "役職"; +"LogoutConfirm" = "ログアウトしますか?"; +"YES" = "はい"; +"NO" = "いいえ"; + +// Form +"OK" = "OK"; +"Cancel" = "キャンセル"; +"Close" = "閉じる"; +"Close Subwindow" = "閉じる (サブウィンドウ)"; + +// Form (ログアウト通知) +"LogoutAlertTitle" = "ログアウト通知"; +"LogoutAlertMessage"= "セッションタイムアウトによりログアウトしました。書類を開き直してください。"; + +// Color +"MainColor" = "DarkMauve"; +"IndicatorBackgroud" = "IndicatorBackgroud"; +"SectionColor" = "DarkGray"; +"SeparatorColor" = "PastelGray"; +"SelectCellBgColor" = "PastelGray"; +"DraftColor" = "Gray"; +"ApprovingColor" = "Orange"; +"HoldColor" = "DarkMauve"; +"RejectColor" = "Red"; +"RemandColor" = "Blue"; +"ApprovedColor" = "Green"; +"ClickBtnColor" = "Mouse"; + +// Image +"HeaderIcon" = "folder"; +"HeaderRightIcon" = "right"; +"checkIcon" = "CheckIcon"; +"checkNoIcon" = "CheckNoIcon"; + +// TodayExtension +"NotLogedin" = "アプリからログインしてください"; + +// WfAction +"WfApprove" = "承認"; +"WfSuspend" = "保留"; + +// ShareExtension +"CertificateImportSuccess" = "クライアント証明書をインポートしました。"; +"IncorrectPassphrase" = "パスフレーズが違います。"; +"CertificateImportError" = "証明書のインポート中にエラーが発生しました。"; diff --git a/AgileWorks/AgileWorks/Strings/Japanese.strings b/AgileWorks/AgileWorks/Strings/Japanese.strings new file mode 100644 index 0000000000000000000000000000000000000000..0f32d653846bb657413e235e9c2c2e07e43a53b5 --- /dev/null +++ b/AgileWorks/AgileWorks/Strings/Japanese.strings @@ -0,0 +1,146 @@ +/* + Japanese.strings + AgileWorks + + Created by Azuma Kasumi on 2022/02/17. + Copyright © 2022 ATLED CORP. All rights reserved. +*/ + +// Splash +"Auth" = "認証"; + +// Version +"AppVersion" = "App ver. %@"; + +// Login +"Language" = "日本語"; +"ServerURLPlaceholder" = "AgileWorksサーバ"; +"ContextPlaceholder" = "AgileWorks"; +"LoginButton" = "接続"; +"QRCodeReadLabel" = "QRコードリード"; +"QRCodeReadGuidance" = "ログインQRコードを読み込んでください"; +"ClientCertificateRemovalConfirmation" = "クライアント証明書の設定を削除します。よろしいですか?"; +"ClientCertificateRemovalOK" = "削除"; +"ClientCertificateRemovalCancel" = "キャンセル"; +"LoginErrorMessage" = "ログインに失敗しました。再度ログインしてください。"; +"CameraStartupErrorMessage" = "カメラの起動に失敗しました。"; + +// WebView +"HomeTitle" = "HOME"; +"WorkTitle" = "仕事"; +"DocumentsTitle" = "書類作成"; +"SearchTitle" = "検索"; +"CheckConnectButton" = "接続確認"; + +// SideMenu +"ProfileTitle" = "プロファイル"; +"LogoutTitle" = "ログアウト"; +"LicenseTitle" = "ライセンス"; +"OpenLicenseTitle" = "オープンソースライセンス"; + +// Approval +"ApprovalTitle" = "承認一覧"; +"ApprovalData" = "%1$@ (%2$@)"; + +// Approval Detail, Search Result +"Number" = "No. %d"; +"Form" = "%@"; +"Draft" = "下書き"; +"Approving" = "承認中"; +"Hold" = "保留"; +"Reject" = "却下"; +"RejectDraft" = "差し戻し"; +"RejectAuthorize" = "差し戻し"; +"SendBack" = "起票者へ差し戻し"; +"Remand" = "承認者へ差し戻し"; +"Approved" = "承認完了"; +"Request" = "申請: %1$@"; +"Update" = "更新: %1$@"; +"Approvers" = "承認者: [%@]"; +"Total" = " %@件 "; + +// Submission +"SubmissionTitle" = "提出一覧"; +"SubmissionData" = "%1$@ (%2$@)"; +"AutoSelectRoute" = "(自動選択ルート)"; + +// Submission Detail +"SubmissionName" = "%@"; +"SubmissionRoute" = "%@"; + +// Search +"FormName" = "フォーム名"; +"DocNumber" = "書類 No"; +"Subject" = "件名"; +"FalseDocButton" = "書類Noは数値のみ入力可能"; + +// Search Result +"SearchResultTitle" = "検索結果"; +"SearchNoData" = "条件に一致する結果は見つかりませんでした"; +"Loading" = "検索中"; + +"NoData" = "データがありません"; + +// Refresh Token Error +"RefreshTokenUpdateErrorTitle" = "アクセストークン更新エラー"; +"RefreshTokenUpdateError" = "AgileWorksサーバへアクセスするためのトークンの更新が行えませんでした。\n再ログインする必要があります。"; + +// Network Error Message +"DisconnectNetworkLabel" = "現在オフラインです。\nオフライン中の操作はお控えください。"; +"UnknownNetworkError" = "ネットワークエラーが発生しました"; +"NotConnectNetworkError" = "インターネットにアクセスするにはモバイルデータ通信をオンにするかWi-Fiを利用してください"; +"TimedOutNetworkError" = "インターネットに接続できません\nしばらく経ってから再度おためしください"; + +// Setting +"SettingTitle" = "設定"; +"Domain" = "所属ドメイン"; +"Name" = "氏名"; +"Character" = "カナ"; +"primaryGroupName" = "所属"; +"PrimaryGroupPartName" = "役職"; +"LogoutConfirm" = "ログアウトしますか?"; +"YES" = "はい"; +"NO" = "いいえ"; + +// Form +"OK" = "OK"; +"Cancel" = "キャンセル"; +"Close" = "閉じる"; +"Close Subwindow" = "閉じる (サブウィンドウ)"; + +// Form (ログアウト通知) +"LogoutAlertTitle" = "ログアウト通知"; +"LogoutAlertMessage"= "セッションタイムアウトによりログアウトしました。書類を開き直してください。"; + +// Color +"MainColor" = "DarkMauve"; +"IndicatorBackgroud" = "IndicatorBackgroud"; +"SectionColor" = "DarkGray"; +"SeparatorColor" = "PastelGray"; +"SelectCellBgColor" = "PastelGray"; +"DraftColor" = "Gray"; +"ApprovingColor" = "Orange"; +"HoldColor" = "DarkMauve"; +"RejectColor" = "Red"; +"RemandColor" = "Blue"; +"ApprovedColor" = "Green"; +"ClickBtnColor" = "Mouse"; + +// Image +"HeaderIcon" = "folder"; +"HeaderRightIcon" = "right"; +"checkIcon" = "CheckIcon"; +"checkNoIcon" = "CheckNoIcon"; + +// TodayExtension +"NotLogedin" = "アプリからログインしてください"; + +// WfAction +"WfApprove" = "承認"; +"WfSuspend" = "保留"; + +// ShareExtension +"CertificateImportSuccess" = "クライアント証明書をインポートしました。"; +"IncorrectPassphrase" = "パスフレーズが違います。"; +"CertificateImportError" = "証明書のインポート中にエラーが発生しました。"; + diff --git a/AgileWorks/AgileWorks/en.lproj/Localizable.strings b/AgileWorks/AgileWorks/Strings/en.lproj/Localizable.strings similarity index 98% rename from AgileWorks/AgileWorks/en.lproj/Localizable.strings rename to AgileWorks/AgileWorks/Strings/en.lproj/Localizable.strings index 741005deb5100194a810ec26eb36885d2e38cff6..1335f6fb40026b75d7b70d89466266f7da26a8e3 100644 --- a/AgileWorks/AgileWorks/en.lproj/Localizable.strings +++ b/AgileWorks/AgileWorks/Strings/en.lproj/Localizable.strings @@ -13,8 +13,10 @@ "AppVersion" = "App ver. %@"; // Login +"Language" = "auto"; "ServerURLPlaceholder" = "AgileWorksサーバ"; "ContextPlaceholder" = "AgileWorks"; +"LoginButton" = "接続"; "QRCodeReadLabel" = "QRコードリード"; "QRCodeReadGuidance" = "ログインQRコードを読み込んでください"; "ClientCertificateRemovalConfirmation" = "クライアント証明書の設定を削除します。よろしいですか?"; diff --git a/AgileWorks/AgileWorks/ja.lproj/Localizable.strings b/AgileWorks/AgileWorks/Strings/ja.lproj/Localizable.strings similarity index 97% rename from AgileWorks/AgileWorks/ja.lproj/Localizable.strings rename to AgileWorks/AgileWorks/Strings/ja.lproj/Localizable.strings index 105c25b23fea0ae864f10e9a5e843e2a9edec3a2..c2a90d92c7c011bee5d31fc19fae7628a97fa4e0 100644 --- a/AgileWorks/AgileWorks/ja.lproj/Localizable.strings +++ b/AgileWorks/AgileWorks/Strings/ja.lproj/Localizable.strings @@ -13,8 +13,10 @@ "AppVersion" = "App ver. %@"; // Login -"ServerURLPlaceholder" = "AgileWorksサーバ"; +"Language" = "自動"; +"ServerURLPlaceholder" = "AgileWorksサーバ"; "ContextPlaceholder" = "AgileWorks"; +"LoginButton" = "接続"; "QRCodeReadLabel" = "QRコードリード"; "QRCodeReadGuidance" = "ログインQRコードを読み込んでください"; "ClientCertificateRemovalConfirmation" = "クライアント証明書の設定を削除します。よろしいですか?"; diff --git a/AgileWorks/AgileWorks/Strings/zh-Hans.lproj/Localizable.strings b/AgileWorks/AgileWorks/Strings/zh-Hans.lproj/Localizable.strings new file mode 100644 index 0000000000000000000000000000000000000000..e675cdab747c5fce3aa2769652709c0f464ae7b4 --- /dev/null +++ b/AgileWorks/AgileWorks/Strings/zh-Hans.lproj/Localizable.strings @@ -0,0 +1,146 @@ +/* + Localizable.strings + AgileWorks + + Created by sbc on 2020/06/22. + Copyright © 2020 nttdata-sbc. All rights reserved. +*/ + +// Splash +"Auth" = "認証"; + +// Version +"AppVersion" = "App ver. %@"; + +// Login +"Language" = "自动的"; +"ServerURLPlaceholder" = "AgileWorksサーバ"; +"ContextPlaceholder" = "AgileWorks"; +"LoginButton" = "接続"; +"QRCodeReadLabel" = "QRコードリード"; +"QRCodeReadGuidance" = "ログインQRコードを読み込んでください"; +"ClientCertificateRemovalConfirmation" = "クライアント証明書の設定を削除します。よろしいですか?"; +"ClientCertificateRemovalOK" = "削除"; +"ClientCertificateRemovalCancel" = "キャンセル"; +"LoginErrorMessage" = "ログインに失敗しました。再度ログインしてください。"; +"CameraStartupErrorMessage" = "カメラの起動に失敗しました。"; + +// WebView +"HomeTitle" = "HOME"; +"WorkTitle" = "仕事"; +"DocumentsTitle" = "書類作成"; +"SearchTitle" = "検索"; +"CheckConnectButton" = "接続確認"; + +// SideMenu +"ProfileTitle" = "プロファイル"; +"LogoutTitle" = "ログアウト"; +"LicenseTitle" = "ライセンス"; +"OpenLicenseTitle" = "オープンソースライセンス"; + +// Approval +"ApprovalTitle" = "承認一覧"; +"ApprovalData" = "%1$@ (%2$@)"; + +// Approval Detail, Search Result +"Number" = "No. %d"; +"Form" = "%@"; +"Draft" = "下書き"; +"Approving" = "承認中"; +"Hold" = "保留"; +"Reject" = "却下"; +"RejectDraft" = "差し戻し"; +"RejectAuthorize" = "差し戻し"; +"SendBack" = "起票者へ差し戻し"; +"Remand" = "承認者へ差し戻し"; +"Approved" = "承認完了"; +"Request" = "申請: %1$@"; +"Update" = "更新: %1$@"; +"Approvers" = "承認者: [%@]"; +"Total" = " %@件 "; + +// Submission +"SubmissionTitle" = "提出一覧"; +"SubmissionData" = "%1$@ (%2$@)"; +"AutoSelectRoute" = "(自動選択ルート)"; + +// Submission Detail +"SubmissionName" = "%@"; +"SubmissionRoute" = "%@"; + +// Search +"FormName" = "フォーム名"; +"DocNumber" = "書類 No"; +"Subject" = "件名"; +"FalseDocButton" = "書類Noは数値のみ入力可能"; + +// Search Result +"SearchResultTitle" = "検索結果"; +"SearchNoData" = "条件に一致する結果は見つかりませんでした"; +"Loading" = "検索中"; + +"NoData" = "データがありません"; + +// Refresh Token Error +"RefreshTokenUpdateErrorTitle" = "アクセストークン更新エラー"; +"RefreshTokenUpdateError" = "AgileWorksサーバへアクセスするためのトークンの更新が行えませんでした。\n再ログインする必要があります。"; + +// Network Error Message +"DisconnectNetworkLabel" = "現在オフラインです。\nオフライン中の操作はお控えください。"; +"UnknownNetworkError" = "ネットワークエラーが発生しました"; +"NotConnectNetworkError" = "インターネットにアクセスするにはモバイルデータ通信をオンにするかWi-Fiを利用してください"; +"TimedOutNetworkError" = "インターネットに接続できません\nしばらく経ってから再度おためしください"; + +// Setting +"SettingTitle" = "設定"; +"Domain" = "所属ドメイン"; +"Name" = "氏名"; +"Character" = "カナ"; +"primaryGroupName" = "所属"; +"PrimaryGroupPartName" = "役職"; +"LogoutConfirm" = "ログアウトしますか?"; +"YES" = "はい"; +"NO" = "いいえ"; + +// Form +"OK" = "OK"; +"Cancel" = "キャンセル"; +"Close" = "閉じる"; +"Close Subwindow" = "閉じる (サブウィンドウ)"; + +// Form (ログアウト通知) +"LogoutAlertTitle" = "ログアウト通知"; +"LogoutAlertMessage"= "セッションタイムアウトによりログアウトしました。書類を開き直してください。"; + +// Color +"MainColor" = "DarkMauve"; +"IndicatorBackgroud" = "IndicatorBackgroud"; +"SectionColor" = "DarkGray"; +"SeparatorColor" = "PastelGray"; +"SelectCellBgColor" = "PastelGray"; +"DraftColor" = "Gray"; +"ApprovingColor" = "Orange"; +"HoldColor" = "DarkMauve"; +"RejectColor" = "Red"; +"RemandColor" = "Blue"; +"ApprovedColor" = "Green"; +"ClickBtnColor" = "Mouse"; + +// Image +"HeaderIcon" = "folder"; +"HeaderRightIcon" = "right"; +"checkIcon" = "CheckIcon"; +"checkNoIcon" = "CheckNoIcon"; + +// TodayExtension +"NotLogedin" = "アプリからログインしてください"; + +// WfAction +"WfApprove" = "承認"; +"WfSuspend" = "保留"; + +// ShareExtension +"CertificateImportSuccess" = "クライアント証明書をインポートしました。"; +"IncorrectPassphrase" = "パスフレーズが違います。"; +"CertificateImportError" = "証明書のインポート中にエラーが発生しました。"; + diff --git a/AgileWorks/AgileWorks/Strings/zh-Hant.lproj/Localizable.strings b/AgileWorks/AgileWorks/Strings/zh-Hant.lproj/Localizable.strings new file mode 100644 index 0000000000000000000000000000000000000000..c46f769efde102b8aa4d17221babe358418596c0 --- /dev/null +++ b/AgileWorks/AgileWorks/Strings/zh-Hant.lproj/Localizable.strings @@ -0,0 +1,145 @@ +/* + Localizable.strings + AgileWorks + + Created by sbc on 2020/06/22. + Copyright © 2020 nttdata-sbc. All rights reserved. +*/ + +// Splash +"Auth" = "認証"; + +// Version +"AppVersion" = "App ver. %@"; + +// Login +"Language" = "自動的"; +"ServerURLPlaceholder" = "AgileWorksサーバ"; +"ContextPlaceholder" = "AgileWorks"; +"LoginButton" = "接続"; +"QRCodeReadLabel" = "QRコードリード"; +"QRCodeReadGuidance" = "ログインQRコードを読み込んでください"; +"ClientCertificateRemovalConfirmation" = "クライアント証明書の設定を削除します。よろしいですか?"; +"ClientCertificateRemovalOK" = "削除"; +"ClientCertificateRemovalCancel" = "キャンセル"; +"LoginErrorMessage" = "ログインに失敗しました。再度ログインしてください。"; +"CameraStartupErrorMessage" = "カメラの起動に失敗しました。"; + +// WebView +"HomeTitle" = "HOME"; +"WorkTitle" = "仕事"; +"DocumentsTitle" = "書類作成"; +"SearchTitle" = "検索"; +"CheckConnectButton" = "接続確認"; + +// SideMenu +"ProfileTitle" = "プロファイル"; +"LogoutTitle" = "ログアウト"; +"LicenseTitle" = "ライセンス"; +"OpenLicenseTitle" = "オープンソースライセンス"; + +// Approval +"ApprovalTitle" = "承認一覧"; +"ApprovalData" = "%1$@ (%2$@)"; + +// Approval Detail, Search Result +"Number" = "No. %d"; +"Form" = "%@"; +"Draft" = "下書き"; +"Approving" = "承認中"; +"Hold" = "保留"; +"Reject" = "却下"; +"RejectDraft" = "差し戻し"; +"RejectAuthorize" = "差し戻し"; +"SendBack" = "起票者へ差し戻し"; +"Remand" = "承認者へ差し戻し"; +"Approved" = "承認完了"; +"Request" = "申請: %1$@"; +"Update" = "更新: %1$@"; +"Approvers" = "承認者: [%@]"; +"Total" = " %@件 "; + +// Submission +"SubmissionTitle" = "提出一覧"; +"SubmissionData" = "%1$@ (%2$@)"; +"AutoSelectRoute" = "(自動選択ルート)"; + +// Submission Detail +"SubmissionName" = "%@"; +"SubmissionRoute" = "%@"; + +// Search +"FormName" = "フォーム名"; +"DocNumber" = "書類 No"; +"Subject" = "件名"; +"FalseDocButton" = "書類Noは数値のみ入力可能"; + +// Search Result +"SearchResultTitle" = "検索結果"; +"SearchNoData" = "条件に一致する結果は見つかりませんでした"; +"Loading" = "検索中"; + +"NoData" = "データがありません"; + +// Refresh Token Error +"RefreshTokenUpdateErrorTitle" = "アクセストークン更新エラー"; +"RefreshTokenUpdateError" = "AgileWorksサーバへアクセスするためのトークンの更新が行えませんでした。\n再ログインする必要があります。"; + +// Network Error Message +"DisconnectNetworkLabel" = "現在オフラインです。\nオフライン中の操作はお控えください。"; +"UnknownNetworkError" = "ネットワークエラーが発生しました"; +"NotConnectNetworkError" = "インターネットにアクセスするにはモバイルデータ通信をオンにするかWi-Fiを利用してください"; +"TimedOutNetworkError" = "インターネットに接続できません\nしばらく経ってから再度おためしください"; + +// Setting +"SettingTitle" = "設定"; +"Domain" = "所属ドメイン"; +"Name" = "氏名"; +"Character" = "カナ"; +"primaryGroupName" = "所属"; +"PrimaryGroupPartName" = "役職"; +"LogoutConfirm" = "ログアウトしますか?"; +"YES" = "はい"; +"NO" = "いいえ"; + +// Form +"OK" = "OK"; +"Cancel" = "キャンセル"; +"Close" = "閉じる"; +"Close Subwindow" = "閉じる (サブウィンドウ)"; + +// Form (ログアウト通知) +"LogoutAlertTitle" = "ログアウト通知"; +"LogoutAlertMessage"= "セッションタイムアウトによりログアウトしました。書類を開き直してください。"; + +// Color +"MainColor" = "DarkMauve"; +"IndicatorBackgroud" = "IndicatorBackgroud"; +"SectionColor" = "DarkGray"; +"SeparatorColor" = "PastelGray"; +"SelectCellBgColor" = "PastelGray"; +"DraftColor" = "Gray"; +"ApprovingColor" = "Orange"; +"HoldColor" = "DarkMauve"; +"RejectColor" = "Red"; +"RemandColor" = "Blue"; +"ApprovedColor" = "Green"; +"ClickBtnColor" = "Mouse"; + +// Image +"HeaderIcon" = "folder"; +"HeaderRightIcon" = "right"; +"checkIcon" = "CheckIcon"; +"checkNoIcon" = "CheckNoIcon"; + +// TodayExtension +"NotLogedin" = "アプリからログインしてください"; + +// WfAction +"WfApprove" = "承認"; +"WfSuspend" = "保留"; + +// ShareExtension +"CertificateImportSuccess" = "クライアント証明書をインポートしました。"; +"IncorrectPassphrase" = "パスフレーズが違います。"; +"CertificateImportError" = "証明書のインポート中にエラーが発生しました。"; diff --git a/AgileWorks/AgileWorks/WebView/View/MenuTableViewController.swift b/AgileWorks/AgileWorks/WebView/View/MenuTableViewController.swift index 84a14e1c1d05dede7f7488255e8ecc0bc08293fa..e5715493ac956180bfef32cd30962cbe9c59e278 100644 --- a/AgileWorks/AgileWorks/WebView/View/MenuTableViewController.swift +++ b/AgileWorks/AgileWorks/WebView/View/MenuTableViewController.swift @@ -20,7 +20,7 @@ class MenuTableViewController: UITableViewController { override func viewDidLoad() { super.viewDidLoad() - self.tableView.separatorColor = UIColor(named: NSLocalizedString("SeparatorColor", comment: "")) + self.tableView.separatorColor = UIColor(named: localizadString(key: "SeparatorColor", comment: "")) self.setup() } @@ -46,10 +46,10 @@ class MenuTableViewController: UITableViewController { // 各種セットアップ private func setup() { // 各ラベル設定 - self.profileLabel.text = NSLocalizedString("ProfileTitle", comment: "") - self.logoutLabel.text = NSLocalizedString("LogoutTitle", comment: "") - self.licenseLabel.text = NSLocalizedString("LicenseTitle", comment: "") - self.openLicenseLable.text = NSLocalizedString("OpenLicenseTitle", comment: "") + self.profileLabel.text = localizadString(key: "ProfileTitle", comment: "") + self.logoutLabel.text = localizadString(key: "LogoutTitle", comment: "") + self.licenseLabel.text = localizadString(key: "LicenseTitle", comment: "") + self.openLicenseLable.text = localizadString(key: "OpenLicenseTitle", comment: "") } // プロファイルセルタップ処理 private func pushToProfile() { diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewController.storyboard b/AgileWorks/AgileWorks/WebView/View/WebViewController.storyboard index b7eb59ce4ccf31eac26e86cca7098e17e77954e1..176bcb7b7ff035fcf15e73d27c46434743d8899a 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewController.storyboard +++ b/AgileWorks/AgileWorks/WebView/View/WebViewController.storyboard @@ -1,9 +1,9 @@ - + - + @@ -183,7 +183,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -229,7 +229,7 @@ - + @@ -252,7 +252,7 @@ - + diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift index 3c6b2b15dc645aa6e5168adb12ea8c002f068d89..68a4828c0b5855d3489cd900efb8208de18aaba4 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift +++ b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift @@ -32,9 +32,9 @@ class WebViewController: UIViewController { // Title を設定する URL を定義 let urlToTitle: [String: String] = [ - "Mobile#home": NSLocalizedString("HomeTitle", comment: ""), - "Mobile#work": NSLocalizedString("WorkTitle", comment: ""), - "Mobile#agileWorksSearch": NSLocalizedString("SearchTitle", comment: "") + "Mobile#home": localizadString(key: "HomeTitle", comment: ""), + "Mobile#work": localizadString(key: "WorkTitle", comment: ""), + "Mobile#agileWorksSearch": localizadString(key: "SearchTitle", comment: "") ] // reload 対象URL let reloadUrl: [String] = ["Mobile#docDetail"] @@ -177,16 +177,16 @@ class WebViewController: UIViewController { // リフレッシュトークン更新エラーの場合 if refreshError { DispatchQueue.main.async { - let title = NSLocalizedString("RefreshTokenUpdateErrorTitle", comment: "") - let message = NSLocalizedString("RefreshTokenUpdateError", comment: "") - let defaultAction = AppDelegate.shared.rootViewController.logoutDefaultAction(title: NSLocalizedString("OK", comment: "")) + let title = localizadString(key: "RefreshTokenUpdateErrorTitle", comment: "") + let message = localizadString(key: "RefreshTokenUpdateError", comment: "") + let defaultAction = AppDelegate.shared.rootViewController.logoutDefaultAction(title: localizadString(key: "OK", comment: "")) AppDelegate.shared.rootViewController.showAlertScreen(view: self, title: title, message: message, defaultAction: defaultAction, cancelAction: nil) } // その他エラーの場合 } else { DispatchQueue.main.async { - let message = NSLocalizedString("UnknownNetworkError", comment: "") - let defaultAction = UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default) { _ in } + let message = localizadString(key: "UnknownNetworkError", comment: "") + let defaultAction = UIAlertAction(title: localizadString(key: "OK", comment: ""), style: .default) { _ in } AppDelegate.shared.rootViewController.showAlertScreen(view: self, title: "", message: message, defaultAction: defaultAction, cancelAction: nil) } } @@ -196,10 +196,10 @@ class WebViewController: UIViewController { // オフラインViewセットアップ func setDisconnectView() { - disconnectLabel.text = NSLocalizedString("DisconnectNetworkLabel", comment: "") + disconnectLabel.text = localizadString(key: "DisconnectNetworkLabel", comment: "") disconnectLabel.textAlignment = .center disconnectLabel.textColor = UIColor.red - checkConnectButton.setTitle(NSLocalizedString("CheckConnectButton", comment: ""), for: .normal) + checkConnectButton.setTitle(localizadString(key: "CheckConnectButton", comment: ""), for: .normal) } // ネットワークモニタリング開始 @@ -302,7 +302,7 @@ class WebViewController: UIViewController { extension WebViewController: WKUIDelegate { func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) { let alertController = UIAlertController(title: "", message: message, preferredStyle: .alert) - let okAction = UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default) { _ in + let okAction = UIAlertAction(title: localizadString(key: "OK", comment: ""), style: .default) { _ in completionHandler() } alertController.addAction(okAction) @@ -311,10 +311,10 @@ extension WebViewController: WKUIDelegate { func webView(_ webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) { let alertController = UIAlertController(title: "", message: message, preferredStyle: .alert) - let okAction = UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default) { _ in + let okAction = UIAlertAction(title: localizadString(key: "OK", comment: ""), style: .default) { _ in completionHandler(true) } - let cancelAction = UIAlertAction(title: NSLocalizedString("Cancel", comment: ""), style: .cancel) { _ in + let cancelAction = UIAlertAction(title: localizadString(key: "Cancel", comment: ""), style: .cancel) { _ in completionHandler(false) } alertController.addAction(okAction) @@ -346,7 +346,7 @@ extension WebViewController: WKUIDelegate { extension WebViewController: SubWebViewStackEventDelegate { func onClose(webView: WKWebView, stack: SubWebViewStack) { if stack.isEmpty { - //closeButton.title = NSLocalizedString("Close", comment: "") + //closeButton.title = localizadStrings(key: "Close", comment: "") } } } diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewScriptMessageHandler.swift b/AgileWorks/AgileWorks/WebView/View/WebViewScriptMessageHandler.swift index 35e9cb07e2d5bd83116c901ca0b9c300c4e05b59..1b2c5e8a294450edd4bd8d2ef03b0acff17a5bdc 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewScriptMessageHandler.swift +++ b/AgileWorks/AgileWorks/WebView/View/WebViewScriptMessageHandler.swift @@ -18,8 +18,8 @@ class WebViewScriptMessageHandler: NSObject { // 名前は、sample に変えて "sample": { controller, _, _ in DispatchQueue.main.async { - let alertController = UIAlertController(title: NSLocalizedString("LogoutAlertTitle", comment: ""), message: NSLocalizedString("LogoutAlertMessage", comment: ""), preferredStyle: .alert) - let okAction = UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default) { _ in + let alertController = UIAlertController(title: localizadString(key: "LogoutAlertTitle", comment: ""), message: localizadString(key: "LogoutAlertMessage", comment: ""), preferredStyle: .alert) + let okAction = UIAlertAction(title: localizadString(key: "OK", comment: ""), style: .default) { _ in controller.dismiss(animated: true, completion: nil) } alertController.addAction(okAction) diff --git a/AgileWorks/Common/DataStore/Configuration.swift b/AgileWorks/Common/DataStore/Configuration.swift index b5876e16ebc4ffa09c8fcd3cbbc9ad2a32fec3d5..12a2b68c0f53f9795ad82494f1735077f8af719a 100644 --- a/AgileWorks/Common/DataStore/Configuration.swift +++ b/AgileWorks/Common/DataStore/Configuration.swift @@ -17,6 +17,9 @@ struct Configuration { return plist["AppConfig"] as! [AnyHashable: Any] }() + var awLanguage: String { + return KeychainDataStore().readLanguage() ?? "" + } var awServer: String { return KeychainDataStore().readServerURL() ?? "" } diff --git a/AgileWorks/Common/DataStore/KeychainDataStore.swift b/AgileWorks/Common/DataStore/KeychainDataStore.swift index 504d201d0e985b5396066c0195696172e5513828..bea972d64adddc7c196fb7f27ca67520d97e4938 100644 --- a/AgileWorks/Common/DataStore/KeychainDataStore.swift +++ b/AgileWorks/Common/DataStore/KeychainDataStore.swift @@ -15,6 +15,7 @@ final class KeychainDataStore: DataStoreProtocol { private let groupId = Bundle.main.object(forInfoDictionaryKey: "AppIdentifierPrefix") as! String + Configuration.shared.awShareBundleIdentifier private let kAccessToken: String = "AccessToken" private let kOAuthState: String = "OAuthState" + private let kLanguage: String = "Localizable" private let kServerURL: String = "ServerURL" private let kContextPath: String = "ContextPath" private let kDeviceID: String = "DeviceID" @@ -60,6 +61,21 @@ final class KeychainDataStore: DataStoreProtocol { removeKeychainValue(key: kOAuthState) } + // 言語設定の書き込み + func writeLanguage(language: String) { + setKeychainValue(key: kLanguage, value: language) + } + + // 言語設定の読み込み + func readLanguage() -> String? { + return getKeychainValue(key: kLanguage) + } + + // 言語設定の削除 + func removeLanguage() { + removeKeychainValue(key: kLanguage) + } + // サーバーURLの書き込み func writeServerURL(serverURL: String) { setKeychainValue(key: kServerURL, value: serverURL) diff --git a/AgileWorks/Common/Utility/NumberUtility.swift b/AgileWorks/Common/Utility/NumberUtility.swift index 868dc7c3ffaf66206e91f4a78a2f995660e247da..2e5d2d80434eecd466c261623d700a1c869cd280 100644 --- a/AgileWorks/Common/Utility/NumberUtility.swift +++ b/AgileWorks/Common/Utility/NumberUtility.swift @@ -15,3 +15,5 @@ extension Int { return formatter.string(from: NSNumber(value: self)) ?? String(self) } } + + diff --git a/AgileWorks/Common/Utility/StringsUtility.swift b/AgileWorks/Common/Utility/StringsUtility.swift new file mode 100644 index 0000000000000000000000000000000000000000..f9c04d01482cc477e63734f3817ad754c12571ad --- /dev/null +++ b/AgileWorks/Common/Utility/StringsUtility.swift @@ -0,0 +1,52 @@ +// +// StringsUtility.swift +// AgileWorks +// +// Created by Azuma Kasumi on 2022/02/17. +// Copyright © 2022 ATLED CORP. All rights reserved. +// + +import Foundation + +//多言語対応 + +//言語の種類 +let languageArray = [getLocalizableStrings(key: "Language", comment: ""), "日本語", "English", "中文(簡体)", "中文(繁体)"] + +//言語を設定する +func setStringsName(stringsName: String) { + KeychainDataStore().writeLanguage(language: stringsName) +} + +//設定中の言語ファイル(stringsファイル)名を取得する +func getStringsFileName() -> String { + var stringsFileName = Configuration.shared.awLanguage + //設定されていない場合は環境に依存した言語で返す + if stringsFileName.isEmpty { + stringsFileName = "Localizable" + } + return stringsFileName +} + +//OSで設定している言語を取得する +private func getLocalizableStrings(key: String, comment: String) -> String { + return NSLocalizedString(key, tableName: "Localizable", comment: comment) +} + +//指定した言語を取得する +func localizadString(key: String, comment: String) -> String { + return NSLocalizedString(key, tableName: getStringsFileName(), comment: comment) +} + +//選択中の言語の要素番号を返す +func getLanguageIndex(dropDownItem: String) -> Int { + var index = 0 + for language in languageArray { + if language == dropDownItem { + return index + }else { + index += 1 + } + } + return 0 +} diff --git a/AgileWorks/Common/WfAction.swift b/AgileWorks/Common/WfAction.swift index 38331719c5befaed99b0f6cddc22c0784942725d..4068daa463eb1fc24ef7c96f2b624cc90c10db55 100644 --- a/AgileWorks/Common/WfAction.swift +++ b/AgileWorks/Common/WfAction.swift @@ -17,7 +17,7 @@ enum WfAction: String, CaseIterable { case suspend = "suspend" func toLabel() -> String { - NSLocalizedString("Wf\(self.rawValue.capitalized)", comment: "") + localizadString(key: "Wf\(self.rawValue.capitalized)", comment: "") } static func from(name: String) -> Self? { diff --git a/AgileWorks/Podfile b/AgileWorks/Podfile index 8d044bf0dacd2f2d049b5fc8c896fae938051b07..2472c09ddcf4bd6bc6de232c59d03c98f723f0fd 100644 --- a/AgileWorks/Podfile +++ b/AgileWorks/Podfile @@ -15,6 +15,7 @@ abstract_target 'All' do pod 'LicensePlist' pod 'SwiftLint' pod 'FloatingPanel' + pod 'DropDown' # For Firebase pod 'Crashlytics', '~> 3.14.0' diff --git a/AgileWorks/Podfile.lock b/AgileWorks/Podfile.lock index dda3f2440544458df119bf280d9857d912011da2..796da825f528db4f008e7f231398235f614b6476 100644 --- a/AgileWorks/Podfile.lock +++ b/AgileWorks/Podfile.lock @@ -6,6 +6,7 @@ PODS: - AppAuth/ExternalUserAgent (1.3.0) - Crashlytics (3.14.0): - Fabric (~> 1.10.2) + - DropDown (2.3.13) - Fabric (1.10.2) - Firebase/Analytics (6.18.0): - Firebase/Core @@ -107,6 +108,7 @@ PODS: DEPENDENCIES: - AppAuth - Crashlytics (~> 3.14.0) + - DropDown - Fabric (~> 1.10.2) - Firebase/Analytics - Firebase/Messaging @@ -120,6 +122,7 @@ SPEC REPOS: trunk: - AppAuth - Crashlytics + - DropDown - Fabric - Firebase - FirebaseAnalytics @@ -147,6 +150,7 @@ SPEC REPOS: SPEC CHECKSUMS: AppAuth: 73574f3013a1e65b9601a3ddc8b3158cce68c09d Crashlytics: 9220f5bc89e7a618df411b4f639389dbfb0e03d2 + DropDown: 8a2116376c1981888557f72ec2ffc9a5e0e456ec Fabric: ea977e3cd9c20425516d3dafd3bf8c941c51223f Firebase: 0490eca762a72e4f1582319539153897f1508dee FirebaseAnalytics: 058d71e714a1a6804d9e0f25e3bb18e377a51579 @@ -171,6 +175,6 @@ SPEC CHECKSUMS: SwiftLint: 55e96a4a4d537d4a3156859fc1c54bd24851a046 XCGLogger: 1943831ef907df55108b0b18657953f868de973b -PODFILE CHECKSUM: 4999acd164e0d17ea0f76514484907fb5cf47e78 +PODFILE CHECKSUM: 098b08dfc02bcc011514548f1c9cd491768400be COCOAPODS: 1.11.2 diff --git a/AgileWorks/ShareExtension/View/ShareViewController.swift b/AgileWorks/ShareExtension/View/ShareViewController.swift index 70f2b42af8a83a21bd4ad4de28e5a6a843dfdea4..b9dfaaeacbd378595ad9f516eac2fde058e22f70 100644 --- a/AgileWorks/ShareExtension/View/ShareViewController.swift +++ b/AgileWorks/ShareExtension/View/ShareViewController.swift @@ -5,7 +5,6 @@ // Created by 本多 洋平 on 2020/12/08. // Copyright © 2020 ATLED CORP. All rights reserved. // - import UIKit enum ShareExtensionError: Int, Error { @@ -31,17 +30,17 @@ class ShareViewController: UITableViewController { importCertificateFromContext() { identity, error in if let identity = identity { CertificateDataStore().writeClientCertificate(identity: identity) - self.alertInUiThread(message: NSLocalizedString("CertificateImportSuccess", comment: "")) { + self.alertInUiThread(message: localizadString(key: "CertificateImportSuccess", comment: "")) { self.extensionContext?.completeRequest(returningItems: nil, completionHandler: nil) } } else { if let error = error as NSError?, (error.domain == NSOSStatusErrorDomain) && (error.code == errSecAuthFailed) { // パスフレース間違い - self.alertInUiThread(message: NSLocalizedString("IncorrectPassphrase", comment: "")) {} + self.alertInUiThread(message: localizadString(key: "IncorrectPassphrase", comment: "")) {} } else { // その他のエラー - self.alertInUiThread(message: NSLocalizedString("CertificateImportError", comment: "")) { + self.alertInUiThread(message: localizadString(key: "CertificateImportError", comment: "")) { self.extensionContext?.cancelRequest(withError: error ?? ShareExtensionError.genericError) } } @@ -112,7 +111,7 @@ class ShareViewController: UITableViewController { private func alertInUiThread(message: String, completion: @escaping () -> Void) { DispatchQueue.main.async { let alertController = UIAlertController(title: "AgileWorks", message: message, preferredStyle: .alert) - let okAction = UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default, handler: { _ in completion() }) + let okAction = UIAlertAction(title: localizadString(key: "OK", comment: ""), style: .default, handler: { _ in completion() }) alertController.addAction(okAction) self.present(alertController, animated: true, completion: nil) } diff --git a/AgileWorks/ShareExtension/View/zh-Hans.lproj/MainInterface.strings b/AgileWorks/ShareExtension/View/zh-Hans.lproj/MainInterface.strings new file mode 100644 index 0000000000000000000000000000000000000000..a3e39918afe819ef46b58b02e218dd2e3312e906 --- /dev/null +++ b/AgileWorks/ShareExtension/View/zh-Hans.lproj/MainInterface.strings @@ -0,0 +1,15 @@ + +/* Class = "UIBarButtonItem"; title = "インポート"; ObjectID = "UF3-H2-hjI"; */ +"UF3-H2-hjI.title" = "インポート"; + +/* Class = "UITableViewSection"; headerTitle = "クライアント証明書"; ObjectID = "m3B-MO-zRY"; */ +"m3B-MO-zRY.headerTitle" = "クライアント証明書"; + +/* Class = "UINavigationItem"; title = "クライアント証明書"; ObjectID = "nxD-IX-Nlu"; */ +"nxD-IX-Nlu.title" = "クライアント証明書"; + +/* Class = "UILabel"; text = "パスフレーズ"; ObjectID = "sHY-83-irr"; */ +"sHY-83-irr.text" = "パスフレーズ"; + +/* Class = "UIBarButtonItem"; title = "キャンセル"; ObjectID = "uhs-KR-oxe"; */ +"uhs-KR-oxe.title" = "キャンセル"; diff --git a/AgileWorks/ShareExtension/View/zh-Hant.lproj/MainInterface.strings b/AgileWorks/ShareExtension/View/zh-Hant.lproj/MainInterface.strings new file mode 100644 index 0000000000000000000000000000000000000000..a3e39918afe819ef46b58b02e218dd2e3312e906 --- /dev/null +++ b/AgileWorks/ShareExtension/View/zh-Hant.lproj/MainInterface.strings @@ -0,0 +1,15 @@ + +/* Class = "UIBarButtonItem"; title = "インポート"; ObjectID = "UF3-H2-hjI"; */ +"UF3-H2-hjI.title" = "インポート"; + +/* Class = "UITableViewSection"; headerTitle = "クライアント証明書"; ObjectID = "m3B-MO-zRY"; */ +"m3B-MO-zRY.headerTitle" = "クライアント証明書"; + +/* Class = "UINavigationItem"; title = "クライアント証明書"; ObjectID = "nxD-IX-Nlu"; */ +"nxD-IX-Nlu.title" = "クライアント証明書"; + +/* Class = "UILabel"; text = "パスフレーズ"; ObjectID = "sHY-83-irr"; */ +"sHY-83-irr.text" = "パスフレーズ"; + +/* Class = "UIBarButtonItem"; title = "キャンセル"; ObjectID = "uhs-KR-oxe"; */ +"uhs-KR-oxe.title" = "キャンセル"; diff --git a/AgileWorks/TodayExtension/View/TodayViewController.swift b/AgileWorks/TodayExtension/View/TodayViewController.swift index a9ba575353cbe236fed3afebf07b48aaa407c614..bb0451d0b4bebbc0970ae280733a71f85f599cc5 100644 --- a/AgileWorks/TodayExtension/View/TodayViewController.swift +++ b/AgileWorks/TodayExtension/View/TodayViewController.swift @@ -111,7 +111,7 @@ extension TodayViewController: UITableViewDelegate { extension TodayViewController { func fetch(completion: @escaping (APIResult) -> Void) { guard KeychainDataStore().readAccessToken() != nil else { - completion(.failure(NSLocalizedString("NotLogedin", comment: ""))) + completion(.failure(localizadString(key: "NotLogedin", comment: ""))) return } @@ -123,7 +123,7 @@ extension TodayViewController { if response.itemCount > 0 { completion(.success(response)) } else { - completion(.nodate(NSLocalizedString("NoData", comment: ""))) + completion(.nodate(localizadString(key: "NoData", comment: ""))) } case .failure(let error): var errorMessage = "-" @@ -143,9 +143,9 @@ extension TodayViewController { func errorMessageNSError(error: Error) -> String? { switch URLError.Code(rawValue: (error as NSError).code) { case .notConnectedToInternet: // -1009 - return NSLocalizedString("NotConnectNetworkError", comment: "") + return localizadString(key: "NotConnectNetworkError", comment: "") case .timedOut: // -1001 - return NSLocalizedString("TimedOutNetworkError", comment: "") + return localizadString(key: "TimedOutNetworkError", comment: "") default: return nil } diff --git a/AgileWorks/TodayExtension/View/zh-Hans.lproj/MainInterface.strings b/AgileWorks/TodayExtension/View/zh-Hans.lproj/MainInterface.strings new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/AgileWorks/TodayExtension/View/zh-Hans.lproj/MainInterface.strings @@ -0,0 +1 @@ + diff --git a/AgileWorks/TodayExtension/View/zh-Hant.lproj/MainInterface.strings b/AgileWorks/TodayExtension/View/zh-Hant.lproj/MainInterface.strings new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/AgileWorks/TodayExtension/View/zh-Hant.lproj/MainInterface.strings @@ -0,0 +1 @@ +