国际化功能开发

This commit is contained in:
zeng 2025-05-12 14:20:00 +08:00
parent 5f3deeb52d
commit fb601875ef
55 changed files with 480 additions and 239 deletions

View File

@ -26,7 +26,7 @@ class SPTabBarController: UITabBarController {
let nav3 = createNavigationController(viewController: SPMyListViewController(), title: "movia_my_list".localized, image: UIImage(named: "tabbar_icon_04"), selectedImage: UIImage(named: "tabbar_icon_04_selected"))
let nav4 = createNavigationController(viewController: SPRewardsViewController(), title: "Rewards".localized, image: UIImage(named: "tabbar_icon_04"), selectedImage: UIImage(named: "tabbar_icon_04_selected"))
let nav4 = createNavigationController(viewController: SPRewardsViewController(), title: "movia_rewards".localized, image: UIImage(named: "tabbar_icon_04"), selectedImage: UIImage(named: "tabbar_icon_04_selected"))
let nav5 = createNavigationController(viewController: SPMineViewController(), title: "movia_profile".localized, image: UIImage(named: "tabbar_icon_05"), selectedImage: UIImage(named: "tabbar_icon_05_selected"))

View File

@ -404,5 +404,9 @@ extension UIColor {
static func color321F1F(alpha: CGFloat = 1) -> UIColor {
return color(hex: 0x321F1F, alpha: alpha)
}
static func colorFF473D(alpha: CGFloat = 1) -> UIColor {
return color(hex: 0xFF473D, alpha: alpha)
}
}

View File

@ -37,7 +37,7 @@ class SPWalletAPI: NSObject {
SPNetwork.request(parameters: param) { (response: SPNetworkResponse<SPIAPOrderModel>) in
if let message = response.data?.message, message.count > 0 {
if response.data?.code == 30007 {
SPToast.show(text: "kToastMessage_04".localized)
SPToast.show(text: "movia_member_toast_01".localized)
} else {
SPToast.show(text: message)
}

View File

@ -137,7 +137,7 @@ class SPNetwork: NSObject {
var res = SPNetworkResponse<T>()
res.code = -1
if parameters.isToast {
SPToast.show(text: "kToastMessage_03".localized)
SPToast.show(text: "movia_network_toast_01".localized)
}
completion?(res)
break

View File

@ -30,7 +30,7 @@ class SPApnsAlertView: UIView {
let label = UILabel()
label.font = .fontMedium(ofSize: 20)
label.textColor = .colorFFFFFF()
label.text = "kAlertMessage_03".localized
label.text = "movia_open_notification".localized
label.textAlignment = .center
label.numberOfLines = 0
return label
@ -40,7 +40,7 @@ class SPApnsAlertView: UIView {
let label = UILabel()
label.textColor = .colorA8B8C3()
label.font = .fontRegular(ofSize: 14)
label.text = "kAlertMessage_04".localized
label.text = "movia_open_notification_info".localized
label.textAlignment = .center
label.numberOfLines = 0
return label
@ -57,7 +57,7 @@ class SPApnsAlertView: UIView {
private lazy var allowButton: UIButton = {
let button = UIButton(type: .custom)
button.setTitle("Allow".localized, for: .normal)
button.setTitle("movia_allow".localized, for: .normal)
button.titleLabel?.font = .fontMedium(ofSize: 16)
button.setTitleColor(.colorFFFFFF(), for: .normal)
button.layer.cornerRadius = 21

View File

@ -15,13 +15,13 @@ class SPCampaignWebViewController: SPWebViewController {
super.viewDidLoad()
autoTitle = false
if urlStr == SPFeedBackListWebUrl {
self.title = "Feedback History".localized
self.title = "movia_feedback_history".localized
} else if urlStr == SPFeedBackHomeWebUrl {
self.title = "movia_profile_Feedback".localized
} else if urlStr == SPFeedBackDetailWebUrl {
self.title = "Feedback Details".localized
self.title = "movia_feedback_details".localized
} else if urlStr == SPRewardsWebUrl {
self.title = "Rewards".localized
self.title = "movia_rewards".localized
}
self.webView.scrollView.sp_addRefreshHeader { [weak self] in

View File

@ -91,7 +91,11 @@ extension SPWebViewController {
if settings.authorizationStatus != .authorized {//
SPAPPTool.openApnsSetting()
} else {//
SPRewardsAPI.requestUploadOpenNotify(completer: nil)
SPRewardsAPI.requestUploadOpenNotify { [weak self] finish in
if finish {
self?.reload()
}
}
}
}
}

View File

@ -18,7 +18,7 @@ class SPGuideViewController: SPViewController {
private lazy var button: UIButton = {
let button = JXButton(type: .custom)
button.setTitle("Open".localized, for: .normal)
button.setTitle("movia_open".localized, for: .normal)
button.setTitleColor(.colorFFFFFF(), for: .normal)
button.jx_font = .fontRegular(ofSize: 18)
button.leftAndRightMargin = 33

View File

@ -18,7 +18,7 @@ class SPHomePlayHistoryCell: SPCollectionViewCell {
// model?.episode_total
let episode_total = "\(model?.episode_total ?? 0)"
let episode = String(format: "EP.%@/%@", "\(model?.current_episode ?? "0")", episode_total)
let episode = String(format: "movia_text_episcode_ios".localized, "\(model?.current_episode ?? "0")") + "/\(episode_total)"
let episodeString = NSMutableAttributedString(string: episode)
episodeString.color = .colorFF5100()

View File

@ -41,9 +41,10 @@ class SPLoginViewController: SPViewController {
}()
private lazy var agreementLabel: YYLabel = {
let agreementStr = "kLoginAgreementText".localized
let userAgreementStr = "movia_profile_User_Agreement".localized
let privacyPolicy = "movia_profile_Privacy_Policy".localized
let agreementStr = String(format: "movia_login_agreement_tip".localized, userAgreementStr, privacyPolicy)
let range1 = agreementStr.ocString().range(of: userAgreementStr)
let range2 = agreementStr.ocString().range(of: privacyPolicy)

View File

@ -14,9 +14,9 @@ class SPAboutUsViewController: SPViewController {
SPMineItem(type: .userAgreement, title: "movia_profile_User_Agreement".localized),
SPMineItem(type: .privacyPolicy, title: "movia_profile_Privacy_Policy".localized),
SPMineItem(type: .informationProtection, title: "movia_child_protection_text".localized),
SPMineItem(type: .civizatioConvention, title: "Youth Civilization Convention".localized),
SPMineItem(type: .informationSharing, title: "List of Third-Party Sharing of Personal Information".localized),
SPMineItem(type: .persoInforDisclosure, title: "Explicit List of Personal Information Collection".localized),
SPMineItem(type: .civizatioConvention, title: "movia_civizatio_convention_text".localized),
SPMineItem(type: .informationSharing, title: "movia_information_sharing_text".localized),
SPMineItem(type: .persoInforDisclosure, title: "movia_persoInfor_disclosure_text".localized),
]
return arr
}()

View File

@ -10,17 +10,16 @@ import UIKit
class SPDeleteAccountViewController: SPViewController {
private lazy var imageArr: [UIImage] = {
let arr = [
UIImage(named: "delete_account_image_01")!,
UIImage(named: "delete_account_image_02")!,
UIImage(named: "delete_account_image_03")!,
UIImage(named: "delete_account_image_04")!,
]
return arr
}()
// private lazy var imageArr: [UIImage] = {
// let arr = [
// UIImage(named: "delete_account_image_01")!,
// UIImage(named: "delete_account_image_02")!,
// UIImage(named: "delete_account_image_03")!,
// UIImage(named: "delete_account_image_04")!,
// ]
// return arr
// }()
private lazy var imageViewArr: [UIImageView] = []
//MARK: UI
private lazy var scrollView: SPScrollView = {
@ -28,6 +27,51 @@ class SPDeleteAccountViewController: SPViewController {
return scrollView
}()
private lazy var stackView: UIStackView = {
let view = UIStackView()
view.axis = .vertical
view.spacing = 18
view.addArrangedSubview(textView1)
view.addArrangedSubview(textView3)
view.addArrangedSubview(textView2)
return view
}()
private lazy var iconImageView: UIImageView = {
let imageView = UIImageView(image: UIImage(named: "delete_account_icon_01"))
return imageView
}()
private lazy var iconTextLabel: UILabel = {
let label = UILabel()
label.font = .fontMedium(ofSize: 14)
label.textColor = .colorFF473D()
label.text = "DeleteAccount_tips_1".localized
return label
}()
private lazy var textView1: SPDeleteAccountNormalTextView = {
let view = SPDeleteAccountNormalTextView()
view.text = "DeleteAccount_tips_2".localized
return view
}()
private lazy var textView2: SPDeleteAccountNormalTextView = {
let view = SPDeleteAccountNormalTextView()
view.text = "DeleteAccount_tips_3".localized
return view
}()
private lazy var textView3: SPDeleteAccountDetailTextView = {
let view = SPDeleteAccountDetailTextView()
return view
}()
private lazy var lineView: UIView = {
let view = UIView()
view.backgroundColor = .colorFFFFFF(alpha: 0.25)
@ -48,7 +92,7 @@ class SPDeleteAccountViewController: SPViewController {
label.font = .fontMedium(ofSize: 14)
label.textColor = .colorFFFFFF()
label.numberOfLines = 0
label.text = "kDeleteAccountCheckText".localized
label.text = "DeleteAccount_tips_4".localized
return label
}()
@ -69,7 +113,7 @@ class SPDeleteAccountViewController: SPViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.title = "Account Deletion".localized
self.title = "movia_Account_Deletion".localized
setBackgroundView(isShowGradient: false, bgImage: nil)
@ -108,47 +152,41 @@ extension SPDeleteAccountViewController {
private func _setupUI() {
view.addSubview(scrollView)
scrollView.addSubview(iconImageView)
scrollView.addSubview(iconTextLabel)
scrollView.addSubview(stackView)
scrollView.addSubview(lineView)
scrollView.addSubview(checkButton)
scrollView.addSubview(checkLabel)
scrollView.addSubview(deleteButton)
imageArr.forEach {
let imageSize = $0.size
let imageView = UIImageView(image: $0)
scrollView.addSubview(imageView)
if let lastImageView = self.imageViewArr.last {
let width = kSPScreenWidth - 32
let height = imageSize.height / imageSize.width * width
imageView.snp.makeConstraints { make in
make.top.equalTo(lastImageView.snp.bottom).offset(18)
make.width.equalTo(width)
make.height.equalTo(height)
make.centerX.equalToSuperview()
}
} else {
imageView.snp.makeConstraints { make in
make.top.equalToSuperview().offset(10)
make.width.equalTo(kSPMainW(imageSize.width))
make.height.equalTo(kSPMainW(imageSize.height))
make.centerX.equalToSuperview()
}
}
self.imageViewArr.append(imageView)
}
scrollView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
iconImageView.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.top.equalToSuperview().offset(10)
}
iconTextLabel.snp_makeConstraints { make in
make.centerX.equalToSuperview()
make.top.equalTo(iconImageView.snp.bottom).offset(12)
}
stackView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(16)
make.centerX.equalToSuperview()
make.top.equalTo(iconTextLabel.snp.bottom).offset(18)
}
lineView.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.width.equalTo(kSPScreenWidth - 32)
make.top.equalTo(self.imageViewArr.last!.snp.bottom).offset(18)
make.top.equalTo(stackView.snp.bottom).offset(18)
make.height.equalTo(1)
}

View File

@ -128,7 +128,7 @@ extension SPSettingsViewController {
}
///退
private func logout() {
let alert = UIAlertController(title: nil, message: "Confirm logout?".localized, preferredStyle: .alert)
let alert = UIAlertController(title: nil, message: "movia_confirm_logout".localized, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "movia_affirm".localized, style: .default, handler: { _ in
SPLoginManager.manager.logout { [weak self] isFinish in
guard let self = self else { return }
@ -145,13 +145,13 @@ extension SPSettingsViewController {
let cache = SPAppCacheManager.manager.allCache
var arr = [
SPMineItem(type: .clearCache, title: "Clear Cache".localized, subtitle: SPAppCacheManager.cacheToString(cache: cache)),
SPMineItem(type: .clearCache, title: "movia_Clear_cache".localized, subtitle: SPAppCacheManager.cacheToString(cache: cache)),
SPMineItem(type: .aboutUs, title: "movia_profile_About_Us".localized),
]
if SPLoginManager.manager.isLogin {
arr.append(SPMineItem(type: .deleteAccount, title: "DeleteAccount".localized))
arr.append(SPMineItem(type: .logout, title: "Signout".localized))
arr.append(SPMineItem(type: .logout, title: "movia_signout".localized))
}

View File

@ -0,0 +1,90 @@
//
// SPDeleteAccountDetailTextView.swift
// MoviaBox
//
// Created by on 2025/5/12.
//
import UIKit
class SPDeleteAccountDetailTextView: SPDeleteAccountTextView {
//MARK: UI
private lazy var titleLabel: UILabel = {
let label = UILabel()
label.font = .fontMedium(ofSize: 14)
label.textColor = .colorFFFFFF()
label.numberOfLines = 0
label.text = "DeleteAccount_tips_5".localized
return label
}()
private lazy var stackView: UIStackView = {
let view = UIStackView(arrangedSubviews: [tipView1, tipView2, tipView3, tipView4])
view.axis = .vertical
view.spacing = 12
return view
}()
private lazy var tipView1: SPDeleteAccountTipView = {
let view = SPDeleteAccountTipView()
view.title = "DeleteAccount_tips_title_1".localized
view.text = "DeleteAccount_tips_text_1".localized
return view
}()
private lazy var tipView2: SPDeleteAccountTipView = {
let view = SPDeleteAccountTipView()
view.title = "DeleteAccount_tips_title_2".localized
view.text = "DeleteAccount_tips_text_2".localized
return view
}()
private lazy var tipView3: SPDeleteAccountTipView = {
let view = SPDeleteAccountTipView()
view.title = "DeleteAccount_tips_title_3".localized
view.text = "DeleteAccount_tips_text_3".localized
return view
}()
private lazy var tipView4: SPDeleteAccountTipView = {
let view = SPDeleteAccountTipView()
view.title = "DeleteAccount_tips_title_4".localized
// view.text = "DeleteAccount_tips_text_1".localized
return view
}()
override init(frame: CGRect) {
super.init(frame: frame)
_setupUI()
}
@MainActor required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension SPDeleteAccountDetailTextView {
private func _setupUI() {
addSubview(titleLabel)
addSubview(stackView)
titleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(13)
make.top.equalToSuperview().offset(12)
make.right.lessThanOrEqualToSuperview().offset(-13)
}
stackView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(titleLabel.snp.bottom).offset(12)
make.bottom.equalToSuperview().offset(-10)
}
}
}

View File

@ -0,0 +1,43 @@
//
// SPDeleteAccountNormalTextView.swift
// MoviaBox
//
// Created by on 2025/5/12.
//
import UIKit
class SPDeleteAccountNormalTextView: SPDeleteAccountTextView {
var text: String? {
didSet {
label.text = text
}
}
private lazy var label: UILabel = {
let label = UILabel()
label.numberOfLines = 0
label.font = .fontMedium(ofSize: 14)
label.textColor = .colorFFFFFF()
return label
}()
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(label)
label.snp.makeConstraints { make in
make.left.equalToSuperview().offset(12)
make.centerY.equalToSuperview()
make.top.equalToSuperview().offset(12)
make.right.lessThanOrEqualToSuperview().offset(-12)
}
}
@MainActor required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

View File

@ -0,0 +1,24 @@
//
// SPDeleteAccountTextView.swift
// MoviaBox
//
// Created by on 2025/5/12.
//
import UIKit
class SPDeleteAccountTextView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = .color272A30()
layer.cornerRadius = 8
layer.masksToBounds = true
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

View File

@ -0,0 +1,90 @@
//
// SPDeleteAccountTipView.swift
// MoviaBox
//
// Created by on 2025/5/12.
//
import UIKit
class SPDeleteAccountTipView: UIView {
// override var intrinsicContentSize: CGSize {
// return CGSize(width: kSPScreenWidth, height: 100)
// }
var title: String? {
didSet {
titleLabel.text = title
}
}
var text: String? {
didSet {
textLabel.text = text
}
}
private lazy var dotView: UIView = {
let view = UIView()
view.backgroundColor = .colorFFFFFF()
view.layer.cornerRadius = 2
view.layer.masksToBounds = true
return view
}()
private lazy var titleLabel: UILabel = {
let label = UILabel()
label.font = .fontMedium(ofSize: 12)
label.textColor = .colorFFFFFF()
return label
}()
private lazy var textLabel: UILabel = {
let label = UILabel()
label.font = .fontRegular(ofSize: 12)
label.textColor = .color8B8B8B()
label.numberOfLines = 0
return label
}()
override init(frame: CGRect) {
super.init(frame: frame)
_setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension SPDeleteAccountTipView {
private func _setupUI() {
addSubview(dotView)
addSubview(titleLabel)
addSubview(textLabel)
dotView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(16)
make.centerY.equalTo(titleLabel)
make.width.height.equalTo(4)
}
titleLabel.snp.makeConstraints { make in
make.top.equalToSuperview()
make.left.equalToSuperview().offset(24)
make.right.lessThanOrEqualToSuperview().offset(-24)
}
textLabel.snp.makeConstraints { make in
make.left.equalTo(titleLabel)
make.top.equalTo(titleLabel.snp.bottom).offset(2)
make.right.lessThanOrEqualToSuperview().offset(-24)
make.bottom.equalToSuperview()
}
}
}

View File

@ -124,7 +124,7 @@ class SPMineHeaderView: UIView {
private lazy var loginButton: UIButton = {
let button = UIButton(type: .custom)
button.setTitle("Log in".localized, for: .normal)
button.setTitle("movia_profile_Log_in".localized, for: .normal)
button.setTitleColor(.colorFFFFFF(), for: .normal)
button.titleLabel?.font = .fontMedium(ofSize: 16)
button.setBackgroundImage(UIImage(color: .colorFFFFFF(alpha: 0.23)), for: .normal)

View File

@ -18,7 +18,7 @@ class SPMineMemberNoView: UIView {
private lazy var titleLabel: UILabel = {
let label = UILabel()
label.text = "You are not a member yet".localized
label.text = "movia_not_member_text".localized
label.textColor = .colorBBB9B3()
label.font = .fontMedium(ofSize: 16)
label.adjustsFontSizeToFitWidth = true
@ -28,7 +28,7 @@ class SPMineMemberNoView: UIView {
private lazy var activateButton: UIButton = {
let button = JXButton(type: .custom)
button.leftAndRightMargin = 13
button.setTitle("Activate".localized, for: .normal)
button.setTitle("movia_activate".localized, for: .normal)
button.setTitleColor(.colorFFD791(), for: .normal)
button.jx_font = .fontMedium(ofSize: 14)
button.layer.cornerRadius = 14
@ -44,7 +44,7 @@ class SPMineMemberNoView: UIView {
let label = UILabel()
label.font = .fontMedium(ofSize: 12)
label.textColor = .colorA69B89()
label.text = "Members can enjoy".localized
label.text = "movia_members_can_enjoy".localized
return label
}()
@ -52,7 +52,7 @@ class SPMineMemberNoView: UIView {
let label = UILabel()
label.font = .fontMedium(ofSize: 12)
label.textColor = .colorFFD28F()
label.text = "Unlimited access to all series".localized
label.text = "movia_not_member_tip_01".localized
return label
}()

View File

@ -13,9 +13,9 @@ class SPMineMemberYesView: UIView {
didSet {
let date = Date(timeIntervalSince1970: userInfo?.vip_end_time ?? 0)
#if DEBUG
expirationTimeLabel.text = String(format: "VlP expiration time : %@".localized, date.format(dateFormat: "yyyy-MM-dd HH:mm:ss"))
expirationTimeLabel.text = String(format: "movia_VlP_expiration_time_#".localized, date.format(dateFormat: "yyyy-MM-dd HH:mm:ss"))
#else
expirationTimeLabel.text = String(format: "VlP expiration time : %@".localized, date.format(dateFormat: "yyyy-MM-dd"))
expirationTimeLabel.text = String(format: "movia_VlP_expiration_time_#".localized, date.format(dateFormat: "yyyy-MM-dd"))
#endif
}
@ -39,13 +39,12 @@ class SPMineMemberYesView: UIView {
let label = UILabel()
label.font = .fontRegular(ofSize: 12)
label.textColor = .colorFFD5B2()
label.text = "VlP expiration time : 2023-11-23"
return label
}()
private lazy var openButton: UIButton = {
let button = JXButton(type: .custom)
button.setTitle("Stream Unlimited".localized, for: .normal)
button.setTitle("movia_stream_unlimited".localized, for: .normal)
button.setTitleColor(.color321704(), for: .normal)
button.jx_font = .fontRegular(ofSize: 12)
button.leftAndRightMargin = 12

View File

@ -15,7 +15,7 @@ class SPMinePlayHistoryCell: SPCollectionViewCell {
titleLabel.text = model?.name
let episode_total = "\(model?.episode_total ?? 0)"
let episode = String(format: "EP.%@/%@", "\(model?.current_episode ?? "0")", episode_total)
let episode = String(format: "movia_text_episcode_ios".localized, "\(model?.current_episode ?? "0")") + "/\(episode_total)"
let episodeString = NSMutableAttributedString(string: episode)
episodeString.color = .colorE6334B()

View File

@ -55,7 +55,7 @@ class SPMineWalletView: UIView {
let label = UILabel()
label.font = .fontRegular(ofSize: 12)
label.textColor = .colorFFFFFF()
label.text = "My wallet".localized
label.text = "movia_profile_My_Wallet".localized
return label
}()
@ -73,7 +73,7 @@ class SPMineWalletView: UIView {
private lazy var storeButton: UIButton = {
let button = UIButton(type: .custom)
button.setBackgroundImage(UIImage(named: "store_button_01"), for: .normal)
button.setTitle("Store".localized, for: .normal)
button.setTitle("movia_Store".localized, for: .normal)
button.setTitleColor(.colorFFFFFF(), for: .normal)
button.titleLabel?.font = .fontMedium(ofSize: 18)
button.addTarget(self, action: #selector(handleStoreButton), for: .touchUpInside)

View File

@ -216,10 +216,10 @@ extension SPPlayerDetailViewController {
switch model.status {
case .jump:
SPToast.show(text: "kAlertMessage_01".localized)
SPToast.show(text: "movia_jump_unlock_error".localized)
case .noPlay:
SPToast.show(text: "kAlertMessage_02".localized)
SPToast.show(text: "movia_buy_fail_toast_01".localized)
case .notEnough:
self.onPlayBuy()

View File

@ -40,13 +40,13 @@ class SPPlayBuyView: HWPanModalContentView {
let label = UILabel()
label.font = .fontMedium(ofSize: 16)
label.textColor = .colorFFFFFF()
label.text = "Store".localized
label.text = "movia_Store".localized
return label
}()
private lazy var restoreButton: UIButton = {
let button = UIButton(type: .custom)
button.setTitle("Restore".localized, for: .normal)
button.setTitle("movia_Restore".localized, for: .normal)
button.setTitleColor(.colorFFFFFF(alpha: 0.5), for: .normal)
button.titleLabel?.font = .fontRegular(ofSize: 14)
button.addTarget(self, action: #selector(handleRestoreButton), for: .touchUpInside)

View File

@ -40,7 +40,7 @@ class SPPlayLockView: UIView {
let label = UILabel()
label.font = .fontRegular(ofSize: 18)
label.textColor = .colorFFFFFF()
label.text = "This episode is locked".localized
label.text = "movia_video_lock_tip".localized
return label
}()
@ -107,7 +107,7 @@ class SPPlayLockView: UIView {
@objc private func handleUnlockButton() {
if isUnlockUpEpisode {
SPToast.show(text: "kAlertMessage_01".localized)
SPToast.show(text: "movia_jump_unlock_error".localized)
return
}
@ -122,10 +122,10 @@ class SPPlayLockView: UIView {
unlockStackView.addArrangedSubview(unlockTitleLabel)
if isUnlockUpEpisode {
unlockTitleLabel.text = "Unlock the previous episode".localized
unlockTitleLabel.text = "movia_video_lock_tip_02".localized
} else {
unlockTitleLabel.text = "Unlock now for".localized
unlockTitleLabel.text = "movia_unlock_now_for".localized
unlockStackView.addArrangedSubview(coinView)
}

View File

@ -34,7 +34,7 @@ class SPConsumptionRecordsViewController: SPViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.title = "Consumption Records".localized
self.title = "movia_Consumption_records".localized
self.edgesForExtendedLayout = .top
_setupUI()

View File

@ -9,7 +9,7 @@ import UIKit
class SPOrderRecordsPageViewController: SPViewController {
private lazy var titles: [String] = ["Coin Record".localized, "VIP Record".localized]
private lazy var titles: [String] = ["movia_Coin_Record".localized, "VIP Record".localized]
private lazy var viewControllers: [UIViewController] = {
let vc1 = SPCoinOrderRecordViewController()
let vc2 = SPVIPOrderRecordViewController()
@ -44,7 +44,7 @@ class SPOrderRecordsPageViewController: SPViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.title = "Order Records".localized
self.title = "movia_order_records".localized
self.edgesForExtendedLayout = .top
_setupUI()

View File

@ -33,7 +33,7 @@ class SPRewardCoinsViewController: SPViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.title = "Reward Coins".localized
self.title = "movia_Reward_Coins".localized
self.edgesForExtendedLayout = .top
_setupUI()

View File

@ -97,15 +97,15 @@ class SPStoreViewController: SPViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.title = "Store".localized
self.title = "movia_Store".localized
self.edgesForExtendedLayout = .top
setBackgroundView(isShowGradient: false, bgImage: UIImage(named: "buy_bg_image_02"))
let rightBarButton = UIBarButtonItem(title: "Restore".localized, style: .plain, target: self, action: #selector(handelRightBarButton))
let rightBarButton = UIBarButtonItem(title: "movia_Restore".localized, style: .plain, target: self, action: #selector(handelRightBarButton))
self.navigationItem.rightBarButtonItem = rightBarButton
tipTitleLabel.text = "kStoreTipTitle".localized
tipTextLabel.text = "kStoreTipText".localized
tipTitleLabel.text = "movia_store_tips_title_ios".localized
tipTextLabel.text = "movia_store_tips_ios".localized.replacingOccurrences(of: "\\n", with: "\n")
_setupUI()

View File

@ -11,9 +11,9 @@ class SPWalletViewController: SPViewController {
private lazy var dataArr: [SPMineItem] = {
let arr = [
SPMineItem(type: .consumptionRecords, iconImage: UIImage(named: "records_icon_01"), title: "Consumption records".localized),
SPMineItem(type: .orderRecord, iconImage: UIImage(named: "records_icon_02"), title: "Purchase records".localized),
SPMineItem(type: .rewardCoins, iconImage: UIImage(named: "coin_icon_03"), title: "Reward Coins".localized),
SPMineItem(type: .consumptionRecords, iconImage: UIImage(named: "records_icon_01"), title: "movia_Consumption_records".localized),
SPMineItem(type: .orderRecord, iconImage: UIImage(named: "records_icon_02"), title: "movia_Purchase_records".localized),
SPMineItem(type: .rewardCoins, iconImage: UIImage(named: "coin_icon_03"), title: "movia_Reward_Coins".localized),
SPMineItem(type: .feedBack, iconImage: UIImage(named: "feed_back_icon_03"), title: "movia_profile_Feedback".localized),
]
return arr
@ -39,7 +39,7 @@ class SPWalletViewController: SPViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.edgesForExtendedLayout = .top
self.title = "Details".localized
self.title = "movia_details".localized
_setupUI()
}

View File

@ -11,7 +11,7 @@ class SPCoinOrderRecordCell: SPTableViewCell {
var model: SPRechargeRecordModel? {
didSet {
titleLabel.text = "Recharge Coins".localized
titleLabel.text = "movia_recharge_coins".localized
timeLabel.text = model?.created_at
coinLabel.text = "+\(model?.value ?? "0")"
}

View File

@ -28,7 +28,7 @@ class SPCoinRechargeCell: SPCollectionViewCell {
if let sendCoins = model?.send_coins, sendCoins > 0 {
bonusLabel.isHidden = false
bonusLabel.text = String(format: "%@ Bonus".localized, "+\(sendCoins)")
bonusLabel.text = String(format: "movia_bonus_#".localized, "+\(sendCoins)")
} else {
bonusLabel.isHidden = true
}

View File

@ -38,7 +38,7 @@ class SPCoinRechargeView: UIView {
let label = UILabel()
label.font = .fontRegular(ofSize: 14)
label.textColor = .colorFFFFFF(alpha: 0.7)
label.text = "Coins Balance:".localized
label.text = "movia_coins_balance".localized + ":"
return label
}()

View File

@ -11,10 +11,11 @@ class SPConsumptionRecordsCell: SPTableViewCell {
var model: SPBuyRecordsModel? {
didSet {
titleLabel.text = "Purchase Single Episode".localized
titleLabel.text = "movia_Purchase_Single_Episode".localized
timeLabel.text = model?.created_at
desLabel.text = "Ep.\(model?.episode ?? "") \(model?.name ?? "")"
coinLabel.text = "-\(model?.coins ?? 0) Coins"
let episode = String(format: "movia_text_episcode_ios".localized, "\(model?.episode ?? "0")") + "\(model?.name ?? "")"
coinLabel.text = "-\(model?.coins ?? 0) " + "movia_profile_Coins".localized
}
}

View File

@ -18,7 +18,7 @@ class SPMemberRechargeCell: SPCollectionViewCell {
moneyLabel.text = model?.price
if let sendCoins = model?.send_coins, sendCoins > 0 {
markBgView.isHidden = false
sendCoinLabel.text = String(format: "+ Extra %@".localized, "\(sendCoins)")
sendCoinLabel.text = String(format: "movia_extra_#".localized, "\(sendCoins)")
} else {
markBgView.isHidden = true
}
@ -138,7 +138,7 @@ class SPMemberRechargeCell: SPCollectionViewCell {
private lazy var tipLabel: UILabel = {
let label = UILabel()
label.font = .fontRegular(ofSize: 11)
label.text = "kBuyMemberTipText".localized
label.text = "movia_buy_menber_tip".localized
return label
}()

View File

@ -29,7 +29,7 @@ class SPMemberRechargeView: UIView {
let label = UILabel()
label.font = .fontRegular(ofSize: 14)
label.textColor = .colorFFFFFF(alpha: 0.7)
label.text = "Membership".localized
label.text = "movia_membership".localized
return label
}()

View File

@ -14,14 +14,14 @@ class SPRewardCoinsCell: SPTableViewCell {
timeLabel.text = model?.created_at
coinLabel.text = "+\(model?.coins ?? 0)"
remainingLabel.text = model?.left_coins
nameLabel.text = "Check in".localized
nameLabel.text = "movia_check_in".localized
let expireDate = Date(timeIntervalSince1970: model?.expired_time ?? 0)
let nowDate = Date()
let days = nowDate.dateDifference(date: expireDate)
if days > 0 {
expireLabel.text = String(format: "Expires in %@ days".localized, "\(days)")
expireLabel.text = String(format: "movia_expires_#_days".localized, "\(days)")
expireLabel.textColor = .colorFF3232()
expireIconImageView.isHidden = false

View File

@ -11,7 +11,7 @@ class SPVIPOrderRecordCell: SPTableViewCell {
var model: SPRechargeRecordModel? {
didSet {
titleLabel.text = "Purchase VIP".localized
titleLabel.text = "movia_purchase_VIP".localized
timeLabel.text = model?.created_at
dayLabel.text = model?.value
}

View File

@ -26,7 +26,7 @@ class SPNoNetworkEmptyView: UIView {
let label = UILabel()
label.font = .fontRegular(ofSize: 16)
label.textColor = .color967A7A()
label.text = "kNoNetworkTip_01".localized
label.text = "movia_network_tip_01".localized
return label
}()
@ -38,7 +38,7 @@ class SPNoNetworkEmptyView: UIView {
button.layer.borderColor = UIColor.colorFFFFFF().cgColor
button.jx_font = .fontRegular(ofSize: 18)
button.setTitleColor(.colorFFFFFF(), for: .normal)
button.setTitle("Retry".localized, for: .normal)
button.setTitle("movia_Retry".localized, for: .normal)
button.leftAndRightMargin = 33
button.addTarget(self, action: #selector(handleButton), for: .touchUpInside)
return button

View File

@ -35,7 +35,7 @@ class SPIAPManager: NSObject {
func startRecharge(model: SPPayTemplateItem, shortPlayId: String? = nil, videoId: String? = nil, handler: CompletionHandler? = nil) {
if let _ = self.waitRestoreModel {
SPToast.show(text: "kToastMessage_02".localized)
SPToast.show(text: "movia_iap_error_toast_03".localized)
handler?(false)
return
}
@ -82,7 +82,7 @@ class SPIAPManager: NSObject {
let receipt = waitRestoreModel.receipt
else {
if isLoding {
SPToast.show(text: "kToastMessage_01".localized)
SPToast.show(text: "movia_iap_error_toast_02".localized)
}
return
}
@ -176,7 +176,7 @@ extension SPIAPManager: JXIAPManagerDelegate {
SPHUD.dismiss()
if code == .noProduct {
SPToast.show(text: "Invalid in-app purchase".localized)
SPToast.show(text: "movia_iap_error_toast_01".localized)
}
self.completionHandler?(false)

View File

@ -5,12 +5,12 @@
"scale" : "1x"
},
{
"filename" : "Group 481@2x.png",
"filename" : "Vector@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Group 481@3x.png",
"filename" : "Vector@3x.png",
"idiom" : "universal",
"scale" : "3x"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

View File

@ -1,22 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Group 477@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Group 477@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

View File

@ -1,22 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Group 476@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Group 476@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

View File

@ -1,22 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Group 478@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Group 478@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

View File

@ -51,74 +51,87 @@
"movia_succeed" = "Succeed";
"movia_watch_history" = "Watch History";
"movia_child_protection_text" = "Child Personal Information Protection Rules";
"Youth Civilization Convention" = "Youth Civilization Convention";
"List of Third-Party Sharing of Personal Information" = "List of Third-Party Sharing of Personal Information";
"Explicit List of Personal Information Collection" = "Explicit List of Personal Information Collection";
"Log in" = "Log in";
"You are not a member yet" = "You are not a member yet";
"Activate" = "Activate";
"Members can enjoy" = "Members can enjoy";
"Unlimited access to all series" = "Unlimited access to all series";
"Stream Unlimited" = "Stream Unlimited";
"My wallet" = "My wallet";
"Store" = "Store";
"Rewards" = "Rewards";
"Details" = "Details";
"Consumption records" = "Consumption records";
"Purchase records" = "Purchase records";
"Reward Coins" = "Reward Coins";
"Coins Balance:" = "Coins Balance:";
"Membership" = "Membership";
"%@ Bonus" = "%@ Bonus";
"+ Extra %@" = "+ Extra %@";
"Clear Cache" = "Clear Cache";
"movia_civizatio_convention_text" = "Youth Internet Civility Convention";
"movia_information_sharing_text" = "Third-party information sharing list";
"movia_persoInfor_disclosure_text" = "Explicit List of Personal Information Collection";
"movia_profile_Log_in" = "Log in";
"movia_not_member_text" = "You are not a member yet";
"movia_activate" = "Activate";
"movia_members_can_enjoy" = "Members can enjoy";
"movia_not_member_tip_01" = "Unlimited access to all series";
"movia_stream_unlimited" = "Stream Unlimited";
"movia_profile_My_Wallet" = "My Wallet";
"movia_Store" = "Store";
"movia_rewards" = "Rewards";
"movia_details" = "Details";
"movia_Consumption_records" = "Consumption records";
"movia_Purchase_records" = "Purchase records";
"movia_Reward_Coins" = "Reward Coins";
"movia_coins_balance" = "Coins Balance";
"movia_membership" = "Membership";
"movia_bonus_#" = "%@ Bonus";
"movia_extra_#" = "+ Extra %@";
"movia_Clear_cache" = "Clear cache";
"DeleteAccount" = "Delete Account";
"Account Deletion" = "Account Deletion";
"Order Records" = "Order Records";
"Coin Record" = "Coin Record";
"VIP Record" = "VIP Record";
"Signout" = "Signout";
"Confirm logout?" = "Confirm logout?";
"Invalid in-app purchase" = "Invalid in-app purchase";
"VlP expiration time : %@" = "VlP expiration time : %@";
"Expires in %@ days" = "Expires in %@ days";
"movia_Account_Deletion" = "Account Deletion";
"movia_order_records" = "Order Records";
"movia_Coin_Record" = "Coin Record";
"movia_VIP_Record" = "VIP Record";
"movia_signout" = "Signout";
"movia_confirm_logout" = "Confirm logout?";
"movia_VlP_expiration_time_#" = "VlP expiration time : %@";
"movia_expires_#_days" = "Expires in %@ days";
"Expired" = "Expired";
"Check in" = "Check in";
"Recharge Coins" = "Recharge Coins";
"Purchase VIP" = "Purchase VIP";
"This episode is locked" = "This episode is locked";
"Unlock now for" = "Unlock now for";
"Unlock the previous episode" = "Unlock the previous episode";
"Purchase Single Episode" = "Purchase Single Episode";
"Retry" = "Retry";
"Open" = "Open";
"Later" = "Later";
"Allow" = "Allow";
"Feedback History" = "Feedback History";
"Feedback Details" = "Feedback Details";
"movia_check_in" = "Check in";
"movia_recharge_coins" = "Recharge Coins";
"movia_purchase_VIP" = "Purchase VIP";
"movia_video_lock_tip_01" = "This episode is locked";
"movia_video_lock_tip_02" = "Please unlock the previous episode";
"movia_unlock_now_for" = "Unlock now for";
"movia_Purchase_Single_Episode" = "Purchase Single Episode";
"movia_Retry" = "Retry";
"movia_open" = "Open";
"movia_open_notification_later" = "Later";
"movia_allow" = "Allow";
"movia_feedback_history" = "Feedback History";
"movia_feedback_details" = "Feedback Details";
"movia_Restore" = "Restore";
"movia_profile_Coins" = "Coins";
"movia_open_notification" = "Enable Notifications";
"movia_open_notification_info" = "Stay informed with popular recommendations and latest updates!";
"movia_iap_error_toast_01" = "Invalid in-app purchase";
///没有可恢复购买
"kToastMessage_01" = "There are no recoverable in-app purchases.";
"movia_iap_error_toast_02" = "There are no in-app purchases to restore.";
///还有未完成的内购
"kToastMessage_02" = "You still have unfinished in-app purchases. Please restore them first.";
///网络错误提示
"kToastMessage_03" = "The service is abnormal. Check the network.";
"movia_iap_error_toast_03" = "You have unfinished in-app purchases, please restore them first.";
///已是会员提示
"kToastMessage_04" = "You are already a member!";
"movia_member_toast_01" = "You are already a member!";
///请购买上一集提示
"kAlertMessage_01" = "The previous episode of this series has not been unlocked yet. Please unlock the previous episode first.";
"movia_jump_unlock_error" = "The prequel to this series is not unlocked. Please unlock the prequel before unlocking this series";
///没有找到视频提示
"kAlertMessage_02" = "Purchase failed, please try again later!";
///推送消息提示
"kAlertMessage_03" = "Enable Notifications";
"kAlertMessage_04" = "Stay informed with popular recommendations and latest updates!";
"movia_buy_fail_toast_01" = "Purchase failed, please try again later!";
///网络错误提示
"movia_network_toast_01" = "The service is abnormal. Check the network.";
"movia_network_tip_01" = "Connection error. Please try again!";
"kLoginAgreementText" = "By continuing, you agree to the User Agreement and Privacy Policy";
"kBuyMemberTipText" = "Auto renew · Cancel anytime";
"kStoreTipTitle" = "Related terms and conditions:";
"kStoreTipText" = "1. Coins can only be used within this application.2. Payment: The purchase will be charged to your iTunes account. 3. Renewal: Your Apple iTunes account will be charged within 24 hours before the expiration and the subscription period will be extended for another subscription cycle upon successful deduction.4. Cancellation: To cancel the subscription renewal, please turn off the automatic renewal function in the iTunes/Apple ID settings at least 24 hours before the current subscription period expires. If canceled within the last 24 hours before expiration, a subscription fee will still be charged. 5. Payment successful but recharge not taking effect for an extended period? Click here to refresh or send an email to: cs.jiaer.developer@icloud.com. 6. Manage your subscriptions: You can view, change, or cancel your subscriptions. ";
"kDeleteAccountCheckText" = "I accept the deletion risk and agree to delete my account";
"kNoNetworkTip_01" = "Connection error. Please try again!";
"movia_login_agreement_tip" = "By continuing, you agree to the %@ and %@";
"movia_buy_menber_tip" = "Auto renew · Cancel anytime";
"movia_store_tips_title_ios" = "Related terms and conditions:";
"movia_store_tips_ios" = "1. Coins can only be used within this application.\n2. Payment: The purchase will be charged to your iTunes account. \n3. Renewal: Your Apple iTunes account will be charged within 24 hours before the expiration and the subscription period will be extended for another subscription cycle upon successful deduction.\n4. Cancellation: To cancel the subscription renewal, please turn off the automatic renewal function in the iTunes/Apple ID settings at least 24 hours before the current subscription period expires. If canceled within the last 24 hours before expiration, a subscription fee will still be charged. \n5. Payment successful but recharge not taking effect for an extended period? Click here to refresh or send an email to: cs.jiaer.developer@icloud.com. \n6. Manage your subscriptions: You can view, change, or cancel your subscriptions. ";
"DeleteAccount_tips_1" = "Your account will be permanently deleted";
"DeleteAccount_tips_2" = "You will not be able to log in with this user ID";
"DeleteAccount_tips_3" = "Please log out of the account on other devices in time, otherwise the App on other devices will be unavailable.";
"DeleteAccount_tips_4" = "I accept the deletion risk and agree to delete my account";
"DeleteAccount_tips_5" = "All the following information will be deleted";
"DeleteAccount_tips_title_1" = "Account Data";
"DeleteAccount_tips_text_1" = "All your personal data will be deleted including username、Email address.";
"DeleteAccount_tips_title_2" = "Balance&VIP";
"DeleteAccount_tips_text_2" = "All your coins have been consumed and you can delete your account.";
"DeleteAccount_tips_title_3" = "History";
"DeleteAccount_tips_text_3" = "Consumption History, Recharge History, Chapter Unlock History, My Favorite.";
"DeleteAccount_tips_title_4" = "Third Party Account Information";