国际化功能开发
@ -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"))
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
}()
|
||||
|
@ -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,13 +92,13 @@ 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
|
||||
}()
|
||||
|
||||
private lazy var deleteButton: UIButton = {
|
||||
let button = UIButton(type: .custom)
|
||||
button.setTitle("Delete Account".localized, for: .normal)
|
||||
button.setTitle("DeleteAccount".localized, for: .normal)
|
||||
button.setTitleColor(.color8B8B8B(), for: .disabled)
|
||||
button.setTitleColor(.colorFFFFFF(), for: .normal)
|
||||
button.setBackgroundImage(UIImage(color: .color272A30()), for: .disabled)
|
||||
@ -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)
|
||||
|
||||
}
|
||||
|
@ -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: "Delete Account".localized))
|
||||
arr.append(SPMineItem(type: .logout, title: "Signout".localized))
|
||||
arr.append(SPMineItem(type: .deleteAccount, title: "DeleteAccount".localized))
|
||||
arr.append(SPMineItem(type: .logout, title: "movia_signout".localized))
|
||||
}
|
||||
|
||||
|
||||
|
90
MoviaBox/Class/Mine/View/SPDeleteAccountDetailTextView.swift
Normal 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)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
43
MoviaBox/Class/Mine/View/SPDeleteAccountNormalTextView.swift
Normal 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")
|
||||
}
|
||||
|
||||
}
|
24
MoviaBox/Class/Mine/View/SPDeleteAccountTextView.swift
Normal 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")
|
||||
}
|
||||
|
||||
}
|
90
MoviaBox/Class/Mine/View/SPDeleteAccountTipView.swift
Normal 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()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -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)
|
||||
|
@ -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
|
||||
}()
|
||||
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
@ -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)
|
||||
|
@ -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()
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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()
|
||||
|
@ -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()
|
||||
|
@ -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()
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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()
|
||||
}
|
||||
|
@ -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")"
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
}()
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
}()
|
||||
|
||||
|
@ -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
|
||||
}()
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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"
|
||||
}
|
BIN
MoviaBox/Source/Assets.xcassets/icon/delete_account_icon_01.imageset/Vector@2x.png
vendored
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
MoviaBox/Source/Assets.xcassets/icon/delete_account_icon_01.imageset/Vector@3x.png
vendored
Normal file
After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 8.0 KiB |
Before Width: | Height: | Size: 13 KiB |
@ -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
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 9.8 KiB |
@ -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
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 68 KiB |
@ -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
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 24 KiB |
@ -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";
|
||||
"Delete Account" = "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_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";
|
||||
"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";
|
||||
|
||||
|
||||
|