diff --git a/YuMi.xcodeproj/project.pbxproj b/YuMi.xcodeproj/project.pbxproj
index 8be1815..b4f5931 100644
--- a/YuMi.xcodeproj/project.pbxproj
+++ b/YuMi.xcodeproj/project.pbxproj
@@ -13560,7 +13560,7 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 7DB00EC07F1D0ADFF900B38D /* Pods-YuMi.debug.xcconfig */;
buildSettings = {
- APP_DISPLAY_NAME = "E-Parti DEBUG";
+ APP_DISPLAY_NAME = "E-Party DEBUG";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = YuMi/YuMi.entitlements;
@@ -13810,6 +13810,7 @@
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OBJC_BRIDGING_HEADER = "YuMi/YuMi-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
@@ -13821,7 +13822,7 @@
isa = XCBuildConfiguration;
baseConfigurationReference = B66633E061B1B34177CD011C /* Pods-YuMi.release.xcconfig */;
buildSettings = {
- APP_DISPLAY_NAME = "E-Parti";
+ APP_DISPLAY_NAME = "E-Party";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = YuMi/YuMiRelease.entitlements;
diff --git a/YuMi/E-P/Common/EPImageUploader.swift b/YuMi/E-P/Common/EPImageUploader.swift
index fa64aa2..98995bc 100644
--- a/YuMi/E-P/Common/EPImageUploader.swift
+++ b/YuMi/E-P/Common/EPImageUploader.swift
@@ -58,7 +58,7 @@ class EPImageUploader {
lock.unlock()
semaphore.signal()
DispatchQueue.main.async {
- failure("图片压缩失败")
+ failure(YMLocalizedString("error.image_compress_failed"))
}
return
}
diff --git a/YuMi/E-P/Common/EPProgressHUD.swift b/YuMi/E-P/Common/EPProgressHUD.swift
index e12059b..fcad5d3 100644
--- a/YuMi/E-P/Common/EPProgressHUD.swift
+++ b/YuMi/E-P/Common/EPProgressHUD.swift
@@ -35,13 +35,13 @@ import Foundation
if let hud = currentHUD {
// 更新现有 HUD
- hud.label.text = "上传中 \(uploaded)/\(total)"
+ hud.label.text = String(format: YMLocalizedString("upload.progress_format"), uploaded, total)
hud.progress = Float(uploaded) / Float(total)
} else {
// 创建新 HUD
let hud = MBProgressHUD.showAdded(to: window, animated: true)
hud.mode = .determinateHorizontalBar
- hud.label.text = "上传中 \(uploaded)/\(total)"
+ hud.label.text = String(format: YMLocalizedString("upload.progress_format"), uploaded, total)
hud.progress = Float(uploaded) / Float(total)
hud.removeFromSuperViewOnHide = true
currentHUD = hud
@@ -49,6 +49,36 @@ import Foundation
}
}
+ /// 显示错误提示
+ /// - Parameter message: 错误信息
+ @objc static func showError(_ message: String) {
+ DispatchQueue.main.async {
+ guard let window = keyWindow else { return }
+
+ let hud = MBProgressHUD.showAdded(to: window, animated: true)
+ hud.mode = .text
+ hud.label.text = message
+ hud.label.numberOfLines = 0
+ hud.removeFromSuperViewOnHide = true
+ hud.hide(animated: true, afterDelay: 2.0)
+ }
+ }
+
+ /// 显示成功提示
+ /// - Parameter message: 成功信息
+ @objc static func showSuccess(_ message: String) {
+ DispatchQueue.main.async {
+ guard let window = keyWindow else { return }
+
+ let hud = MBProgressHUD.showAdded(to: window, animated: true)
+ hud.mode = .text
+ hud.label.text = message
+ hud.label.numberOfLines = 0
+ hud.removeFromSuperViewOnHide = true
+ hud.hide(animated: true, afterDelay: 2.0)
+ }
+ }
+
/// 关闭 HUD
@objc static func dismiss() {
DispatchQueue.main.async {
diff --git a/YuMi/E-P/Common/EPSDKManager.swift b/YuMi/E-P/Common/EPSDKManager.swift
index be7c20f..4b4f27a 100644
--- a/YuMi/E-P/Common/EPSDKManager.swift
+++ b/YuMi/E-P/Common/EPSDKManager.swift
@@ -65,7 +65,7 @@ import Foundation
ensureQCloudReady { [weak self] isReady, errorMsg in
guard let self = self, isReady else {
DispatchQueue.main.async {
- failure(errorMsg ?? "QCloud 初始化失败")
+ failure(errorMsg ?? YMLocalizedString("error.qcloud_init_failed"))
}
return
}
@@ -164,7 +164,7 @@ import Foundation
self.qcloudInitCallbacks.removeAll()
self.lock.unlock()
- let errorMsg = msg ?? "获取 QCloud 配置失败"
+ let errorMsg = msg ?? YMLocalizedString("error.qcloud_config_failed")
DispatchQueue.main.async {
callbacks.forEach { $0(false, errorMsg) }
}
@@ -209,7 +209,7 @@ import Foundation
) {
guard let config = qcloudConfig else {
let error = NSError(domain: "com.yumi.qcloud", code: -1,
- userInfo: [NSLocalizedDescriptionKey: "QCloud 配置未初始化"])
+ userInfo: [NSLocalizedDescriptionKey: YMLocalizedString("error.qcloud_config_not_initialized")])
compelete(nil, error)
return
}
@@ -235,7 +235,7 @@ import Foundation
) {
guard let config = qcloudConfig else {
let error = NSError(domain: "com.yumi.qcloud", code: -1,
- userInfo: [NSLocalizedDescriptionKey: "QCloud 配置未初始化"])
+ userInfo: [NSLocalizedDescriptionKey: YMLocalizedString("error.qcloud_config_not_initialized")])
continueBlock(nil, error)
return
}
diff --git a/YuMi/E-P/NewLogin/Controllers/EPLoginViewController.swift b/YuMi/E-P/NewLogin/Controllers/EPLoginViewController.swift
index 03d0d0a..5f95010 100644
--- a/YuMi/E-P/NewLogin/Controllers/EPLoginViewController.swift
+++ b/YuMi/E-P/NewLogin/Controllers/EPLoginViewController.swift
@@ -33,6 +33,14 @@ import UIKit
override func viewDidLoad() {
super.viewDidLoad()
+
+ // 验证 DEBUG 编译条件
+ #if DEBUG
+ print("✅ [EPLogin] DEBUG 模式已激活")
+ #else
+ print("⚠️ [EPLogin] 当前为 Release 模式")
+ #endif
+
navigationController?.setNavigationBarHidden(true, animated: false)
setupUI()
loadPolicyStatus()
@@ -76,9 +84,9 @@ import UIKit
make.height.equalTo(EPLoginConfig.Layout.logoHeight)
}
- // E-PARTI 标题
+ // E-PARTY 标题
view.addSubview(epartiTitleLabel)
- epartiTitleLabel.text = "E-PARTI"
+ epartiTitleLabel.text = "E-PARTY"
epartiTitleLabel.font = .systemFont(ofSize: EPLoginConfig.Layout.epartiTitleFontSize, weight: .bold)
epartiTitleLabel.textColor = EPLoginConfig.Colors.textLight
epartiTitleLabel.transform = CGAffineTransform(a: 1, b: 0, c: -0.2, d: 1, tx: 0, ty: 0) // 斜体效果
@@ -160,6 +168,7 @@ import UIKit
}
private func setupNavigationBar() {
+#if DEBUG
view.addSubview(feedbackButton)
feedbackButton.setTitle(YMLocalizedString(EPLoginConfig.LocalizedKeys.feedback), for: .normal)
feedbackButton.titleLabel?.font = .systemFont(ofSize: EPLoginConfig.Layout.smallFontSize)
@@ -173,7 +182,6 @@ import UIKit
make.height.equalTo(EPLoginConfig.Layout.feedbackButtonHeight)
}
- #if DEBUG
view.addSubview(debugButton)
debugButton.setTitle("切换环境", for: .normal)
debugButton.setTitleColor(.blue, for: .normal)
@@ -183,7 +191,7 @@ import UIKit
make.leading.equalToSuperview().offset(EPLoginConfig.Layout.compactHorizontalPadding)
make.top.equalTo(view.safeAreaLayoutGuide).offset(8)
}
- #endif
+#endif // DEBUG
}
// MARK: - Actions
diff --git a/YuMi/E-P/NewLogin/Models/EPLoginConfig.swift b/YuMi/E-P/NewLogin/Models/EPLoginConfig.swift
index 1191fbf..d2f7cce 100644
--- a/YuMi/E-P/NewLogin/Models/EPLoginConfig.swift
+++ b/YuMi/E-P/NewLogin/Models/EPLoginConfig.swift
@@ -39,11 +39,11 @@ struct EPLoginConfig {
/// Logo 距离顶部的距离
static let logoTopOffset: CGFloat = 80
- /// E-PARTI 标题字号
+ /// E-PARTY 标题字号
static let epartiTitleFontSize: CGFloat = 56
- /// E-PARTI 标题距离 view leading
+ /// E-PARTY 标题距离 view leading
static let epartiTitleLeading: CGFloat = 40
- /// E-PARTI 标题距离 logoImage bottom 的偏移(负值表示向上)
+ /// E-PARTY 标题距离 logoImage bottom 的偏移(负值表示向上)
static let epartiTitleBottomOffset: CGFloat = -30
/// 输入框之间的垂直间距
diff --git a/YuMi/E-P/NewLogin/Services/EPLoginService.swift b/YuMi/E-P/NewLogin/Services/EPLoginService.swift
index 9ee2218..980f509 100644
--- a/YuMi/E-P/NewLogin/Services/EPLoginService.swift
+++ b/YuMi/E-P/NewLogin/Services/EPLoginService.swift
@@ -36,10 +36,10 @@ import Foundation
AccountInfoStorage.instance().saveAccountInfo(accountModel)
completion(accountModel)
} else {
- failure(Int(code), "账号信息解析失败")
+ failure(Int(code), YMLocalizedString("error.account_parse_failed"))
}
} else {
- failure(Int(code), "操作失败")
+ failure(Int(code), YMLocalizedString("error.operation_failed"))
}
}
@@ -61,10 +61,10 @@ import Foundation
let ticket = firstTicket["ticket"] as? String {
completion(ticket)
} else {
- failure(Int(code), "Ticket 解析失败")
+ failure(Int(code), YMLocalizedString("error.ticket_parse_failed"))
}
} else {
- failure(Int(code), msg ?? "请求 Ticket 失败")
+ failure(Int(code), msg ?? YMLocalizedString("error.request_ticket_failed"))
}
}, access_token: accessToken, issue_type: "multi")
}
@@ -89,7 +89,7 @@ import Foundation
if code == 200 {
completion()
} else {
- failure(Int(code), msg ?? "发送邮箱验证码失败")
+ failure(Int(code), msg ?? YMLocalizedString("error.send_email_code_failed"))
}
}, emailAddress: encryptedEmail, type: NSNumber(value: type))
}
@@ -114,7 +114,7 @@ import Foundation
if code == 200 {
completion()
} else {
- failure(Int(code), msg ?? "发送手机验证码失败")
+ failure(Int(code), msg ?? YMLocalizedString("error.send_phone_code_failed"))
}
}, mobile: encryptedPhone, type: String(type), phoneAreaCode: areaCode)
}
@@ -142,7 +142,7 @@ import Foundation
code: Int64(code),
completion: completion,
failure: { errorCode, _ in
- failure(errorCode, msg ?? "登录失败")
+ failure(errorCode, msg ?? YMLocalizedString("error.login_failed"))
})
},
phone: encryptedId,
@@ -173,7 +173,7 @@ import Foundation
code: Int64(code),
completion: completion,
failure: { errorCode, _ in
- failure(errorCode, msg ?? "登录失败")
+ failure(errorCode, msg ?? YMLocalizedString("error.login_failed"))
})
},
email: encryptedEmail,
@@ -206,7 +206,7 @@ import Foundation
code: Int64(code),
completion: completion,
failure: { errorCode, _ in
- failure(errorCode, msg ?? "登录失败")
+ failure(errorCode, msg ?? YMLocalizedString("error.login_failed"))
})
},
phone: encryptedPhone,
@@ -241,7 +241,7 @@ import Foundation
if code == 200 {
completion()
} else {
- failure(Int(code), msg ?? "重置密码失败")
+ failure(Int(code), msg ?? YMLocalizedString("error.reset_password_failed"))
}
}, email: encryptedEmail, newPwd: encryptedPassword, code: code)
}
@@ -269,7 +269,7 @@ import Foundation
if code == 200 {
completion()
} else {
- failure(Int(code), msg ?? "重置密码失败")
+ failure(Int(code), msg ?? YMLocalizedString("error.reset_password_failed"))
}
}, phone: encryptedPhone, newPwd: encryptedPassword, smsCode: code, phoneAreaCode: areaCode)
}
@@ -293,7 +293,7 @@ import Foundation
code: Int64(code),
completion: completion,
failure: { errorCode, _ in
- failure(errorCode, msg ?? "快速登录失败")
+ failure(errorCode, msg ?? YMLocalizedString("error.quick_login_failed"))
})
},
accessToken: accessToken,
diff --git a/YuMi/E-P/NewLogin/Views/EPPolicyLabel.swift b/YuMi/E-P/NewLogin/Views/EPPolicyLabel.swift
index 66ecbf1..ed48d0c 100644
--- a/YuMi/E-P/NewLogin/Views/EPPolicyLabel.swift
+++ b/YuMi/E-P/NewLogin/Views/EPPolicyLabel.swift
@@ -89,13 +89,35 @@ class EPPolicyLabel: UILabel {
textContainer.lineFragmentPadding = 0
textContainer.maximumNumberOfLines = numberOfLines
+ textContainer.lineBreakMode = lineBreakMode
let locationOfTouchInLabel = gesture.location(in: self)
let textBoundingBox = layoutManager.usedRect(for: textContainer)
- let textContainerOffset = CGPoint(x: (bounds.width - textBoundingBox.width) / 2,
- y: (bounds.height - textBoundingBox.height) / 2)
+
+ // 根据 textAlignment 计算偏移
+ var textContainerOffset = CGPoint.zero
+ switch textAlignment {
+ case .left, .natural, .justified:
+ textContainerOffset = CGPoint(x: 0, y: (bounds.height - textBoundingBox.height) / 2)
+ case .center:
+ textContainerOffset = CGPoint(x: (bounds.width - textBoundingBox.width) / 2,
+ y: (bounds.height - textBoundingBox.height) / 2)
+ case .right:
+ textContainerOffset = CGPoint(x: bounds.width - textBoundingBox.width,
+ y: (bounds.height - textBoundingBox.height) / 2)
+ @unknown default:
+ textContainerOffset = CGPoint(x: 0, y: (bounds.height - textBoundingBox.height) / 2)
+ }
+
let locationOfTouchInTextContainer = CGPoint(x: locationOfTouchInLabel.x - textContainerOffset.x,
y: locationOfTouchInLabel.y - textContainerOffset.y)
+
+ // 确保点击在文本区域内
+ guard textBoundingBox.contains(locationOfTouchInTextContainer) else {
+ print("[EPPolicyLabel] Tap outside text bounds")
+ return
+ }
+
let indexOfCharacter = layoutManager.characterIndex(for: locationOfTouchInTextContainer,
in: textContainer,
fractionOfDistanceBetweenInsertionPoints: nil)
diff --git a/YuMi/E-P/NewMine/Controllers/EPEditSettingViewController.swift b/YuMi/E-P/NewMine/Controllers/EPEditSettingViewController.swift
index 6906eab..e89c69b 100644
--- a/YuMi/E-P/NewMine/Controllers/EPEditSettingViewController.swift
+++ b/YuMi/E-P/NewMine/Controllers/EPEditSettingViewController.swift
@@ -338,7 +338,7 @@ class EPEditSettingViewController: BaseViewController {
self?.hideHUD()
// 显示错误提示
- let errorMsg = msg ?? "昵称更新失败,请稍后重试"
+ let errorMsg = msg ?? YMLocalizedString("setting.nickname_update_failed")
self?.showErrorToast(errorMsg)
print("[EPEditSetting] 昵称更新失败: \(code) - \(errorMsg)")
@@ -453,7 +453,7 @@ extension EPEditSettingViewController: UITableViewDataSource, UITableViewDelegat
// 添加用户昵称标签
let nicknameLabel = UILabel()
- nicknameLabel.text = userInfo?.nick ?? "未设置"
+ nicknameLabel.text = userInfo?.nick ?? YMLocalizedString("user.not_set")
nicknameLabel.textColor = .lightGray
nicknameLabel.font = UIFont.systemFont(ofSize: 16)
cell.contentView.addSubview(nicknameLabel)
@@ -576,8 +576,8 @@ extension EPEditSettingViewController: UIImagePickerControllerDelegate, UINaviga
// 显示错误提示
DispatchQueue.main.async {
- let alert = UIAlertController(title: "上传失败", message: errorMsg, preferredStyle: .alert)
- alert.addAction(UIAlertAction(title: "确定", style: .default))
+ let alert = UIAlertController(title: YMLocalizedString("common.upload_failed"), message: errorMsg, preferredStyle: .alert)
+ alert.addAction(UIAlertAction(title: YMLocalizedString("common.confirm"), style: .default))
self?.present(alert, animated: true)
}
}
@@ -599,13 +599,13 @@ extension EPEditSettingViewController: UIImagePickerControllerDelegate, UINaviga
print("[EPEditSetting] 头像更新失败: \(code) - \(msg ?? "未知错误")")
// 显示错误提示
- DispatchQueue.main.async {
- let alert = UIAlertController(
- title: "更新失败",
- message: msg ?? "头像更新失败,请稍后重试",
- preferredStyle: .alert
- )
- alert.addAction(UIAlertAction(title: "确定", style: .default))
+ DispatchQueue.main.async {
+ let alert = UIAlertController(
+ title: YMLocalizedString("common.update_failed"),
+ message: msg ?? YMLocalizedString("setting.avatar_update_failed"),
+ preferredStyle: .alert
+ )
+ alert.addAction(UIAlertAction(title: YMLocalizedString("common.confirm"), style: .default))
self?.present(alert, animated: true)
}
})
diff --git a/YuMi/E-P/NewMine/Views/EPMineHeaderView.m b/YuMi/E-P/NewMine/Views/EPMineHeaderView.m
index ccd14d5..9908d19 100644
--- a/YuMi/E-P/NewMine/Views/EPMineHeaderView.m
+++ b/YuMi/E-P/NewMine/Views/EPMineHeaderView.m
@@ -16,6 +16,9 @@
/// 头像视图
@property (nonatomic, strong) UIImageView *avatarImageView;
+/// 呼吸光晕层
+@property (nonatomic, strong) CALayer *glowLayer;
+
/// 昵称标签
@property (nonatomic, strong) UILabel *nicknameLabel;
@@ -36,13 +39,21 @@
return self;
}
+- (void)layoutSubviews {
+ [super layoutSubviews];
+
+ // 更新光晕层 frame(跟随头像位置)
+ if (self.glowLayer) {
+ self.glowLayer.frame = CGRectInset(self.avatarImageView.frame, -8, -8);
+ }
+}
+
- (void)setupUI {
// 大圆形头像
self.avatarImageView = [[UIImageView alloc] init];
self.avatarImageView.layer.cornerRadius = 60;
self.avatarImageView.layer.masksToBounds = NO; // 改为 NO 以显示阴影
- self.avatarImageView.layer.borderWidth = 3;
- self.avatarImageView.layer.borderColor = [UIColor whiteColor].CGColor;
+ self.avatarImageView.layer.borderWidth = 0; // 移除边框
self.avatarImageView.backgroundColor = [UIColor whiteColor];
self.avatarImageView.contentMode = UIViewContentModeScaleAspectFill;
@@ -100,7 +111,7 @@
- (void)updateWithUserInfo:(NSDictionary *)userInfoDict {
// 更新昵称
- NSString *nickname = userInfoDict[@"nickname"] ?: @"未设置昵称";
+ NSString *nickname = userInfoDict[@"nickname"] ?: YMLocalizedString(@"user.nickname_not_set");
self.nicknameLabel.text = nickname;
// 更新 ID
@@ -129,9 +140,8 @@
// 有专属颜色,使用该颜色
UIColor *color = [self colorFromHex:signatureColor];
- // 设置边框颜色
- self.avatarImageView.layer.borderColor = color.CGColor;
- self.avatarImageView.layer.borderWidth = 4; // 稍微加粗边框
+ // 取消边框
+ self.avatarImageView.layer.borderWidth = 0;
// 设置阴影(使用情绪颜色)
self.avatarImageView.layer.shadowColor = color.CGColor;
@@ -140,19 +150,75 @@
self.avatarImageView.layer.shadowRadius = 12;
NSLog(@"[EPMineHeaderView] 应用专属颜色: %@", signatureColor);
+
+ // 应用呼吸光晕动效 ⭐
+ [self applyBreathingGlow];
} else {
- // 没有专属颜色,使用默认白色边框
- self.avatarImageView.layer.borderColor = [UIColor whiteColor].CGColor;
- self.avatarImageView.layer.borderWidth = 3;
+ // 没有专属颜色,保持无边框
+ self.avatarImageView.layer.borderWidth = 0;
// 默认轻微阴影
self.avatarImageView.layer.shadowColor = [UIColor blackColor].CGColor;
self.avatarImageView.layer.shadowOffset = CGSizeMake(0, 2);
self.avatarImageView.layer.shadowOpacity = 0.2;
self.avatarImageView.layer.shadowRadius = 8;
+
+ // 移除光晕层
+ if (self.glowLayer) {
+ [self.glowLayer removeFromSuperlayer];
+ self.glowLayer = nil;
+ }
}
}
+/// 应用呼吸光晕动效
+- (void)applyBreathingGlow {
+ NSString *signatureColor = [EPEmotionColorStorage userSignatureColor];
+ if (!signatureColor) return;
+
+ UIColor *color = [self colorFromHex:signatureColor];
+
+ // 创建光晕层(如果不存在)
+ if (!self.glowLayer) {
+ self.glowLayer = [CALayer layer];
+ self.glowLayer.frame = CGRectInset(self.avatarImageView.frame, -8, -8); // 比头像大 16pt
+ self.glowLayer.cornerRadius = 68; // 头像 60 + 扩展 8
+ self.glowLayer.backgroundColor = [color colorWithAlphaComponent:0.75].CGColor; // 大幅加深
+
+ // 插入到头像 layer 下方
+ [self.layer insertSublayer:self.glowLayer below:self.avatarImageView.layer];
+ } else {
+ // 更新颜色
+ self.glowLayer.backgroundColor = [color colorWithAlphaComponent:0.75].CGColor; // 大幅加深
+ }
+
+ // 移除旧动画
+ [self.glowLayer removeAllAnimations];
+
+ // 创建呼吸动画组
+ CAAnimationGroup *breathingGroup = [CAAnimationGroup animation];
+ breathingGroup.duration = 1.8; // 加速
+ breathingGroup.repeatCount = HUGE_VALF; // 无限循环
+ breathingGroup.autoreverses = YES;
+ breathingGroup.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
+
+ // 动画 1:透明度变化(呼吸亮度)
+ CABasicAnimation *opacityAnim = [CABasicAnimation animationWithKeyPath:@"opacity"];
+ opacityAnim.fromValue = @(0.65);
+ opacityAnim.toValue = @(1.0); // 接近完全不透明,颜色饱和
+
+ // 动画 2:缩放变化(呼吸扩散)
+ CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
+ scaleAnim.fromValue = @(1.0);
+ scaleAnim.toValue = @(1.1);
+
+ breathingGroup.animations = @[opacityAnim, scaleAnim];
+
+ [self.glowLayer addAnimation:breathingGroup forKey:@"breathing"];
+
+ NSLog(@"[EPMineHeaderView] 启动呼吸光晕动效");
+}
+
/// Hex 转 UIColor
- (UIColor *)colorFromHex:(NSString *)hexString {
unsigned rgbValue = 0;
diff --git a/YuMi/E-P/NewMoments/Controllers/EPMomentPublishViewController.m b/YuMi/E-P/NewMoments/Controllers/EPMomentPublishViewController.m
index 1b67b4d..dc0a8bb 100644
--- a/YuMi/E-P/NewMoments/Controllers/EPMomentPublishViewController.m
+++ b/YuMi/E-P/NewMoments/Controllers/EPMomentPublishViewController.m
@@ -200,8 +200,7 @@ NSString *const EPMomentPublishSuccessNotification = @"EPMomentPublishSuccessNot
// 验证:文本或图片至少有一项
if (self.textView.text.length == 0 && self.images.count == 0) {
- // TODO: 显示错误提示 "请输入内容或选择图片"
- NSLog(@"请输入内容或选择图片");
+ [EPProgressHUD showError:YMLocalizedString(@"publish.content_or_image_required")];
return;
}
@@ -336,7 +335,7 @@ NSString *const EPMomentPublishSuccessNotification = @"EPMomentPublishSuccessNot
- (UILabel *)titleLabel {
if (!_titleLabel) {
_titleLabel = [UILabel new];
- _titleLabel.text = @"图文发布";
+ _titleLabel.text = YMLocalizedString(@"publish.title");
_titleLabel.textColor = [UIColor whiteColor]; // 白色适配深色背景
_titleLabel.font = [UIFont systemFontOfSize:17];
}
@@ -345,7 +344,7 @@ NSString *const EPMomentPublishSuccessNotification = @"EPMomentPublishSuccessNot
- (UIButton *)publishButton {
if (!_publishButton) {
_publishButton = [UIButton buttonWithType:UIButtonTypeCustom];
- [_publishButton setTitle:@"发布" forState:UIControlStateNormal];
+ [_publishButton setTitle:YMLocalizedString(@"common.publish") forState:UIControlStateNormal];
[_publishButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
_publishButton.titleLabel.font = [UIFont systemFontOfSize:17 weight:UIFontWeightMedium];
_publishButton.layer.cornerRadius = 25;
diff --git a/YuMi/E-P/NewMoments/Controllers/EPMomentViewController.m b/YuMi/E-P/NewMoments/Controllers/EPMomentViewController.m
index 3481c5c..9e2cb75 100644
--- a/YuMi/E-P/NewMoments/Controllers/EPMomentViewController.m
+++ b/YuMi/E-P/NewMoments/Controllers/EPMomentViewController.m
@@ -85,7 +85,7 @@
UIImage *addIcon = [UIImage imageNamed:@"icon_moment_add"];
UIButton *publishButton = [UIButton buttonWithType:UIButtonTypeCustom];
[publishButton setImage:addIcon forState:UIControlStateNormal];
- publishButton.frame = CGRectMake(0, 0, 40, 50);
+ publishButton.frame = CGRectMake(0, 0, 40, 40);
[publishButton addTarget:self action:@selector(onPublishButtonTapped) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *publishItem = [[UIBarButtonItem alloc] initWithCustomView:publishButton];
self.navigationItem.rightBarButtonItem = publishItem;
@@ -105,10 +105,10 @@
}
- (void)showAlertWithMessage:(NSString *)message {
- UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示"
+ UIAlertController *alert = [UIAlertController alertControllerWithTitle:YMLocalizedString(@"common.tips")
message:message
preferredStyle:UIAlertControllerStyleAlert];
- [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil]];
+ [alert addAction:[UIAlertAction actionWithTitle:YMLocalizedString(@"common.confirm") style:UIAlertActionStyleDefault handler:nil]];
[self presentViewController:alert animated:YES completion:nil];
}
@@ -133,7 +133,7 @@
__weak typeof(self) weakSelf = self;
_listView.onSelectMoment = ^(NSInteger index) {
__strong typeof(weakSelf) self = weakSelf;
- [self showAlertWithMessage:[NSString stringWithFormat:@"点击了第 %ld 条动态", (long)index]];
+ [self showAlertWithMessage:[NSString stringWithFormat:YMLocalizedString(@"moment.item_clicked"), (long)index]];
};
}
return _listView;
diff --git a/YuMi/E-P/NewMoments/Services/EPMomentAPISwiftHelper.swift b/YuMi/E-P/NewMoments/Services/EPMomentAPISwiftHelper.swift
index ad6aa06..083c451 100644
--- a/YuMi/E-P/NewMoments/Services/EPMomentAPISwiftHelper.swift
+++ b/YuMi/E-P/NewMoments/Services/EPMomentAPISwiftHelper.swift
@@ -37,7 +37,7 @@ import Foundation
completion([], "")
}
} else {
- failure(Int(code), msg ?? "请求失败")
+ failure(Int(code), msg ?? YMLocalizedString("error.request_failed"))
}
}, dynamicId: nextID, pageSize: pageSize, types: types)
}
@@ -57,7 +57,7 @@ import Foundation
failure: @escaping (Int, String) -> Void
) {
guard let uid = AccountInfoStorage.instance().getUid() else {
- failure(-1, "用户未登录")
+ failure(-1, YMLocalizedString("error.not_logged_in"))
return
}
@@ -70,7 +70,7 @@ import Foundation
if code == 200 {
completion()
} else {
- failure(Int(code), msg ?? "发布失败")
+ failure(Int(code), msg ?? YMLocalizedString("error.publish_failed"))
}
}, uid: uid, type: type, worldId: "", content: content, resList: resList)
}
@@ -92,7 +92,7 @@ import Foundation
failure: @escaping (Int, String) -> Void
) {
guard let uid = AccountInfoStorage.instance().getUid() else {
- failure(-1, "用户未登录")
+ failure(-1, YMLocalizedString("error.not_logged_in"))
return
}
@@ -103,7 +103,7 @@ import Foundation
if code == 200 {
completion()
} else {
- failure(Int(code), msg ?? "点赞操作失败")
+ failure(Int(code), msg ?? YMLocalizedString("error.like_failed"))
}
}, dynamicId: dynamicId, uid: uid, status: status, likedUid: likedUid, worldId: worldIdStr)
}
diff --git a/YuMi/E-P/NewMoments/Views/EPMomentCell.m b/YuMi/E-P/NewMoments/Views/EPMomentCell.m
index 81b0c5f..3a9d44b 100644
--- a/YuMi/E-P/NewMoments/Views/EPMomentCell.m
+++ b/YuMi/E-P/NewMoments/Views/EPMomentCell.m
@@ -21,6 +21,9 @@
/// 卡片容器
@property (nonatomic, strong) UIView *cardView;
+/// 彩色背景层(毛玻璃下方)
+@property (nonatomic, strong) UIView *colorBackgroundView;
+
/// 毛玻璃效果视图
@property (nonatomic, strong) UIVisualEffectView *blurEffectView;
@@ -83,7 +86,13 @@
make.bottom.equalTo(self.contentView).offset(-8);
}];
- // 毛玻璃效果视图
+ // 彩色背景层(最底层)
+ [self.cardView addSubview:self.colorBackgroundView];
+ [self.colorBackgroundView mas_makeConstraints:^(MASConstraintMaker *make) {
+ make.edges.equalTo(self.cardView);
+ }];
+
+ // 毛玻璃效果视图(在彩色背景层之上)
[self.cardView addSubview:self.blurEffectView];
[self.blurEffectView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.cardView);
@@ -153,7 +162,7 @@
self.currentModel = model;
// 配置用户名
- self.nameLabel.text = model.nick ?: @"匿名用户";
+ self.nameLabel.text = model.nick ?: YMLocalizedString(@"user.anonymous");
// 配置时间(将时间戳转换为 MM/dd 格式)
self.timeLabel.text = [self formatTimestampToDate:model.publishTime];
@@ -176,20 +185,21 @@
[self applyEmotionColorEffect:model.emotionColor];
}
-/// 应用情绪颜色视觉效果(Border + Shadow)
+/// 应用情绪颜色视觉效果(Background + Shadow)
- (void)applyEmotionColorEffect:(NSString *)emotionColorHex {
- NSString *displayColorHex = emotionColorHex;
-
- // 如果没有保存的颜色,使用随机颜色(不持久化)
- if (!displayColorHex) {
- displayColorHex = [EPEmotionColorStorage randomEmotionColor];
+ // 获取颜色(已在列表加载时处理,这里直接使用)
+ if (!emotionColorHex) {
+ NSLog(@"[EPMomentCell] 警告:emotionColorHex 为 nil");
+ return;
}
- UIColor *color = [self colorFromHex:displayColorHex];
+ UIColor *color = [self colorFromHex:emotionColorHex];
- // 设置 border
- self.cardView.layer.borderWidth = 3.0;
- self.cardView.layer.borderColor = color.CGColor;
+ // 移除边框
+ self.cardView.layer.borderWidth = 0;
+
+ // 设置彩色背景(50% 透明度,在毛玻璃下方)
+ self.colorBackgroundView.backgroundColor = [color colorWithAlphaComponent:0.5];
// 设置 shadow(使用情绪颜色)
self.cardView.layer.shadowColor = color.CGColor;
@@ -295,18 +305,18 @@
/// 格式化时间戳为相对时间
- (NSString *)formatTimeInterval:(NSInteger)timestamp {
- if (timestamp <= 0) return @"刚刚";
+ if (timestamp <= 0) return YMLocalizedString(@"time.just_now");
NSTimeInterval interval = [[NSDate date] timeIntervalSince1970] - timestamp / 1000.0;
if (interval < 60) {
- return @"刚刚";
+ return YMLocalizedString(@"time.just_now");
} else if (interval < 3600) {
- return [NSString stringWithFormat:@"%.0f分钟前", interval / 60];
+ return [NSString stringWithFormat:YMLocalizedString(@"time.minutes_ago"), interval / 60];
} else if (interval < 86400) {
- return [NSString stringWithFormat:@"%.0f小时前", interval / 3600];
+ return [NSString stringWithFormat:YMLocalizedString(@"time.hours_ago"), interval / 3600];
} else if (interval < 604800) {
- return [NSString stringWithFormat:@"%.0f天前", interval / 86400];
+ return [NSString stringWithFormat:YMLocalizedString(@"time.days_ago"), interval / 86400];
} else {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd";
@@ -415,14 +425,23 @@
- (UIView *)cardView {
if (!_cardView) {
_cardView = [[UIView alloc] init];
- _cardView.backgroundColor = [UIColor clearColor]; // 透明背景,毛玻璃效果由 blurEffectView 提供
+ _cardView.backgroundColor = [UIColor clearColor]; // 透明背景,颜色由 colorBackgroundView 提供
_cardView.layer.cornerRadius = 12; // 圆角
- // Shadow 和 Border 将由 applyEmotionColorEffect 动态设置
+ // Shadow 将由 applyEmotionColorEffect 动态设置
_cardView.layer.masksToBounds = NO;
}
return _cardView;
}
+- (UIView *)colorBackgroundView {
+ if (!_colorBackgroundView) {
+ _colorBackgroundView = [[UIView alloc] init];
+ _colorBackgroundView.layer.cornerRadius = 12;
+ _colorBackgroundView.layer.masksToBounds = YES;
+ }
+ return _colorBackgroundView;
+}
+
- (UIVisualEffectView *)blurEffectView {
if (!_blurEffectView) {
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
diff --git a/YuMi/E-P/NewMoments/Views/EPMomentListView.m b/YuMi/E-P/NewMoments/Views/EPMomentListView.m
index af72d53..d5f6fee 100644
--- a/YuMi/E-P/NewMoments/Views/EPMomentListView.m
+++ b/YuMi/E-P/NewMoments/Views/EPMomentListView.m
@@ -154,8 +154,13 @@
NSString *savedColor = [EPEmotionColorStorage colorForDynamicId:model.dynamicId];
if (savedColor) {
model.emotionColor = savedColor;
+ } else {
+ // 无保存颜色,生成随机颜色并立即持久化
+ NSString *randomColor = [EPEmotionColorStorage randomEmotionColor];
+ model.emotionColor = randomColor;
+ [EPEmotionColorStorage saveColor:randomColor forDynamicId:model.dynamicId];
+ NSLog(@"[EPMomentListView] 为动态 %@ 分配随机颜色: %@", model.dynamicId, randomColor);
}
- // 不设置则保持 nil,Cell 渲染时会随机生成
}
}
@@ -219,7 +224,7 @@
// MJRefresh Footer - 加载更多
__weak typeof(self) weakSelf = self;
- _tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
+ MJRefreshAutoNormalFooter *footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
__strong typeof(weakSelf) self = weakSelf;
if (!self.isLoading && self.nextID.length > 0) {
[self requestNextPage];
@@ -229,6 +234,10 @@
[self.tableView.mj_footer endRefreshing];
}
}];
+ // 设置白色文字和指示器
+ footer.stateLabel.textColor = [UIColor whiteColor];
+ footer.loadingView.color = [UIColor whiteColor];
+ _tableView.mj_footer = footer;
}
return _tableView;
}
@@ -236,6 +245,7 @@
- (UIRefreshControl *)refreshControl {
if (!_refreshControl) {
_refreshControl = [[UIRefreshControl alloc] init];
+ _refreshControl.tintColor = [UIColor whiteColor]; // 白色加载指示器
[_refreshControl addTarget:self action:@selector(reloadFirstPage) forControlEvents:UIControlEventValueChanged];
}
return _refreshControl;
diff --git a/YuMi/E-P/NewTabBar/EPTabBarController.swift b/YuMi/E-P/NewTabBar/EPTabBarController.swift
index ceda0e7..110ff47 100644
--- a/YuMi/E-P/NewTabBar/EPTabBarController.swift
+++ b/YuMi/E-P/NewTabBar/EPTabBarController.swift
@@ -197,7 +197,7 @@ import SnapKit
selectedIndex = newIndex
}
- let tabNames = ["动态", "我的"]
+ let tabNames = [YMLocalizedString("tab.moment"), YMLocalizedString("tab.mine")]
NSLog("[EPTabBarController] 选中 Tab: \(tabNames[newIndex])")
}
@@ -254,7 +254,7 @@ import SnapKit
let blankVC1 = UIViewController()
blankVC1.view.backgroundColor = .white
blankVC1.tabBarItem = createTabBarItem(
- title: "动态",
+ title: YMLocalizedString("tab.moment"),
normalImage: "tab_moment_normal",
selectedImage: "tab_moment_selected"
)
@@ -262,7 +262,7 @@ import SnapKit
let blankVC2 = UIViewController()
blankVC2.view.backgroundColor = .white
blankVC2.tabBarItem = createTabBarItem(
- title: "我的",
+ title: YMLocalizedString("tab.mine"),
normalImage: "tab_mine_normal",
selectedImage: "tab_mine_selected"
)
@@ -313,20 +313,20 @@ import SnapKit
// 创建动态页
let momentVC = EPMomentViewController()
- momentVC.title = "动态"
+ momentVC.title = YMLocalizedString("tab.moment")
let momentNav = createTransparentNavigationController(
rootViewController: momentVC,
- tabTitle: "动态",
+ tabTitle: YMLocalizedString("tab.moment"),
normalImage: "tab_moment_normal",
selectedImage: "tab_moment_selected"
)
// 创建我的页
let mineVC = EPMineViewController()
- mineVC.title = "我的"
+ mineVC.title = YMLocalizedString("tab.mine")
let mineNav = createTransparentNavigationController(
rootViewController: mineVC,
- tabTitle: "我的",
+ tabTitle: YMLocalizedString("tab.mine"),
normalImage: "tab_mine_normal",
selectedImage: "tab_mine_selected"
)
diff --git a/YuMi/Info.plist b/YuMi/Info.plist
index 5f998fa..98d2155 100644
--- a/YuMi/Info.plist
+++ b/YuMi/Info.plist
@@ -57,7 +57,7 @@
FacebookClientToken
189d1a90712cc61cedded4cf1372cb21
FacebookDisplayName
- E-Parti
+ E-Party
ITSAppUsesNonExemptEncryption
LSApplicationQueriesSchemes
@@ -96,17 +96,17 @@
NSCameraUsageDescription
- "E-Parti"需要您的同意,才可以访问进行拍照并上传您的图片,然后展示在您的个人主页上,便于他人查看
+ "E-Party"需要您的同意,才可以访问进行拍照并上传您的图片,然后展示在您的个人主页上,便于他人查看
NSLocalNetworkUsageDescription
此App将可发现和连接到您所用网络上的设备。
NSLocationWhenInUseUsageDescription
- "E-Parti"需要您的同意,才可以进行定位服务,推荐附近好友
+ "E-Party"需要您的同意,才可以进行定位服务,推荐附近好友
NSMicrophoneUsageDescription
- "E-Parti"需要您的同意,才可以进行语音聊天
+ "E-Party"需要您的同意,才可以进行语音聊天
NSPhotoLibraryAddUsageDescription
- "E-Parti"需要您的同意,才可以存储相片到相册
+ "E-Party"需要您的同意,才可以存储相片到相册
NSPhotoLibraryUsageDescription
- "E-Parti"需要您的同意,才可以访问相册并选择您需要上传的图片,然后展示在您的个人主页上,便于他人查看
+ "E-Party"需要您的同意,才可以访问相册并选择您需要上传的图片,然后展示在您的个人主页上,便于他人查看
NSUserTrackingUsageDescription
請允許我們獲取您的IDFA權限,可以為您提供個性化活動和服務。未經您的允許,您的信息將不作其他用途。
UIApplicationSupportsIndirectInputEvents
diff --git a/YuMi/Modules/YMLogin/View/NewLogin/XPLoginPhoneViewController.m b/YuMi/Modules/YMLogin/View/NewLogin/XPLoginPhoneViewController.m
index 4d0041f..55bcbca 100644
--- a/YuMi/Modules/YMLogin/View/NewLogin/XPLoginPhoneViewController.m
+++ b/YuMi/Modules/YMLogin/View/NewLogin/XPLoginPhoneViewController.m
@@ -274,7 +274,7 @@
- (UILabel *)titleLabel {
if (!_titleLabel) {
_titleLabel = [[UILabel alloc] init];
- _titleLabel.text = @"Welcome to E-Parti!";
+ _titleLabel.text = @"Welcome to E-Party!";
_titleLabel.font = kFontBold(28);
_titleLabel.textColor = UIColorFromRGB(0x1F1B4F);
}
diff --git a/YuMi/Tools/Share/ShareHelder.m b/YuMi/Tools/Share/ShareHelder.m
index 5468f2c..921c372 100644
--- a/YuMi/Tools/Share/ShareHelder.m
+++ b/YuMi/Tools/Share/ShareHelder.m
@@ -108,7 +108,7 @@ static __weak UIViewController *_presentingVC = nil;
NSMutableArray *shareItems = [NSMutableArray array];
// 1. 添加纯文本(用于备忘录等文本应用)
- NSString *plainText = [NSString stringWithFormat:@"🎵 发现精彩内容\n\n%@\n\n🔗 %@\n\n—— 来自 E-Parti ——",
+ NSString *plainText = [NSString stringWithFormat:@"🎵 发现精彩内容\n\n%@\n\n🔗 %@\n\n—— 来自 E-Party ——",
subtitle, url.absoluteString ?: @""];
[shareItems addObject:plainText];
@@ -219,8 +219,8 @@ static __weak UIViewController *_presentingVC = nil;
// 1. 准备分享内容
NSString *title = @"🎵 Apple Music 专辑推荐:Imagine Dragons";
- NSString *subtitle = @"来自E-Parti的精彩推荐";
- NSString *appName = @"E-Parti";
+ NSString *subtitle = @"来自E-Party的精彩推荐";
+ NSString *appName = @"E-Party";
NSURL *albumURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@", API_HOST_URL, urlString]];
UIImage *albumImage = image;
diff --git a/YuMi/Tools/Share/ShareProvider.m b/YuMi/Tools/Share/ShareProvider.m
index 0ca77b2..635d5a2 100644
--- a/YuMi/Tools/Share/ShareProvider.m
+++ b/YuMi/Tools/Share/ShareProvider.m
@@ -21,7 +21,7 @@
if (self) {
_title = title ?: @"";
_subtitle = subtitle ?: @"";
- _appName = appName ?: @"E-Parti";
+ _appName = appName ?: @"E-Party";
_url = url;
_image = image;
_appIcon = appIcon;
diff --git a/YuMi/ar.lproj/Localizable.strings b/YuMi/ar.lproj/Localizable.strings
index f2a5c53..3045889 100644
--- a/YuMi/ar.lproj/Localizable.strings
+++ b/YuMi/ar.lproj/Localizable.strings
@@ -689,7 +689,7 @@
"XPLoginPwdViewController4" = "تسجيل الدخول برقم الهاتف";
"XPLoginPwdViewController5" = "نسيت كلمة المرور";
-"XPLoginPwdViewController6" = "الرجاء إدخال حساب E-Parti";
+"XPLoginPwdViewController6" = "الرجاء إدخال حساب E-Party";
"XPLoginBindPhoneResultViewController0" = "ربط الهاتف";
"XPLoginBindPhoneResultViewController1" = "رقم الهاتف المرتبط حاليًا هو";
@@ -727,7 +727,7 @@
"XPShareView5" = "فشلت عملية المشاركة";
"XPShareView6" = "إلغاء المشاركة";
"XPShareView7" = "إلغاء";
-"XPShareView8" = "تعال إلى E-Parti واكتشف صوتك الخاص";
+"XPShareView8" = "تعال إلى E-Party واكتشف صوتك الخاص";
"XPShareView9" = "التطبيق غير مثبت، فشلت عملية المشاركة";
///XPFirstRechargeViewController.m
@@ -1904,7 +1904,7 @@ ineHeadView12" = "الحمل";
"RoomHeaderView2" = "متصل: %ld ID: %ld";
"RoomHeaderView3" = "نسخ الرابط";
-"RoomHeaderView4" = "تعال إلى E-Parti، ولنلعب ونتعارف ونلعب ألعابًا";
+"RoomHeaderView4" = "تعال إلى E-Party، ولنلعب ونتعارف ونلعب ألعابًا";
"RoomHeaderView5" = "شخص جميل وصوت حلو يحقق الانتصارات، هيا لنلعب معًا~";
"RoomHeaderView6" = "تمت الإضافة للمفضلة بنجاح";
"RoomHeaderView7" = "تمت المشاركة بنجاح";
@@ -2883,7 +2883,7 @@ ineHeadView12" = "الحمل";
"XPLoginPwdViewController3" = "من فضلك إدخل الرقم السري";
"XPLoginPwdViewController4" = "تسجيل الدخول باستخدام رقم الهاتف";
"XPLoginPwdViewController5" = "نسيت كلمة المرور";
-"XPLoginPwdViewController6" = "الرجاء إدخال حساب E-Parti الخاص بك";
+"XPLoginPwdViewController6" = "الرجاء إدخال حساب E-Party الخاص بك";
"XPLoginBindPhoneResultViewController0" = "ربط الهاتف";
"XPLoginBindPhoneResultViewController1" = "رقم الهاتف المرتبط بك حاليًا هو";
@@ -3623,7 +3623,7 @@ ineHeadView12" = "الحمل";
"PIMessageContentServiceReplyView0"="كيفية الشحن:";
"PIMessageContentServiceReplyView1"="نسخ";
-"PIMessageContentServiceReplyView2"="1. للصوت - 【الشحن بالعملات】 للقيام بشحن الرصيد E-Parti اذهب إلى قسم 【الخاص بي】 داخل تطبيق";
+"PIMessageContentServiceReplyView2"="1. للصوت - 【الشحن بالعملات】 للقيام بشحن الرصيد E-Party اذهب إلى قسم 【الخاص بي】 داخل تطبيق";
"PIMessageContentServiceReplyView3"="2. ٢. اتصل بخدمة العملاء";
"PIMessageContentServiceReplyView4"="WeChat لخدمة العملاء: %@ ";
"PIMessageContentServiceReplyView5"="Line لخدمة العملاء: %@ ";
@@ -4120,7 +4120,7 @@ ineHeadView12" = "الحمل";
"1.0.37_text_52" = "لا يمكنك استخدام هذه الميزة.";
"20.20.51_text_1" = "تسجيل الدخول بالبريد الإلكتروني";
-"20.20.51_text_2" = "Welcome to E-Parti";
+"20.20.51_text_2" = "Welcome to E-Party";
"20.20.51_text_3" = "الرجاء إدخال المعرف";
"20.20.51_text_4" = "يرجى إدخال البريد الإلكتروني";
"20.20.51_text_7" = "يرجى إدخال رمز التحقق";
diff --git a/YuMi/en.lproj/InfoPlist.strings b/YuMi/en.lproj/InfoPlist.strings
index f3642bb..007534c 100644
--- a/YuMi/en.lproj/InfoPlist.strings
+++ b/YuMi/en.lproj/InfoPlist.strings
@@ -1,9 +1,9 @@
-NSCameraUsageDescription ="\"E-Parti\" needs your consent before you can visit, take photos and upload your pictures, and then display them on your personal homepage for others to view";
+NSCameraUsageDescription ="\"E-Party\" needs your consent before you can visit, take photos and upload your pictures, and then display them on your personal homepage for others to view";
NSLocalNetworkUsageDescription ="The app will discover and connect to devices on your network";
NSLocationWhenInUseUsageDescription = "Your consent is required before you can use location services and recommend nearby friends";
-NSMicrophoneUsageDescription = "\"E-Parti\" needs your consent before it can conduct voice chat";
-NSPhotoLibraryAddUsageDescription = "\"E-Parti\" needs your consent before it can store photos in the album";
-NSPhotoLibraryUsageDescription = "\"E-Parti\" needs your consent before you can access the album and select the pictures you need to upload, and then display them on your personal homepage for others to view";
+NSMicrophoneUsageDescription = "\"E-Party\" needs your consent before it can conduct voice chat";
+NSPhotoLibraryAddUsageDescription = "\"E-Party\" needs your consent before it can store photos in the album";
+NSPhotoLibraryUsageDescription = "\"E-Party\" needs your consent before you can access the album and select the pictures you need to upload, and then display them on your personal homepage for others to view";
NSUserTrackingUsageDescription = "Please allow us to obtain your idfa permission to provide you with personalized activities and services. your information will not be used for other purposes without your permission";
diff --git a/YuMi/en.lproj/Localizable.strings b/YuMi/en.lproj/Localizable.strings
index 119b40c..a01bc66 100644
--- a/YuMi/en.lproj/Localizable.strings
+++ b/YuMi/en.lproj/Localizable.strings
@@ -393,7 +393,7 @@
"XPLoginPwdViewController4" = "Phone number login";
"XPLoginPwdViewController5" = "Forgot password";
-"XPLoginPwdViewController6" = "Please enter a E-Parti account";
+"XPLoginPwdViewController6" = "Please enter a E-Party account";
"XPLoginBindPhoneResultViewController0" = "Bind phone";
"XPLoginBindPhoneResultViewController1" = "Your current bound phone number is";
@@ -455,7 +455,7 @@
"XPShareView5" = "Share failed";
"XPShareView6" = "Cancel sharing";
"XPShareView7" = "Cancel";
-"XPShareView8" = "Come to E-Parti and meet your exclusive voice";
+"XPShareView8" = "Come to E-Party and meet your exclusive voice";
"XPShareView9" = "Failed to share due to the absence of related apps";
"XPFirstRechargeViewController0" = "1. Each person can only receive the first recharge benefit once\n2. Each ID and device can only participate once.";
"XPFirstRechargeViewController1" = "Recharge now";
@@ -511,12 +511,12 @@
"HttpRequestHelper1" = "Please check network connection";
"HttpRequestHelper2" = "Please check network connection";
"HttpRequestHelper3" = "Login session has expired";
-"HttpRequestHelper4" = "E-Parti is taking a break Please try again later";
+"HttpRequestHelper4" = "E-Party is taking a break Please try again later";
"HttpRequestHelper5" = "Unknown error from server";
"HttpRequestHelper6" = "Please check network connection";
"HttpRequestHelper7" = "Login session has expired.";
-"AppDelegate_ThirdConfig0" = "E-Parti";
+"AppDelegate_ThirdConfig0" = "E-Party";
"XPMineNotificaPresenter0" = "System Notifications";
"XPMineNotificaPresenter1" = "When turned off, system messages and official assistants will no longer prompt";
@@ -932,7 +932,7 @@
"XPIAPRechargeViewController2" = "Confirm Recharge";
"XPIAPRechargeViewController3" = "《User Recharge Agreement》";
"XPIAPRechargeViewController4" = "I have read and agree";
-"XPIAPRechargeViewController5" = "For any questions, please contact customer service, E-Parti ID";
+"XPIAPRechargeViewController5" = "For any questions, please contact customer service, E-Party ID";
"XPIAPRechargeViewController6" = "My Account";
"XPIAPRechargeViewController7" = "Reminder";
"XPIAPRechargeViewController8" = "Recharge failed. Please contact customer service for assistance.";
@@ -1640,7 +1640,7 @@
"RoomHeaderView1" = "Online: %ld ID: %ld";
"RoomHeaderView2" = "Online: %ld ID: %ld";
"RoomHeaderView3" = "Copy Link";
-"RoomHeaderView4" = "Come to E-Parti, play games and make friends";
+"RoomHeaderView4" = "Come to E-Party, play games and make friends";
"RoomHeaderView5" = "Beautiful people with sweet voices win points, let's play together~";
"RoomHeaderView6" = "Bookmark Successful";
"RoomHeaderView7" = "Share Successful";
@@ -2315,7 +2315,7 @@
"XPLoginPwdViewController3" = "Please enter password";
"XPLoginPwdViewController4" = "Phone Number Login";
"XPLoginPwdViewController5" = "Forget Password";
-"XPLoginPwdViewController6" = "Please enter your E-Parti account";
+"XPLoginPwdViewController6" = "Please enter your E-Party account";
"XPLoginBindPhoneResultViewController0" = "Bind Phone";
"XPLoginBindPhoneResultViewController1" = "The current bound phone number is";
@@ -3418,7 +3418,7 @@
"PIMessageContentServiceReplyView0"="How to Top-Up:";
"PIMessageContentServiceReplyView1"="Copy";
-"PIMessageContentServiceReplyView2"="1. Go to 【My】-- 【Top-Up Coins】 inside E-Parti Voice App to top-up";
+"PIMessageContentServiceReplyView2"="1. Go to 【My】-- 【Top-Up Coins】 inside E-Party Voice App to top-up";
"PIMessageContentServiceReplyView3"="2. Contact customer service";
"PIMessageContentServiceReplyView4"="Customer Service WeChat: %@ ";
"PIMessageContentServiceReplyView5"="Customer Service Line: %@ ";
@@ -3908,7 +3908,7 @@
"1.0.37_text_52" = "Your cannot use this feature.";
"20.20.51_text_1" = "Email Login";
-"20.20.51_text_2" = "Welcome to E-Parti";
+"20.20.51_text_2" = "Welcome to E-Party";
"20.20.51_text_3" = "Please enter ID";
"20.20.51_text_4" = "Please enter email";
"20.20.51_text_7" = "Please enter verification code";
@@ -4066,3 +4066,149 @@
"EPEditSetting.LogoutConfirm" = "Are you sure you want to log out?";
"EPEditSetting.Cancel" = "Cancel";
"EPEditSetting.Confirm" = "Confirm";
+
+/* EP Module Keys - Added for English localization */
+
+/*
+ * EP Module - English Localization Keys
+ * 用于替换 EP 模块中所有硬编码中文
+ */
+
+// MARK: - Common 通用
+"common.tips" = "Tips";
+"common.confirm" = "Confirm";
+"common.cancel" = "Cancel";
+"common.ok" = "OK";
+"common.publish" = "Publish";
+"common.save" = "Save";
+"common.delete" = "Delete";
+"common.upload_failed" = "Upload Failed";
+"common.update_failed" = "Update Failed";
+"common.loading" = "Loading...";
+"common.success" = "Success";
+"common.failed" = "Failed";
+
+// MARK: - User 用户相关
+"user.anonymous" = "Anonymous";
+"user.nickname_not_set" = "Nickname Not Set";
+"user.not_set" = "Not Set";
+
+// MARK: - Time 时间格式化
+"time.just_now" = "Just now";
+"time.minutes_ago" = "%.0f minutes ago";
+"time.hours_ago" = "%.0f hours ago";
+"time.days_ago" = "%.0f days ago";
+
+// MARK: - Tab Bar Tab 标题
+"tab.moment" = "Moments";
+"tab.mine" = "Mine";
+
+// MARK: - Moment 动态相关
+"moment.title" = "Enjoy your Life Time";
+"moment.item_clicked" = "Clicked item %ld";
+"moment.under_review" = "Moment is under review, cannot like";
+"moment.like" = "Like";
+"moment.unlike" = "Unlike";
+"moment.like_success" = "Like success";
+"moment.unlike_success" = "Unlike success";
+"moment.like_failed" = "Like failed: %@";
+"moment.click_image_index" = "Clicked image index: %ld";
+
+// MARK: - Publish 发布相关
+"publish.title" = "Publish";
+"publish.content_or_image_required" = "Please enter content or select image";
+"publish.publish_failed" = "Publish failed: %ld - %@";
+"publish.upload_failed" = "Upload failed: %@";
+
+// MARK: - Mine 我的页面
+"mine.settings_clicked" = "Settings button clicked";
+"mine.not_logged_in" = "User not logged in";
+"mine.load_user_info_failed" = "Failed to load user info";
+"mine.load_user_info_failed_msg" = "Failed to load user info: %@";
+"mine.item_clicked" = "Clicked item %ld (Mine)";
+"mine.open_settings" = "Open settings page with user info";
+"mine.avatar_updated" = "Avatar updated: %@";
+
+// MARK: - Settings 设置页面
+"setting.nickname_update_success" = "Nickname updated: %@";
+"setting.nickname_update_failed" = "Nickname update failed, please try again later";
+"setting.nickname_update_failed_msg" = "Nickname update failed: %ld - %@";
+"setting.avatar_update_failed" = "Avatar update failed, please try again later";
+"setting.avatar_upload_success" = "Avatar uploaded: %@";
+"setting.avatar_upload_failed" = "Avatar upload failed: %@";
+"setting.avatar_upload_no_url" = "Avatar uploaded but no URL returned";
+"setting.avatar_update_success" = "Avatar updated";
+"setting.avatar_update_failed_msg" = "Avatar update failed: %ld - %@";
+"setting.image_not_selected" = "Image not selected";
+"setting.account_not_found" = "Account info not found";
+"setting.redirected_to_login" = "Redirected to login page";
+"setting.feature_reserved" = "[%@] - Feature reserved for future implementation";
+"setting.user_info_updated" = "User info updated: %@";
+
+// MARK: - Login 登录相关
+"login.debug_mode_active" = "✅ DEBUG mode active";
+"login.release_mode" = "⚠️ Currently in Release mode";
+"login.switch_env" = "Switch Environment";
+"login.feedback_placeholder" = "Feedback - Placeholder, Phase 2 implementation";
+"login.debug_placeholder" = "Debug - Placeholder, Phase 2 implementation";
+"login.area_selection_placeholder" = "Area selection - Placeholder, Phase 2 implementation";
+"login.id_login_success" = "ID login success: %@";
+"login.email_login_success" = "Email login success: %@";
+"login.phone_login_success" = "Phone login success: %@";
+
+// MARK: - Login Manager 登录管理
+"login_manager.account_incomplete" = "Account info incomplete, cannot continue";
+"login_manager.access_token_empty" = "access_token is empty, cannot continue";
+"login_manager.login_success" = "Login success, switched to EPTabBarController";
+"login_manager.request_ticket_failed" = "Request Ticket failed: %ld - %@";
+"login_manager.request_ticket_failed_redirect" = "Ticket request failed, still redirect to home page";
+"login_manager.apple_login_placeholder" = "Apple Login - Placeholder, Phase 2 implementation";
+"login_manager.debug_show_color_guide" = "Debug mode: Show signature color guide (has color: %d)";
+"login_manager.user_selected_color" = "User selected signature color: %@";
+"login_manager.user_skipped_color" = "User skipped signature color selection";
+
+// MARK: - API Errors API 错误
+"error.not_logged_in" = "Not logged in";
+"error.request_failed" = "Request failed";
+"error.publish_failed" = "Publish failed";
+"error.like_failed" = "Like operation failed";
+"error.account_parse_failed" = "Account info parse failed";
+"error.operation_failed" = "Operation failed";
+"error.ticket_parse_failed" = "Ticket parse failed";
+"error.request_ticket_failed" = "Request Ticket failed";
+"error.send_email_code_failed" = "Send email verification code failed";
+"error.send_phone_code_failed" = "Send phone verification code failed";
+"error.login_failed" = "Login failed";
+"error.reset_password_failed" = "Reset password failed";
+"error.quick_login_failed" = "Quick login failed";
+"error.image_compress_failed" = "Image compress failed";
+"error.qcloud_init_failed" = "QCloud initialization failed";
+"error.qcloud_config_failed" = "Get QCloud config failed";
+"error.qcloud_config_not_initialized" = "QCloud config not initialized";
+
+// MARK: - Upload 上传相关
+"upload.progress_format" = "Uploading %ld/%ld";
+
+// MARK: - Color Storage 颜色存储
+"color_storage.save_signature_color" = "Save user signature color: %@";
+"color_storage.clear_signature_color" = "Clear user signature color";
+
+// MARK: - Tab Bar Controller TabBar 控制器
+"tabbar.init_complete" = "Floating TabBar initialization complete";
+"tabbar.released" = "Released";
+"tabbar.setup_complete" = "Floating TabBar setup complete";
+"tabbar.selected_tab" = "Selected Tab: %@";
+"tabbar.global_manager_setup" = "Global manager setup complete (v0.2 - No MiniRoom)";
+"tabbar.initial_vcs_setup" = "Initial ViewControllers setup complete";
+"tabbar.refresh_login_status" = "TabBar refreshed, login status: %d";
+"tabbar.login_vcs_created" = "Post-login ViewControllers created - Moment & Mine";
+"tabbar.show_tabbar_root" = "Show TabBar - Root page";
+"tabbar.hide_tabbar_child" = "Hide TabBar - Child page (level: %ld)";
+
+// MARK: - Debug Logs 调试日志(建议直接用英文重写,这里仅供参考)
+"debug.apply_signature_color" = "Apply signature color: %@";
+"debug.start_breathing_glow" = "Start breathing glow animation";
+"debug.warning_emotion_color_nil" = "Warning: emotionColorHex is nil";
+"debug.assign_random_color" = "Assign random color for moment %@: %@";
+
+/* End EP Module Keys */
diff --git a/YuMi/es.lproj/InfoPlist.strings b/YuMi/es.lproj/InfoPlist.strings
index 14522d8..5faf76a 100644
--- a/YuMi/es.lproj/InfoPlist.strings
+++ b/YuMi/es.lproj/InfoPlist.strings
@@ -1,7 +1,7 @@
-NSCameraUsageDescription = "\"E-Parti\" necesita su consentimiento para que pueda visitar, tomar fotos y cargar sus imágenes, y luego mostrarlas en su página de inicio personal para que otras personas las vean";
+NSCameraUsageDescription = "\"E-Party\" necesita su consentimiento para que pueda visitar, tomar fotos y cargar sus imágenes, y luego mostrarlas en su página de inicio personal para que otras personas las vean";
NSLocalNetworkUsageDescription = "La aplicación descubrirá y se conectará a dispositivos en su red";
NSLocationWhenInUseUsageDescription = "Se requiere su consentimiento antes de que pueda usar los servicios de ubicación y recomendar amigos cercanos";
-NSMicrophoneUsageDescription = "\"E-Parti\" necesita su consentimiento antes de poder realizar una conversación de voz";
-NSPhotoLibraryAddUsageDescription = "\"E-Parti\" necesita su consentimiento antes de poder almacenar fotos en el álbum";
-NSPhotoLibraryUsageDescription = "\"E-Parti\" necesita su consentimiento para que pueda acceder al álbum y seleccionar las imágenes que necesita cargar, y luego mostrarlas en su página de inicio personal para que otras personas las vean";
+NSMicrophoneUsageDescription = "\"E-Party\" necesita su consentimiento antes de poder realizar una conversación de voz";
+NSPhotoLibraryAddUsageDescription = "\"E-Party\" necesita su consentimiento antes de poder almacenar fotos en el álbum";
+NSPhotoLibraryUsageDescription = "\"E-Party\" necesita su consentimiento para que pueda acceder al álbum y seleccionar las imágenes que necesita cargar, y luego mostrarlas en su página de inicio personal para que otras personas las vean";
NSUserTrackingUsageDescription = "Permítanos obtener su permiso de idfa para proporcionarle actividades y servicios personalizados. Su información no se utilizará para otros fines sin su permiso";
diff --git a/YuMi/es.lproj/Localizable.strings b/YuMi/es.lproj/Localizable.strings
index aa42cea..3703bd1 100644
--- a/YuMi/es.lproj/Localizable.strings
+++ b/YuMi/es.lproj/Localizable.strings
@@ -391,7 +391,7 @@
"XPLoginPwdViewController4" = "Inicio de sesión con número de teléfono";
"XPLoginPwdViewController5" = "Olvidé la contraseña";
-"XPLoginPwdViewController6" = "Por favor ingresa una cuenta E-Parti";
+"XPLoginPwdViewController6" = "Por favor ingresa una cuenta E-Party";
"XPLoginBindPhoneResultViewController0" = "Vincular teléfono";
"XPLoginBindPhoneResultViewController1" = "Tu número de teléfono vinculado actual es";
@@ -453,7 +453,7 @@
"XPShareView5" = "Compartir fallido";
"XPShareView6" = "Cancelar compartir";
"XPShareView7" = "Cancelar";
-"XPShareView8" = "Ven a E-Parti y conoce tu voz exclusiva";
+"XPShareView8" = "Ven a E-Party y conoce tu voz exclusiva";
"XPShareView9" = "Error al compartir debido a la ausencia de aplicaciones relacionadas";
"XPFirstRechargeViewController0" = "1. Cada persona solo puede recibir el beneficio de la primera recarga una vez\n2. Cada ID y dispositivo solo puede participar una vez.";
"XPFirstRechargeViewController1" = "Recargar ahora";
@@ -509,12 +509,12 @@
"HttpRequestHelper1" = "Por favor comprueba la conexión a internet";
"HttpRequestHelper2" = "Por favor comprueba la conexión a internet";
"HttpRequestHelper3" = "La sesión de inicio de sesión ha expirado";
-"HttpRequestHelper4" = "E-Parti está descansando Por favor intenta más tarde";
+"HttpRequestHelper4" = "E-Party está descansando Por favor intenta más tarde";
"HttpRequestHelper5" = "Error desconocido del servidor";
"HttpRequestHelper6" = "Por favor comprueba la conexión a internet";
"HttpRequestHelper7" = "La sesión de inicio de sesión ha expirado.";
-"AppDelegate_ThirdConfig0" = "E-Parti";
+"AppDelegate_ThirdConfig0" = "E-Party";
"XPMineNotificaPresenter0" = "Notificaciones del sistema";
"XPMineNotificaPresenter1" = "Cuando está apagado, los mensajes del sistema y los asistentes oficiales ya no se mostrarán";
@@ -930,7 +930,7 @@
"XPIAPRechargeViewController2" = "Confirmar Recarga";
"XPIAPRechargeViewController3" = "《Acuerdo de Recarga de Usuario》";
"XPIAPRechargeViewController4" = "He leído y acepto";
-"XPIAPRechargeViewController5" = "Para cualquier pregunta, por favor contacte al servicio al cliente, ID E-Parti";
+"XPIAPRechargeViewController5" = "Para cualquier pregunta, por favor contacte al servicio al cliente, ID E-Party";
"XPIAPRechargeViewController6" = "Mi Cuenta";
"XPIAPRechargeViewController7" = "Recordatorio";
"XPIAPRechargeViewController8" = "Recarga fallida. Por favor contacte al servicio al cliente para obtener ayuda.";
@@ -1638,7 +1638,7 @@
"RoomHeaderView1" = "En línea: %ld ID: %ld";
"RoomHeaderView2" = "En línea: %ld ID: %ld";
"RoomHeaderView3" = "Copiar Enlace";
-"RoomHeaderView4" = "Ven a E-Parti, juega y haz amigos";
+"RoomHeaderView4" = "Ven a E-Party, juega y haz amigos";
"RoomHeaderView5" = "Gente hermosa con voces dulces gana puntos, ¡juguemos juntos~";
"RoomHeaderView6" = "Marcador Guardado";
"RoomHeaderView7" = "Compartido con Éxito";
@@ -2313,7 +2313,7 @@
"XPLoginPwdViewController3" = "Please enter password";
"XPLoginPwdViewController4" = "Phone Number Login";
"XPLoginPwdViewController5" = "Forget Password";
-"XPLoginPwdViewController6" = "Please enter your E-Parti account";
+"XPLoginPwdViewController6" = "Please enter your E-Party account";
"XPLoginBindPhoneResultViewController0" = "Bind Phone";
"XPLoginBindPhoneResultViewController1" = "The current bound phone number is";
@@ -3416,7 +3416,7 @@
"PIMessageContentServiceReplyView0"="How to Top-Up:";
"PIMessageContentServiceReplyView1"="Copy";
-"PIMessageContentServiceReplyView2"="1. Go to 【My】-- 【Top-Up Coins】 inside E-Parti Voice App to top-up";
+"PIMessageContentServiceReplyView2"="1. Go to 【My】-- 【Top-Up Coins】 inside E-Party Voice App to top-up";
"PIMessageContentServiceReplyView3"="2. Contact customer service";
"PIMessageContentServiceReplyView4"="Customer Service WeChat: %@ ";
"PIMessageContentServiceReplyView5"="Customer Service Line: %@ ";
@@ -3930,7 +3930,7 @@
"1.0.37_text_52" = "No puedes usar esta función.";
"20.20.51_text_1" = "Inicio de sesión por correo electrónico";
-"20.20.51_text_2" = "Bienvenido a E-Parti";
+"20.20.51_text_2" = "Bienvenido a E-Party";
"20.20.51_text_3" = "Por favor ingresa ID";
"20.20.51_text_4" = "Por favor ingresa correo electrónico";
"20.20.51_text_7" = "Por favor ingresa el código de verificación";
diff --git a/YuMi/pt-BR.lproj/InfoPlist.strings b/YuMi/pt-BR.lproj/InfoPlist.strings
index 7d57f2a..66b6f7a 100644
--- a/YuMi/pt-BR.lproj/InfoPlist.strings
+++ b/YuMi/pt-BR.lproj/InfoPlist.strings
@@ -1,13 +1,13 @@
-NSCameraUsageDescription = "O \"E-Parti\" precisa do seu consentimento antes que você possa visitar, tirar fotos e enviar suas imagens, e depois exibi-las em sua página pessoal para que outros possam visualizar";
+NSCameraUsageDescription = "O \"E-Party\" precisa do seu consentimento antes que você possa visitar, tirar fotos e enviar suas imagens, e depois exibi-las em sua página pessoal para que outros possam visualizar";
NSLocalNetworkUsageDescription = "O aplicativo irá descobrir e conectar-se a dispositivos em sua rede";
NSLocationWhenInUseUsageDescription = "O seu consentimento é necessário antes que você possa usar os serviços de localização e recomendar amigos próximos";
-NSMicrophoneUsageDescription = "O \"E-Parti\" precisa do seu consentimento antes de poder realizar chat de voz";
+NSMicrophoneUsageDescription = "O \"E-Party\" precisa do seu consentimento antes de poder realizar chat de voz";
-NSPhotoLibraryAddUsageDescription = "O \"E-Parti\" precisa do seu consentimento antes de poder armazenar fotos no álbum";
+NSPhotoLibraryAddUsageDescription = "O \"E-Party\" precisa do seu consentimento antes de poder armazenar fotos no álbum";
-NSPhotoLibraryUsageDescription = "O \"E-Parti\" precisa do seu consentimento antes que você possa acessar o álbum e selecionar as imagens que deseja enviar, e depois exibi-las em sua página pessoal para que outros possam visualizar";
+NSPhotoLibraryUsageDescription = "O \"E-Party\" precisa do seu consentimento antes que você possa acessar o álbum e selecionar as imagens que deseja enviar, e depois exibi-las em sua página pessoal para que outros possam visualizar";
NSUserTrackingUsageDescription = "Por favor, permita-nos obter sua permissão IDFA para fornecer a você atividades e serviços personalizados. Suas informações não serão usadas para outros fins sem a sua permissão";
diff --git a/YuMi/pt-BR.lproj/Localizable.strings b/YuMi/pt-BR.lproj/Localizable.strings
index 66b9b05..ba6d55b 100644
--- a/YuMi/pt-BR.lproj/Localizable.strings
+++ b/YuMi/pt-BR.lproj/Localizable.strings
@@ -305,7 +305,7 @@
"XPLoginPwdViewController2" = "Por favor insira número de telefone/ID";
"XPLoginPwdViewController4" = "Login com número de telefone";
"XPLoginPwdViewController5" = "Esqueceu a senha";
-"XPLoginPwdViewController6" = "Por favor insira uma conta E-Parti";
+"XPLoginPwdViewController6" = "Por favor insira uma conta E-Party";
"XPLoginBindPhoneResultViewController0" = "Vincular telefone";
"XPLoginBindPhoneResultViewController1" = "Seu número de telefone vinculado atual é";
"XPLoginBindPhoneResultViewController2" = "Alterar número de telefone";
@@ -363,7 +363,7 @@
"XPShareView5" = "Compartilhamento falhou";
"XPShareView6" = "Cancelar compartilhamento";
"XPShareView7" = "Cancelar";
-"XPShareView8" = "Venha para E-Parti e conheça sua voz exclusiva";
+"XPShareView8" = "Venha para E-Party e conheça sua voz exclusiva";
"XPShareView9" = "Falha ao compartilhar devido à ausência de aplicativos relacionados";
"XPFirstRechargeViewController0" = "1. Cada pessoa só pode receber o benefício da primeira recarga uma vez\n2. Cada ID e dispositivo só pode participar uma vez.";
"XPFirstRechargeViewController1" = "Recarregar agora";
@@ -412,11 +412,11 @@
"HttpRequestHelper1" = "Por favor verifique a conexão de rede";
"HttpRequestHelper2" = "Por favor verifique a conexão de rede";
"HttpRequestHelper3" = "A sessão de login expirou";
-"HttpRequestHelper4" = "E-Parti está fazendo uma pausa Por favor tente novamente mais tarde";
+"HttpRequestHelper4" = "E-Party está fazendo uma pausa Por favor tente novamente mais tarde";
"HttpRequestHelper5" = "Erro desconhecido do servidor";
"HttpRequestHelper6" = "Por favor verifique a conexão de rede";
"HttpRequestHelper7" = "A sessão de login expirou.";
-"AppDelegate_ThirdConfig0" = "E-Parti";
+"AppDelegate_ThirdConfig0" = "E-Party";
"XPMineNotificaPresenter0" = "Notificações do sistema";
"XPMineNotificaPresenter1" = "Quando desligado, mensagens do sistema e assistentes oficiais não avisarão mais";
"XPMineNotificaPresenter2" = "Notificações ao vivo";
@@ -753,7 +753,7 @@
"XPIAPRechargeViewController2" = "Confirmar Recarga";
"XPIAPRechargeViewController3" = "《Termos de Recarga do Usuário》";
"XPIAPRechargeViewController4" = "Li e concordo";
-"XPIAPRechargeViewController5" = "Para dúvidas, entre em contato com o atendimento, ID E-Parti";
+"XPIAPRechargeViewController5" = "Para dúvidas, entre em contato com o atendimento, ID E-Party";
"XPIAPRechargeViewController6" = "Minha Conta";
"XPIAPRechargeViewController7" = "Lembrete";
"XPIAPRechargeViewController8" = "Falha na recarga. Entre em contato com o atendimento para assistência.";
@@ -1351,7 +1351,7 @@
"RoomHeaderView1" = "Online: %ld ID: %ld";
"RoomHeaderView2" = "Online: %ld ID: %ld";
"RoomHeaderView3" = "Copiar Link";
-"RoomHeaderView4" = "Venha para E-Parti, jogue e faça amigos";
+"RoomHeaderView4" = "Venha para E-Party, jogue e faça amigos";
"RoomHeaderView5" = "Pessoas bonitas com vozes doces ganham pontos, vamos jogar juntos~";
"RoomHeaderView6" = "Favoritado com Sucesso";
"RoomHeaderView7" = "Compartilhado com Sucesso";
@@ -1917,7 +1917,7 @@
"XPLoginPwdViewController3" = "Digite a senha";
"XPLoginPwdViewController4" = "Login com Número de Telefone";
"XPLoginPwdViewController5" = "Esqueci a Senha";
-"XPLoginPwdViewController6" = "Digite sua conta E-Parti";
+"XPLoginPwdViewController6" = "Digite sua conta E-Party";
"XPLoginBindPhoneResultViewController0" = "Vincular Telefone";
"XPLoginBindPhoneResultViewController1" = "O número de telefone vinculado atualmente é";
"XPLoginBindPhoneResultViewController2" = "Alterar Número de Telefone";
@@ -2748,7 +2748,7 @@
"XPCandyTreeBuyView0"="Por favor, selecione ou insira o número de martelos para comprar";
"PIMessageContentServiceReplyView0"="Como Recarregar:";
"PIMessageContentServiceReplyView1"="Copiar";
-"PIMessageContentServiceReplyView2"="1. Vá para 【Meu】-- 【Recarregar Moedas】 dentro do aplicativo E-Parti Voice para recarregar";
+"PIMessageContentServiceReplyView2"="1. Vá para 【Meu】-- 【Recarregar Moedas】 dentro do aplicativo E-Party Voice para recarregar";
"PIMessageContentServiceReplyView3"="2. Contate o atendimento ao cliente";
"PIMessageContentServiceReplyView4"="WeChat do Atendimento: %@ ";
"PIMessageContentServiceReplyView5"="Linha do Atendimento: %@ ";
@@ -3204,7 +3204,7 @@
"1.0.37_text_51" = "Presentes foram colocados na bolsa!";
"1.0.37_text_52" = "Você não pode usar este recurso.";
"20.20.51_text_1" = "Login por Email";
-"20.20.51_text_2" = "Bem-vindo ao E-Parti";
+"20.20.51_text_2" = "Bem-vindo ao E-Party";
"20.20.51_text_3" = "Digite o ID";
"20.20.51_text_4" = "Digite o email";
"20.20.51_text_7" = "Digite o código de verificação";
diff --git a/YuMi/ru.lproj/InfoPlist.strings b/YuMi/ru.lproj/InfoPlist.strings
index ff9669e..76f70b0 100644
--- a/YuMi/ru.lproj/InfoPlist.strings
+++ b/YuMi/ru.lproj/InfoPlist.strings
@@ -1,8 +1,8 @@
-NSCameraUsageDescription = "\"E-Parti\" нужен ваш consentimiento перед тем, как вы можете посетить, фотографировать и загружать ваши изображения, а затем отображать их на вашей персональной странице для просмотра другими людьми";
+NSCameraUsageDescription = "\"E-Party\" нужен ваш consentimiento перед тем, как вы можете посетить, фотографировать и загружать ваши изображения, а затем отображать их на вашей персональной странице для просмотра другими людьми";
NSLocalNetworkUsageDescription = "Приложение обнаружит и подключится к устройствам в вашей сети";
NSLocationWhenInUseUsageDescription = "Вам необходимо дать согласие, прежде чем вы сможете использовать службы определения местоположения и рекомендовать близких друзей";
-NSMicrophoneUsageDescription = "\"E-Parti\" нужен ваш consentimiento перед тем, как он может проводить голосовый чат";
-NSPhotoLibraryAddUsageDescription = "\"E-Parti\" нужен ваш consentimiento перед тем, как он может хранить фотографии в альбоме";
-NSPhotoLibraryUsageDescription = "\"E-Parti\" нужен ваш consentimiento перед тем, как вы можете получить доступ к альбому и выбрать изображения, которые вам нужно загрузить, а затем отобразить их на вашей персональной странице для просмотра другими людьми";
+NSMicrophoneUsageDescription = "\"E-Party\" нужен ваш consentimiento перед тем, как он может проводить голосовый чат";
+NSPhotoLibraryAddUsageDescription = "\"E-Party\" нужен ваш consentimiento перед тем, как он может хранить фотографии в альбоме";
+NSPhotoLibraryUsageDescription = "\"E-Party\" нужен ваш consentimiento перед тем, как вы можете получить доступ к альбому и выбрать изображения, которые вам нужно загрузить, а затем отобразить их на вашей персональной странице для просмотра другими людьми";
NSUserTrackingUsageDescription = "Пожалуйста, разрешите нам получить ваше разрешение на idfa, чтобы предоставить вам персонализированные мероприятия и услуги. ваша информация не будет использоваться для других целей без вашего разрешения";
diff --git a/YuMi/ru.lproj/Localizable.strings b/YuMi/ru.lproj/Localizable.strings
index 025cb6f..441f48a 100644
--- a/YuMi/ru.lproj/Localizable.strings
+++ b/YuMi/ru.lproj/Localizable.strings
@@ -390,7 +390,7 @@
"XPLoginPwdViewController4" = "Вход по номеру телефона";
"XPLoginPwdViewController5" = "Забыли пароль";
-"XPLoginPwdViewController6" = "Пожалуйста, введите аккаунт E-Parti";
+"XPLoginPwdViewController6" = "Пожалуйста, введите аккаунт E-Party";
"XPLoginBindPhoneResultViewController0" = "Привязать телефон";
"XPLoginBindPhoneResultViewController1" = "Ваш текущий привязанный номер телефона";
@@ -452,7 +452,7 @@
"XPShareView5" = "Ошибка при отправке";
"XPShareView6" = "Отменить отправку";
"XPShareView7" = "Отмена";
-"XPShareView8" = "Приходите в E-Parti и встречайте свой эксклюзивный голос";
+"XPShareView8" = "Приходите в E-Party и встречайте свой эксклюзивный голос";
"XPShareView9" = "Ошибка при отправке из-за отсутствия связанных приложений";
"XPFirstRechargeViewController0" = "1. Каждый человек может получить преимущество за первый пополнение только один раз\n2. Каждая учетная запись и устройство могут участвовать только один раз.";
"XPFirstRechargeViewController1" = "Пополнить сейчас";
@@ -508,12 +508,12 @@
"HttpRequestHelper1" = "Пожалуйста, проверьте интернет-подключение";
"HttpRequestHelper2" = "Пожалуйста, проверьте интернет-подключение";
"HttpRequestHelper3" = "Сессия входа истекла";
-"HttpRequestHelper4" = "E-Parti отдыхает Пожалуйста, попробуйте позже";
+"HttpRequestHelper4" = "E-Party отдыхает Пожалуйста, попробуйте позже";
"HttpRequestHelper5" = "Неизвестная ошибка сервера";
"HttpRequestHelper6" = "Пожалуйста, проверьте интернет-подключение";
"HttpRequestHelper7" = "Сессия входа истекла.";
-"AppDelegate_ThirdConfig0" = "E-Parti";
+"AppDelegate_ThirdConfig0" = "E-Party";
"XPMineNotificaPresenter0" = "Системные уведомления";
"XPMineNotificaPresenter1" = "При отключении системные сообщения и официальные помощники больше не будут появляться";
@@ -929,7 +929,7 @@
"XPIAPRechargeViewController2" = "Подтвердить пополнение";
"XPIAPRechargeViewController3" = "《Соглашение о пополнении баланса пользователя》";
"XPIAPRechargeViewController4" = "Я прочел(а) и согласен(а)";
-"XPIAPRechargeViewController5" = "По всем вопросам обращайтесь в службу поддержки, E-Parti ID";
+"XPIAPRechargeViewController5" = "По всем вопросам обращайтесь в службу поддержки, E-Party ID";
"XPIAPRechargeViewController6" = "Мой аккаунт";
"XPIAPRechargeViewController7" = "Напоминание";
"XPIAPRechargeViewController8" = "Пополнение не удалось. Пожалуйста, обратитесь в службу поддержки за помощью.";
@@ -1637,7 +1637,7 @@
"RoomHeaderView1" = "Онлайн: %ld ID: %ld";
"RoomHeaderView2" = "Онлайн: %ld ID: %ld";
"RoomHeaderView3" = "Копировать ссылку";
-"RoomHeaderView4" = "Приходите на E-Parti, играйте в игры и заводите друзей";
+"RoomHeaderView4" = "Приходите на E-Party, играйте в игры и заводите друзей";
"RoomHeaderView5" = "Красивые люди с сладкими голосами зарабатывают очки, давайте играть вместе~";
"RoomHeaderView6" = "Закладка успешно создана";
"RoomHeaderView7" = "Поделка успешно выполнена";
@@ -2312,7 +2312,7 @@
"XPLoginPwdViewController3" = "Введите пароль";
"XPLoginPwdViewController4" = "Вход по номеру телефона";
"XPLoginPwdViewController5" = "Забыли пароль";
-"XPLoginPwdViewController6" = "Введите ваш аккаунт E-Parti";
+"XPLoginPwdViewController6" = "Введите ваш аккаунт E-Party";
"XPLoginBindPhoneResultViewController0" = "Привязать телефон";
"XPLoginBindPhoneResultViewController1" = "Текущий привязанный номер телефона";
@@ -3415,7 +3415,7 @@
"PIMessageContentServiceReplyView0"="Как пополнить баланс:";
"PIMessageContentServiceReplyView1"="Скопировать";
-"PIMessageContentServiceReplyView2"="1. Перейдите в 【Мой】-- 【Пополнить монеты】 внутри приложения E-Parti Voice для пополнения баланса";
+"PIMessageContentServiceReplyView2"="1. Перейдите в 【Мой】-- 【Пополнить монеты】 внутри приложения E-Party Voice для пополнения баланса";
"PIMessageContentServiceReplyView3"="2. Свяжитесь с поддержкой";
"PIMessageContentServiceReplyView4"="WeChat поддержки: %@ ";
"PIMessageContentServiceReplyView5"="Телефон поддержки: %@ ";
@@ -3925,7 +3925,7 @@
"1.0.37_text_52" = "Вы не можете использовать эту функцию.";
"20.20.51_text_1" = "Вход по электронной почте";
-"20.20.51_text_2" = "Добро пожаловать в E-Parti";
+"20.20.51_text_2" = "Добро пожаловать в E-Party";
"20.20.51_text_3" = "Пожалуйста, введите ID";
"20.20.51_text_4" = "Пожалуйста, введите электронную почту";
"20.20.51_text_7" = "Пожалуйста, введите код подтверждения";
diff --git a/YuMi/tr.lproj/InfoPlist.strings b/YuMi/tr.lproj/InfoPlist.strings
index cc0358b..58752a5 100644
--- a/YuMi/tr.lproj/InfoPlist.strings
+++ b/YuMi/tr.lproj/InfoPlist.strings
@@ -1,7 +1,7 @@
-NSCameraUsageDescription = "\"E-Parti\"'ın ziyaret etmeden önce, fotoğraf çekip yüklemeden önce onayınıza ihtiyacı var, ardından bunlar kişisel ana sayfanızda başkalarının görmesi için görüntülenecektir";
+NSCameraUsageDescription = "\"E-Party\"'ın ziyaret etmeden önce, fotoğraf çekip yüklemeden önce onayınıza ihtiyacı var, ardından bunlar kişisel ana sayfanızda başkalarının görmesi için görüntülenecektir";
NSLocalNetworkUsageDescription = "Uygulama, ağınızdaki cihazları keşfedecek ve bağlanacaktır";
NSLocationWhenInUseUsageDescription = "Konum hizmetlerini kullanabilmeniz ve yakındaki arkadaşları önerebilmemiz için onayınız gereklidir";
-NSMicrophoneUsageDescription = "\"E-Parti\"'ın sesli sohbet gerçekleştirebilmesi için onayınıza ihtiyacı var";
-NSPhotoLibraryAddUsageDescription = "\"E-Parti\"'ın albüme fotoğraf kaydedebilmesi için onayınıza ihtiyacı var";
-NSPhotoLibraryUsageDescription = "\"E-Parti\"'ın albüme erişebilmesi, yüklemek için gerekli fotoğrafları seçebilmeniz ve ardından bunları kişisel ana sayfanızda başkalarının görmesi için görüntüleyebilmeniz için onayınıza ihtiyacı var";
+NSMicrophoneUsageDescription = "\"E-Party\"'ın sesli sohbet gerçekleştirebilmesi için onayınıza ihtiyacı var";
+NSPhotoLibraryAddUsageDescription = "\"E-Party\"'ın albüme fotoğraf kaydedebilmesi için onayınıza ihtiyacı var";
+NSPhotoLibraryUsageDescription = "\"E-Party\"'ın albüme erişebilmesi, yüklemek için gerekli fotoğrafları seçebilmeniz ve ardından bunları kişisel ana sayfanızda başkalarının görmesi için görüntüleyebilmeniz için onayınıza ihtiyacı var";
NSUserTrackingUsageDescription = "Size kişiselleştirilmiş etkinlikler ve hizmetler sunabilmemiz için lütfen IDFA izninizi vermemize izin verin. İzniniz olmadan bilgileriniz başka amaçlar için kullanılmayacaktır";
diff --git a/YuMi/tr.lproj/Localizable.strings b/YuMi/tr.lproj/Localizable.strings
index 85d9b9c..c516639 100644
--- a/YuMi/tr.lproj/Localizable.strings
+++ b/YuMi/tr.lproj/Localizable.strings
@@ -50,7 +50,7 @@
"XPShareView5" = "Paylaşım başarısız oldu";
"XPShareView6" = "Paylaşımı iptal et";
"XPShareView7" = "İptal";
-"XPShareView8" = "E-Parti'a gel, özel sesinle tanış";
+"XPShareView8" = "E-Party'a gel, özel sesinle tanış";
"XPShareView9" = "İlgili uygulama yüklü değil, paylaşım başarısız oldu";
///XPFirstRechargeViewController.m
"XPFirstRechargeViewController0" = "1. Herkes sadece bir kez ilk yükleme avantajı alabilir\n2. Her ID ve cihaz sadece bir kez katılabilir.";
@@ -119,12 +119,12 @@
"HttpRequestHelper1" = "Lütfen internet bağlantınızı kontrol edin";
"HttpRequestHelper2" = "Lütfen internet bağlantınızı kontrol edin";
"HttpRequestHelper3" = "Giriş süresi aşıldı";
-"HttpRequestHelper4" = "E-Parti hata veriyor, lütfen daha sonra tekrar deneyin";
+"HttpRequestHelper4" = "E-Party hata veriyor, lütfen daha sonra tekrar deneyin";
"HttpRequestHelper5" = "API hatası, bilinmeyen bilgiler";
"HttpRequestHelper6" = "Lütfen internet bağlantınızı kontrol edin";
"HttpRequestHelper7" = "Giriş süresi aşıldı";
-"AppDelegate_ThirdConfig0" = "E-Parti";
+"AppDelegate_ThirdConfig0" = "E-Party";
"XPMineNotificaPresenter0" = "Sistem bildirimleri";
"XPMineNotificaPresenter1" = "Kapatıldığında, sistem mesajları ve resmi asistan artık size bildirim göstermeyecek";
@@ -531,7 +531,7 @@
"XPIAPRechargeViewController2" = "Şarj Et";
"XPIAPRechargeViewController3" = "Kullanıcı yükleme sözleşmesi";
"XPIAPRechargeViewController4" = "Okudum ve kabul ediyorum";
-"XPIAPRechargeViewController5" = "Herhangi bir sorunuz varsa lütfen müşteri hizmetleri ile iletişime geçin, E-Parti numarası";
+"XPIAPRechargeViewController5" = "Herhangi bir sorunuz varsa lütfen müşteri hizmetleri ile iletişime geçin, E-Party numarası";
"XPIAPRechargeViewController6" = "Hesabım";
"XPIAPRechargeViewController7" = "Uyarı";
"XPIAPRechargeViewController8" = "Şarj başarısız, lütfen müşteri hizmetleri ile iletişime geçin~";
@@ -1237,7 +1237,7 @@
"RoomHeaderView1" = "Çevrimiçi:%ld ID:%ld";
"RoomHeaderView2" = "Çevrimiçi:%ld ID:%ld";
"RoomHeaderView3" = "Bağlantıyı Kopyala";
-"RoomHeaderView4" = "E-Parti'a gel, oyun oyna ve arkadaş edin";
+"RoomHeaderView4" = "E-Party'a gel, oyun oyna ve arkadaş edin";
"RoomHeaderView5" = "Güzel ve tatlı sesli, beraber oynayalım~";
"RoomHeaderView6" = "Favorilere Eklendi";
"RoomHeaderView7" = "Paylaşım Başarılı";
@@ -2159,7 +2159,7 @@
"XPLoginPwdViewController3" = "Şifre girin";
"XPLoginPwdViewController4" = "Telefon ile Giriş";
"XPLoginPwdViewController5" = "Şifremi Unuttum";
-"XPLoginPwdViewController6" = "E-Parti hesabınızı girin";
+"XPLoginPwdViewController6" = "E-Party hesabınızı girin";
"XPLoginBindPhoneResultViewController0" = "Telefon Bağlama Başarılı";
"XPLoginBindPhoneResultViewController1" = "Şu anda bağlı olduğunuz telefon numarası";
@@ -2884,7 +2884,7 @@
"PIMessageContentServiceReplyView0"="Nasıl yüklenir:";
"PIMessageContentServiceReplyView1"="Kopyala";
-"PIMessageContentServiceReplyView2"="1. E-Parti Ses Uygulaması içinde 【Benim】 - 【Parayı Yükle】'ye gidin ve yükleme yapın";
+"PIMessageContentServiceReplyView2"="1. E-Party Ses Uygulaması içinde 【Benim】 - 【Parayı Yükle】'ye gidin ve yükleme yapın";
"PIMessageContentServiceReplyView3"="2. Müşteri hizmetleri ile iletişime geçin ve yükleme bağlantısını alın";
"PIMessageContentServiceReplyView4"="Müşteri Hizmetleri WeChat: %@ ";
"PIMessageContentServiceReplyView5"="Müşteri Hizmetleri Line: %@ ";
@@ -3702,7 +3702,7 @@
"1.0.37_text_52" = "Bu özelliği kullanamazsınız.";
"20.20.51_text_1" = "E-posta Girişi";
-"20.20.51_text_2" = "Welcome to E-Parti";
+"20.20.51_text_2" = "Welcome to E-Party";
"20.20.51_text_3" = "Lütfen kimlik girin";
"20.20.51_text_4" = "Lütfen e-posta girin";
"20.20.51_text_7" = "Lütfen doğrulama kodunu girin";
diff --git a/YuMi/uz-UZ.lproj/InfoPlist.strings b/YuMi/uz-UZ.lproj/InfoPlist.strings
index b4daff8..c72eb91 100644
--- a/YuMi/uz-UZ.lproj/InfoPlist.strings
+++ b/YuMi/uz-UZ.lproj/InfoPlist.strings
@@ -1,7 +1,7 @@
-NSCameraUsageDescription = "\"E-Parti\" sizning rozilingizni talab qiladi, siz tashrif buyurish, fotosurat olish va rasmlaringizni yuklashdan oldin, keyin ularni shaxsiy asosiy sahifangizda boshqalar ko'rishi uchun ko'rsatish";
+NSCameraUsageDescription = "\"E-Party\" sizning rozilingizni talab qiladi, siz tashrif buyurish, fotosurat olish va rasmlaringizni yuklashdan oldin, keyin ularni shaxsiy asosiy sahifangizda boshqalar ko'rishi uchun ko'rsatish";
NSLocalNetworkUsageDescription = "Ilova tarmog'ingizdagi qurilmalarni topadi va ulanadi";
NSLocationWhenInUseUsageDescription = "Siz joylashuv xizmatlaridan foydalanishingiz va yaqin do'stlarni tavsiya qilishingizdan oldin rozilingiz kerak";
-NSMicrophoneUsageDescription = "\"E-Parti\" ovozli suhbat olib borishdan oldin sizning rozilingizni talab qiladi";
-NSPhotoLibraryAddUsageDescription = "\"E-Parti\" fotosuratlarni albomda saqlashdan oldin sizning rozilingizni talab qiladi";
-NSPhotoLibraryUsageDescription = "\"E-Parti\" albomga kirish va yuklash kerak bo'lgan rasmlarni tanlashdan oldin sizning rozilingizni talab qiladi, keyin ularni shaxsiy asosiy sahifangizda boshqalar ko'rishi uchun ko'rsatish";
+NSMicrophoneUsageDescription = "\"E-Party\" ovozli suhbat olib borishdan oldin sizning rozilingizni talab qiladi";
+NSPhotoLibraryAddUsageDescription = "\"E-Party\" fotosuratlarni albomda saqlashdan oldin sizning rozilingizni talab qiladi";
+NSPhotoLibraryUsageDescription = "\"E-Party\" albomga kirish va yuklash kerak bo'lgan rasmlarni tanlashdan oldin sizning rozilingizni talab qiladi, keyin ularni shaxsiy asosiy sahifangizda boshqalar ko'rishi uchun ko'rsatish";
NSUserTrackingUsageDescription = "Iltimos, sizga shaxsiy aktivlar va xizmatlarni taqdim etish uchun idfa ruxsatini olishimizga ruxsat bering. Sizning ma'lumotlaringiz sizning ruxsatingizsiz boshqa maqsadlar uchun ishlatilmaydi";
diff --git a/YuMi/uz-UZ.lproj/Localizable.strings b/YuMi/uz-UZ.lproj/Localizable.strings
index 7b8a369..c4e0bf8 100644
--- a/YuMi/uz-UZ.lproj/Localizable.strings
+++ b/YuMi/uz-UZ.lproj/Localizable.strings
@@ -393,7 +393,7 @@
"XPLoginPwdViewController4" = "Telefon raqami orqali tizimga kirish";
"XPLoginPwdViewController5" = "Parolni unutdingiz";
-"XPLoginPwdViewController6" = "Iltimos E-Parti hisobini kiriting";
+"XPLoginPwdViewController6" = "Iltimos E-Party hisobini kiriting";
"XPLoginBindPhoneResultViewController0" = "Telefonni bog'lash";
"XPLoginBindPhoneResultViewController1" = "Sizning hozirgi bog'langan telefon raqamingiz";
@@ -455,7 +455,7 @@
"XPShareView5" = "Ulashish muvaffaqiyatsiz";
"XPShareView6" = "Ulashishni bekor qilish";
"XPShareView7" = "Bekor qilish";
-"XPShareView8" = "E-Parti ga kelib, o'z eksklyuziv ovozingizni toping";
+"XPShareView8" = "E-Party ga kelib, o'z eksklyuziv ovozingizni toping";
"XPShareView9" = "Tegishli ilovalar yo'qligi sababli ulashish muvaffaqiyatsiz bo'ldi";
"XPFirstRechargeViewController0" = "1. Har bir kishi faqat birinchi to'ldirish afzalligini bir marta olishi mumkin\n2. Har bir ID va qurilma faqat bir marta ishtirok etishi mumkin.";
"XPFirstRechargeViewController1" = "Hozir to'ldirish";
@@ -511,12 +511,12 @@
"HttpRequestHelper1" = "Iltimos tarmoq ulanishini tekshiring";
"HttpRequestHelper2" = "Iltimos tarmoq ulanishini tekshiring";
"HttpRequestHelper3" = "Tizimga kirish sessiyasi muddati tugagan";
-"HttpRequestHelper4" = "E-Parti dam olmoqda, iltimos keyinroq urunib ko'ring";
+"HttpRequestHelper4" = "E-Party dam olmoqda, iltimos keyinroq urunib ko'ring";
"HttpRequestHelper5" = "Serverdan noma'lum xato";
"HttpRequestHelper6" = "Iltimos tarmoq ulanishini tekshiring";
"HttpRequestHelper7" = "Tizimga kirish sessiyasi muddati tugagan.";
-"AppDelegate_ThirdConfig0" = "E-Parti";
+"AppDelegate_ThirdConfig0" = "E-Party";
"XPMineNotificaPresenter0" = "Tizim bildirishnomalari";
"XPMineNotificaPresenter1" = "O'chirilganda, tizim xabarlar va rasmiy yordamchilar endi ogohlantirmaydi";
@@ -911,7 +911,7 @@
"XPIAPRechargeViewController2" = "To'ldirishni tasdiqlash";
"XPIAPRechargeViewController3" = "《Foydalanuvchi To'ldirish Shartnomasi》";
"XPIAPRechargeViewController4" = "Men o'qidim va qabul qildim";
-"XPIAPRechargeViewController5" = "Savollar bo'lsa, iltimos mijozlar xizmatiga murojaat qiling, E-Parti ID";
+"XPIAPRechargeViewController5" = "Savollar bo'lsa, iltimos mijozlar xizmatiga murojaat qiling, E-Party ID";
"XPIAPRechargeViewController6" = "Mening hisobim";
"XPIAPRechargeViewController7" = "Eslatma";
"XPIAPRechargeViewController8" = "To'ldirish muvaffaqiyatsiz. Iltimos yordam uchun mijozlar xizmatiga murojaat qiling.";
@@ -1608,7 +1608,7 @@
"RoomHeaderView1" = "Onlayn: %ld ID: %ld";
"RoomHeaderView2" = "Onlayn: %ld ID: %ld";
"RoomHeaderView3" = "Havolani nusxalash";
-"RoomHeaderView4" = "E-Parti-ga keling, o'yinlar o'ynang va do'stlar orttiring";
+"RoomHeaderView4" = "E-Party-ga keling, o'yinlar o'ynang va do'stlar orttiring";
"RoomHeaderView5" = "Go'zal ovozli chiroyli odamlar ball yutishadi, birga o'ynaylik~";
"RoomHeaderView6" = "Xatcho'p muvaffaqiyatli yaratildi";
"RoomHeaderView7" = "Ulashish muvaffaqiyatli amalga oshirildi";
@@ -2283,7 +2283,7 @@ Tasdiqlangandan so'ng, sekretar sizga uni chop etishda yordam beradi va sizni xa
"XPLoginPwdViewController3" = "Iltimos, parolni kiriting";
"XPLoginPwdViewController4" = "Telefon raqami orqali tizimga kirish";
"XPLoginPwdViewController5" = "Parolni unutdingiz";
-"XPLoginPwdViewController6" = "Iltimos, E-Parti akkauntingizni kiriting";
+"XPLoginPwdViewController6" = "Iltimos, E-Party akkauntingizni kiriting";
"XPLoginBindPhoneResultViewController0" = "Telefonni bog'lash";
"XPLoginBindPhoneResultViewController1" = "Joriy bog'langan telefon raqami";
@@ -3386,7 +3386,7 @@ Tasdiqlangandan so'ng, sekretar sizga uni chop etishda yordam beradi va sizni xa
"PIMessageContentServiceReplyView0"="Qanday to'ldirish kerak:";
"PIMessageContentServiceReplyView1"="Nusxalash";
-"PIMessageContentServiceReplyView2"="1. E-Parti Voice ilovasidagi 【Mening】-- 【Tanga to'ldirish】 bo'limiga o'ting va to'ldiring";
+"PIMessageContentServiceReplyView2"="1. E-Party Voice ilovasidagi 【Mening】-- 【Tanga to'ldirish】 bo'limiga o'ting va to'ldiring";
"PIMessageContentServiceReplyView3"="2. Xizmat ko'rsatuvchi bilan bog'laning";
"PIMessageContentServiceReplyView4"="Xizmat ko'rsatuvchi WeChat: %@ ";
"PIMessageContentServiceReplyView5"="Xizmat ko'rsatuvchi telefon: %@ ";
@@ -3896,7 +3896,7 @@ Tasdiqlangandan so'ng, sekretar sizga uni chop etishda yordam beradi va sizni xa
"1.0.37_text_52" = "Siz bu funksiyadan foydalan olmaysiz.";
"20.20.51_text_1" = "Email Login";
-"20.20.51_text_2" = "E-Parti ga xush kelibsiz";
+"20.20.51_text_2" = "E-Party ga xush kelibsiz";
"20.20.51_text_3" = "Iltimos ID kiriting";
"20.20.51_text_4" = "Iltimos email kiriting";
"20.20.51_text_7" = "Iltimos tasdiqlash kodi kiriting";
diff --git a/YuMi/zh-Hant.lproj/InfoPlist.strings b/YuMi/zh-Hant.lproj/InfoPlist.strings
index c59e884..8b340ec 100644
--- a/YuMi/zh-Hant.lproj/InfoPlist.strings
+++ b/YuMi/zh-Hant.lproj/InfoPlist.strings
@@ -1,8 +1,8 @@
-NSCameraUsageDescription = "「E-Parti」需要您的同意,才可以訪問進行拍照並上傳您的圖片,然後展示在您的個人主頁上,便於他人查看";
+NSCameraUsageDescription = "「E-Party」需要您的同意,才可以訪問進行拍照並上傳您的圖片,然後展示在您的個人主頁上,便於他人查看";
NSLocalNetworkUsageDescription = "此App將可發現和連接到您所用網絡上的設備";
NSLocationWhenInUseUsageDescription = "需要您的同意,才可以進行定位服務,推薦附近好友";
-NSMicrophoneUsageDescription = "「E-Parti」需要您的同意,才可以進行語音聊天";
-NSPhotoLibraryAddUsageDescription = "「E-Parti」需要您的同意,才可以存儲相片到相冊";
-NSPhotoLibraryUsageDescription = "「E-Parti」需要您的同意,才可以訪問相冊並選擇您需要上傳的圖片,然後展示在您的個人主頁上,便於他人查看";
+NSMicrophoneUsageDescription = "「E-Party」需要您的同意,才可以進行語音聊天";
+NSPhotoLibraryAddUsageDescription = "「E-Party」需要您的同意,才可以存儲相片到相冊";
+NSPhotoLibraryUsageDescription = "「E-Party」需要您的同意,才可以訪問相冊並選擇您需要上傳的圖片,然後展示在您的個人主頁上,便於他人查看";
NSUserTrackingUsageDescription = "請允許我們獲取您的IDFA權限,可以為您提供個性化活動和服務。未經您的允許,您的信息將不作其他用途。";
diff --git a/YuMi/zh-Hant.lproj/Localizable.strings b/YuMi/zh-Hant.lproj/Localizable.strings
index a2a24ac..e09001c 100644
--- a/YuMi/zh-Hant.lproj/Localizable.strings
+++ b/YuMi/zh-Hant.lproj/Localizable.strings
@@ -60,7 +60,7 @@
"XPShareView5" = "分享失敗";
"XPShareView6" = "取消分享";
"XPShareView7" = "取消";
-"XPShareView8" = "來E-Parti,邂逅你的專屬聲音";
+"XPShareView8" = "來E-Party,邂逅你的專屬聲音";
"XPShareView9" = "未安装相关App,分享失败";
///XPFirstRechargeViewController.m
"XPFirstRechargeViewController0" = "1.每人僅可獲得1次首充福利\n2.每個ID、設備僅能參加一次。";
@@ -128,13 +128,13 @@
"HttpRequestHelper1" = "請檢查網絡連接";
"HttpRequestHelper2" = "請檢查網絡連接";
"HttpRequestHelper3" = "登錄已過期";
-"HttpRequestHelper4" = "E-Parti開小差中~請稍後再試";
+"HttpRequestHelper4" = "E-Party開小差中~請稍後再試";
"HttpRequestHelper5" = "接口報錯信息未知";
"HttpRequestHelper6" = "請檢查網絡連接";
"HttpRequestHelper7" = "登錄已過期。";
-"AppDelegate_ThirdConfig0" = "E-Parti";
+"AppDelegate_ThirdConfig0" = "E-Party";
"XPMineNotificaPresenter0" = "系統通知";
"XPMineNotificaPresenter1" = "關閉後,系統消息和官方小秘書不再提示";
@@ -545,7 +545,7 @@
"XPIAPRechargeViewController2" = "確定充值";
"XPIAPRechargeViewController3" = "《用戶充值協議》";
"XPIAPRechargeViewController4" = "已閱讀並同意";
-"XPIAPRechargeViewController5" = "如有任何問題請咨詢客服,E-Parti號";
+"XPIAPRechargeViewController5" = "如有任何問題請咨詢客服,E-Party號";
"XPIAPRechargeViewController6" = "我的賬戶";
"XPIAPRechargeViewController7" = "提示";
"XPIAPRechargeViewController8" = "儲值失敗,請聯系客服處理~";
@@ -1263,7 +1263,7 @@
"RoomHeaderView1" = "在線:%ld ID:%ld";
"RoomHeaderView2" = "在線:%ld ID:%ld";
"RoomHeaderView3" = "複製鏈接";
-"RoomHeaderView4" = "來E-Parti,開黑交友玩遊戲";
+"RoomHeaderView4" = "來E-Party,開黑交友玩遊戲";
"RoomHeaderView5" = "人美聲甜帶上分,一起來玩吧~";
"RoomHeaderView6" = "收藏成功";
"RoomHeaderView7" = "分享成功";
@@ -2204,7 +2204,7 @@
"XPLoginPwdViewController3" = "請輸入密碼";
"XPLoginPwdViewController4" = "手機號登錄";
"XPLoginPwdViewController5" = "忘記密碼";
-"XPLoginPwdViewController6" = "請輸入E-Parti賬號";
+"XPLoginPwdViewController6" = "請輸入E-Party賬號";
"XPLoginBindPhoneResultViewController0" = "綁定手機";
"XPLoginBindPhoneResultViewController1" = "您當前綁定的手機號為";
@@ -3075,7 +3075,7 @@
"PIMessageContentServiceReplyView0"="如何儲值:";
"PIMessageContentServiceReplyView1"="復製";
-"PIMessageContentServiceReplyView2"="1.在E-Parti語音App內前往【我的】-- 【儲值金幣】進行儲值";
+"PIMessageContentServiceReplyView2"="1.在E-Party語音App內前往【我的】-- 【儲值金幣】進行儲值";
"PIMessageContentServiceReplyView3"="2.聯系客服獲取儲值鏈接";
"PIMessageContentServiceReplyView4"="客服WeChat: %@ ";
"PIMessageContentServiceReplyView5"="客服Line:%@ ";
@@ -3572,7 +3572,7 @@
"20.20.51_text_1" = "Email 登入";
-"20.20.51_text_2" = "Welcome to E-Parti";
+"20.20.51_text_2" = "Welcome to E-Party";
"20.20.51_text_3" = "請輸入ID";
"20.20.51_text_4" = "請輸入信箱";
"20.20.51_text_7" = "請輸入驗證碼";