Commit 26a4bc6a authored by Steven杜宇's avatar Steven杜宇

// 语言国际化

parent 2ea62f75
...@@ -16,6 +16,8 @@ ...@@ -16,6 +16,8 @@
04808C082B4686C10056D53C /* ATAuthSDK_D.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 04808C032B4686510056D53C /* ATAuthSDK_D.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 04808C082B4686C10056D53C /* ATAuthSDK_D.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 04808C032B4686510056D53C /* ATAuthSDK_D.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
049A48A82B49417300D0C641 /* YHAboutUsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 049A48A72B49417300D0C641 /* YHAboutUsViewController.swift */; }; 049A48A82B49417300D0C641 /* YHAboutUsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 049A48A72B49417300D0C641 /* YHAboutUsViewController.swift */; };
049A48AA2B49536000D0C641 /* YHAboutUsAdvantageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 049A48A92B49536000D0C641 /* YHAboutUsAdvantageCell.swift */; }; 049A48AA2B49536000D0C641 /* YHAboutUsAdvantageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 049A48A92B49536000D0C641 /* YHAboutUsAdvantageCell.swift */; };
04AF58BD2B4FB7BF0066011A /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 04AF58BF2B4FB7BF0066011A /* Localizable.strings */; };
04AF58C42B4FC51C0066011A /* YHLocalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04AF58C32B4FC51C0066011A /* YHLocalizable.swift */; };
6203A87EDC96313BBE789D9C /* Pods_galaxy.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 987C69D43AE8D85DC1930DCF /* Pods_galaxy.framework */; }; 6203A87EDC96313BBE789D9C /* Pods_galaxy.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 987C69D43AE8D85DC1930DCF /* Pods_galaxy.framework */; };
A51044182B493675006B60BB /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = A51044172B493675006B60BB /* README.md */; }; A51044182B493675006B60BB /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = A51044172B493675006B60BB /* README.md */; };
A510441A2B495DD0006B60BB /* UIView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51044192B495DD0006B60BB /* UIView+Extension.swift */; }; A510441A2B495DD0006B60BB /* UIView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51044192B495DD0006B60BB /* UIView+Extension.swift */; };
...@@ -119,6 +121,9 @@ ...@@ -119,6 +121,9 @@
04808C042B4686510056D53C /* ATAuthSDK.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = ATAuthSDK.bundle; sourceTree = "<group>"; }; 04808C042B4686510056D53C /* ATAuthSDK.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = ATAuthSDK.bundle; sourceTree = "<group>"; };
049A48A72B49417300D0C641 /* YHAboutUsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAboutUsViewController.swift; sourceTree = "<group>"; }; 049A48A72B49417300D0C641 /* YHAboutUsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAboutUsViewController.swift; sourceTree = "<group>"; };
049A48A92B49536000D0C641 /* YHAboutUsAdvantageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAboutUsAdvantageCell.swift; sourceTree = "<group>"; }; 049A48A92B49536000D0C641 /* YHAboutUsAdvantageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHAboutUsAdvantageCell.swift; sourceTree = "<group>"; };
04AF58BE2B4FB7BF0066011A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
04AF58C02B4FB80C0066011A /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
04AF58C32B4FC51C0066011A /* YHLocalizable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHLocalizable.swift; sourceTree = "<group>"; };
58C2405158A4A6632D0E7460 /* Pods-galaxy.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-galaxy.debug.xcconfig"; path = "Target Support Files/Pods-galaxy/Pods-galaxy.debug.xcconfig"; sourceTree = "<group>"; }; 58C2405158A4A6632D0E7460 /* Pods-galaxy.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-galaxy.debug.xcconfig"; path = "Target Support Files/Pods-galaxy/Pods-galaxy.debug.xcconfig"; sourceTree = "<group>"; };
987C69D43AE8D85DC1930DCF /* Pods_galaxy.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_galaxy.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 987C69D43AE8D85DC1930DCF /* Pods_galaxy.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_galaxy.framework; sourceTree = BUILT_PRODUCTS_DIR; };
A51044172B493675006B60BB /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; }; A51044172B493675006B60BB /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
...@@ -231,6 +236,15 @@ ...@@ -231,6 +236,15 @@
path = Frameworks; path = Frameworks;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
04AF58BA2B4FB71C0066011A /* Localized */ = {
isa = PBXGroup;
children = (
04AF58C32B4FC51C0066011A /* YHLocalizable.swift */,
04AF58BF2B4FB7BF0066011A /* Localizable.strings */,
);
path = Localized;
sourceTree = "<group>";
};
4758815B24BAF3CAA24EC6A8 /* Pods */ = { 4758815B24BAF3CAA24EC6A8 /* Pods */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
...@@ -396,6 +410,7 @@ ...@@ -396,6 +410,7 @@
A5ACE8EE2B4564F7002C94D2 /* Tools */ = { A5ACE8EE2B4564F7002C94D2 /* Tools */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
04AF58BA2B4FB71C0066011A /* Localized */,
A5ACE8F12B4564F7002C94D2 /* NetWork */, A5ACE8F12B4564F7002C94D2 /* NetWork */,
A5ACE8F72B4564F7002C94D2 /* Extention */, A5ACE8F72B4564F7002C94D2 /* Extention */,
A5ACE9052B4564F7002C94D2 /* Helper */, A5ACE9052B4564F7002C94D2 /* Helper */,
...@@ -682,6 +697,7 @@ ...@@ -682,6 +697,7 @@
knownRegions = ( knownRegions = (
en, en,
Base, Base,
"zh-Hans",
); );
mainGroup = A5573EC52B317BFF00D98EC0; mainGroup = A5573EC52B317BFF00D98EC0;
productRefGroup = A5573ECF2B317BFF00D98EC0 /* Products */; productRefGroup = A5573ECF2B317BFF00D98EC0 /* Products */;
...@@ -700,6 +716,7 @@ ...@@ -700,6 +716,7 @@
isa = PBXResourcesBuildPhase; isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
04AF58BD2B4FB7BF0066011A /* Localizable.strings in Resources */,
04808C062B4686510056D53C /* ATAuthSDK.bundle in Resources */, 04808C062B4686510056D53C /* ATAuthSDK.bundle in Resources */,
A58951C52B398D1000225C19 /* Launch Screen.storyboard in Resources */, A58951C52B398D1000225C19 /* Launch Screen.storyboard in Resources */,
A51044182B493675006B60BB /* README.md in Resources */, A51044182B493675006B60BB /* README.md in Resources */,
...@@ -783,6 +800,7 @@ ...@@ -783,6 +800,7 @@
A5ACE9292B4564F7002C94D2 /* YHSmsCodeInputView.swift in Sources */, A5ACE9292B4564F7002C94D2 /* YHSmsCodeInputView.swift in Sources */,
A5ACE9452B4564F7002C94D2 /* BsHUDContainerView.swift in Sources */, A5ACE9452B4564F7002C94D2 /* BsHUDContainerView.swift in Sources */,
A5ACE93A2B4564F7002C94D2 /* NSAttributedString+Extension.swift in Sources */, A5ACE93A2B4564F7002C94D2 /* NSAttributedString+Extension.swift in Sources */,
04AF58C42B4FC51C0066011A /* YHLocalizable.swift in Sources */,
0468D4222B493A5E00CFB916 /* YHPhoneMessageView.swift in Sources */, 0468D4222B493A5E00CFB916 /* YHPhoneMessageView.swift in Sources */,
A5ACE9512B4564F7002C94D2 /* YhConstant.swift in Sources */, A5ACE9512B4564F7002C94D2 /* YhConstant.swift in Sources */,
A5ACE94A2B4564F7002C94D2 /* BsHUDProgressView.swift in Sources */, A5ACE94A2B4564F7002C94D2 /* BsHUDProgressView.swift in Sources */,
...@@ -864,6 +882,18 @@ ...@@ -864,6 +882,18 @@
}; };
/* End PBXTargetDependency section */ /* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
04AF58BF2B4FB7BF0066011A /* Localizable.strings */ = {
isa = PBXVariantGroup;
children = (
04AF58BE2B4FB7BF0066011A /* en */,
04AF58C02B4FB80C0066011A /* zh-Hans */,
);
name = Localizable.strings;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */ /* Begin XCBuildConfiguration section */
A5573EF62B317C0100D98EC0 /* Debug */ = { A5573EF62B317C0100D98EC0 /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
......
...@@ -19,7 +19,7 @@ class YHAboutUsViewController: YHBaseViewController { ...@@ -19,7 +19,7 @@ class YHAboutUsViewController: YHBaseViewController {
lazy var items = { lazy var items = {
return [AboutAdvantageItem(iconName: "about_match", title: "精准匹配", detail: "大数据精准匹配,专属方案获批率更高"), return [AboutAdvantageItem(iconName: "about_match", title: "ABC".yhlocalized(), detail: "大数据精准匹配,专属方案获批率更高"),
AboutAdvantageItem(iconName: "about_response", title: "快速响应", detail: "身份规划师一对一专业服务,第一时间响应您的需求"), AboutAdvantageItem(iconName: "about_response", title: "快速响应", detail: "身份规划师一对一专业服务,第一时间响应您的需求"),
AboutAdvantageItem(iconName: "about_service", title: "专业服务", detail: "5年经验+英语专8级文案导师团队倾力支持"), AboutAdvantageItem(iconName: "about_service", title: "专业服务", detail: "5年经验+英语专8级文案导师团队倾力支持"),
AboutAdvantageItem(iconName: "about_service2", title: "精准匹配", detail: "香港专才、香港留学获批常年保持90%以上")] AboutAdvantageItem(iconName: "about_service2", title: "精准匹配", detail: "香港专才、香港留学获批常年保持90%以上")]
...@@ -48,7 +48,7 @@ class YHAboutUsViewController: YHBaseViewController { ...@@ -48,7 +48,7 @@ class YHAboutUsViewController: YHBaseViewController {
lazy var aboutLabel = { lazy var aboutLabel = {
var label = UILabel() var label = UILabel()
label.text = "关于银河" label.text = "关于银河".yhlocalized()
label.textColor = UIColor(hexString:"#222222") label.textColor = UIColor(hexString:"#222222")
label.textAlignment = NSTextAlignment.left label.textAlignment = NSTextAlignment.left
label.font = UIFont.systemFont(ofSize: 20) label.font = UIFont.systemFont(ofSize: 20)
......
//
// YHLocalizable.swift
// galaxy
//
// Created by edy on 2024/1/11.
// Copyright © 2024 www.davidhuang.com. All rights reserved.
//
import Foundation
private let kDefaultLanguage = "en"
private let kBaseBundle = "Base"
private let kCurrentLanguageKey = "YHCurrentLanguageKey"
extension Notification.Name {
static let languageChanged = Notification.Name("YHLanguageChanged")
}
open class YHLocalizable {
static let shared = YHLocalizable()
open func currentBundle() -> Bundle {
let bundle: Bundle = Bundle.main
if let path = bundle.path(forResource: self.currentLanguage(), ofType: "lproj"),
let bundle = Bundle(path: path) {
return bundle
}
else if let path = bundle.path(forResource: kBaseBundle, ofType: "lproj"),
let bundle = Bundle(path: path) {
return bundle
}
return Bundle.main
}
/**
* List available languages
* - Returns: Array of available languages.
*/
open func availableLanguages(_ excludeBase: Bool = false) -> [String] {
var availableLanguages = Bundle.main.localizations
if let indexOfBase = availableLanguages.firstIndex(of: "Base") , excludeBase == true {
availableLanguages.remove(at: indexOfBase)
}
return availableLanguages
}
/**
* Current language
* - Returns: The current language. String.
*/
open func currentLanguage() -> String {
if let currentLanguage = UserDefaults.standard.object(forKey: kCurrentLanguageKey) as? String {
return currentLanguage
}
return defaultLanguage()
}
/**
* Change the current language
* - Parameter language: Desired language.
*/
open func setCurrentLanguage(_ language: String) {
let selectedLanguage = availableLanguages().contains(language) ? language : defaultLanguage()
if (selectedLanguage != currentLanguage()){
UserDefaults.standard.set(selectedLanguage, forKey: kCurrentLanguageKey)
UserDefaults.standard.synchronize()
NotificationCenter.default.post(name: .languageChanged, object: nil)
}
}
/**
* Default language
* - Returns: The app's default language. String.
*/
open func defaultLanguage() -> String {
var defaultLanguage: String = String()
guard let preferredLanguage = Bundle.main.preferredLocalizations.first else {
return kDefaultLanguage
}
let availableLanguages: [String] = self.availableLanguages()
if (availableLanguages.contains(preferredLanguage)) {
defaultLanguage = preferredLanguage
}
else {
defaultLanguage = kDefaultLanguage
}
return defaultLanguage
}
/**
Resets the current language to the default
*/
open func resetCurrentLanguageToDefault() {
setCurrentLanguage(self.defaultLanguage())
}
/**
* Get the current language's display name for a language.
* - Parameter language: Desired language.
* - Returns: The localized string.
*/
open func displayNameForLanguage(_ language: String) -> String {
let locale : NSLocale = NSLocale(localeIdentifier: currentLanguage())
if let displayName = locale.displayName(forKey: NSLocale.Key.identifier, value: language) {
return displayName
}
return String()
}
}
public extension String {
/**
* Utility method for getting localized value
*/
func yhlocalized() -> String {
return YHLocalizable.shared.currentBundle().localizedString(forKey: self, value: nil, table: nil)
}
func yhlocalized(tableName:String?, bundle:Bundle?) -> String {
guard bundle != nil else {
return Bundle.main.localizedString(forKey: self, value: nil, table: tableName)
}
return bundle!.localizedString(forKey: self, value: nil, table: tableName)
}
}
/*
Localizable.strings
galaxy
Created by edy on 2024/1/11.
Copyright © 2024 www.davidhuang.com. All rights reserved.
*/
"关于银河" = "About Galaxy";
/*
Localizable.strings
galaxy
Created by edy on 2024/1/11.
Copyright © 2024 www.davidhuang.com. All rights reserved.
*/
"关于银河" = "关于银河";
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment