From: liangzhenying <867174124@qq.com> Date: Thu, 27 Nov 2025 02:59:50 +0000 (+0800) Subject: 日历国际化修改 X-Git-Tag: 1.0.2~51 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=2e9cc95bebe5f5375b719f5b068ccee309779a95;p=mirrors%2FShenYin.git 日历国际化修改 --- diff --git a/ShenYin/ShenYin/UI/Home/Chinese2English/Chinese2EnglishCell.swift b/ShenYin/ShenYin/UI/Home/Chinese2English/Chinese2EnglishCell.swift index 6d55316..b0c10c3 100644 --- a/ShenYin/ShenYin/UI/Home/Chinese2English/Chinese2EnglishCell.swift +++ b/ShenYin/ShenYin/UI/Home/Chinese2English/Chinese2EnglishCell.swift @@ -16,8 +16,6 @@ class Chinese2EnglishCellModel{ } - - class Chinese2EnglishCell:BaseTableViewCell{ let bgView = UIView() let line = BrokenLineView() diff --git a/ShenYin/ShenYin/UI/Home/HistoryRecord/VC/CalendarPickerVC.swift b/ShenYin/ShenYin/UI/Home/HistoryRecord/VC/CalendarPickerVC.swift index ef78132..166ddfe 100644 --- a/ShenYin/ShenYin/UI/Home/HistoryRecord/VC/CalendarPickerVC.swift +++ b/ShenYin/ShenYin/UI/Home/HistoryRecord/VC/CalendarPickerVC.swift @@ -1,36 +1,55 @@ -// -// CalendarPickerVC.swift -// ShenYin -// -// Created by liangshi on 2025/11/14. -// - import UIKit import HorizonCalendar -class CalendarPickerVC:BaseVC{ - - var didSelectedDate:((String)->Void)? +class CalendarPickerVC: BaseVC { + var didSelectedDate: ((String) -> Void)? var monthsLayout: MonthsLayout = MonthsLayout.vertical(options: VerticalMonthsLayoutOptions( pinDaysOfWeekToTop: false, alwaysShowCompleteBoundaryMonths: false, scrollsToFirstMonthOnStatusBarTap: false)) - var defaultDate:String? - var selectedDate:Date? = Date() - var calendarView:CalendarView! + var defaultDate: String? + var selectedDate: Date? = Date() + var calendarView: CalendarView! lazy var calendar = Calendar.current + // 1. 创建年月格式化器 + private lazy var monthHeaderFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.calendar = calendar + formatter.locale = isChinese ? Locale(identifier: "zh_CN"):Locale(identifier: "en_US") + if isChinese{ + formatter.dateFormat = "yyyyå¹´MM月" + } + else{ + formatter.dateFormat = "yyyy-MM" + } + + return formatter + }() + + // 2. 创建星期格式化器(用于自定义星期显示) + private lazy var dayOfWeekFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.calendar = calendar + formatter.locale = isChinese ? Locale(identifier: "zh_CN"):Locale(identifier: "en_US") + // 星期格式:"E" 显示"周一","EEEEE" 显示"一",可根据需求调整 + formatter.dateFormat = isChinese ? "E" : "EEE" + return formatter + }() + + var isChinese:Bool{ + return (DCConfig.appLanguage == .chinse || DCConfig.appLanguage == .chinse) + } override func viewDidLoad() { super.viewDidLoad() - - + navBar.titleLabel.text = "按日期查找".l10n calendarView = CalendarView(initialContent: makeContent()) calendarView.daySelectionHandler = { [weak self] day in - guard let self else { return } + guard let self = self else { return } selectedDate = calendar.date(from: day.components) calendarView.setContent(makeContent()) @@ -38,10 +57,9 @@ class CalendarPickerVC:BaseVC{ defaultDate = text Logger.debug(text) didSelectedDate?(text) - DispatchQueue.main.asyncAfter(deadline:.now() + 0.3) { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { App.shared.popPage() } - } view.addSubview(calendarView) @@ -51,20 +69,16 @@ class CalendarPickerVC:BaseVC{ make.left.right.equalToSuperview() make.bottom.equalToSuperview() } - - } - func makeContent() -> CalendarViewContent { + + func makeContent() -> CalendarViewContent { let startDate = calendar.date(from: DateComponents(year: 2025, month: 11, day: 01))! let endDate = calendar.date(from: DateComponents(year: 2099, month: 12, day: 31))! -// let selectedDate = selectedDate - - let dayDateFormatter = DateFormatter() - dayDateFormatter.calendar = calendar - dayDateFormatter.locale = calendar.locale - - dayDateFormatter.dateFormat = DateFormatter.dateFormat( + let dayDateFormatter = DateFormatter() + dayDateFormatter.calendar = calendar + dayDateFormatter.locale = calendar.locale + dayDateFormatter.dateFormat = DateFormatter.dateFormat( fromTemplate: "EEEE, MMM d, yyyy", options: 0, locale: calendar.locale ?? Locale.current) @@ -77,25 +91,67 @@ class CalendarPickerVC:BaseVC{ .interMonthSpacing(24) .verticalDayMargin(8) .horizontalDayMargin(8) - - .dayItemProvider { [self, calendar, dayDateFormatter] day in + // 月份标题配置 + .monthHeaderItemProvider { [weak self] month in + guard let self = self, let monthDate = self.calendar.date(from: month.components) else { + return nil + } + let monthText = self.monthHeaderFormatter.string(from: monthDate) + let content = MonthHeaderView.Content( + monthText: monthText, + accessibilityLabel: monthText + ) + var style = MonthHeaderView.InvariantViewProperties.base + style.font = .systemFont(ofSize: 18, weight: .semibold) + style.textColor = .darkGray + return MonthHeaderView.calendarItemModel( + invariantViewProperties: style, + content: content + ) + } + + // 3. 星期标题配置(自定义星期格式) + .dayOfWeekItemProvider { [weak self] month, weekdayIndex in // 接收两个参数:month和weekdayIndex + guard let self = self else { return nil } + + // 使用weekdayIndex创建日期组件(1-7对应周日到周六,具体取决于日历设置) + let dateComponents = DateComponents( + calendar: self.calendar, weekday: weekdayIndex + 1 + ) + guard let date = self.calendar.date(from: dateComponents) else { + return nil + } + + // 格式化星期文本(如“周一”“周二”) + let dayOfWeekText = self.dayOfWeekFormatter.string(from: date) + + // 配置星期标题的样式 + var style = DayOfWeekView.InvariantViewProperties.base + style.font = .systemFont(ofSize: 14, weight: .medium) + style.textColor = .gray + + // 返回星期标题的视图模型(content参数名应为dayOfWeekText,而非text) + return DayOfWeekView.calendarItemModel( + invariantViewProperties: style, + content: .init( + dayOfWeekText: dayOfWeekText, // 修正参数名 + accessibilityLabel: dayOfWeekText + ) + ) + } + + // 日期配置 + .dayItemProvider { [weak self, calendar, dayDateFormatter] day in + guard let self else { return nil } // 解包 weak self + var invariantViewProperties = DayView.InvariantViewProperties.baseInteractive let date = calendar.date(from: day.components) let selectedDate = date?.format(.short) if let text = defaultDate, selectedDate == text { -// invariantViewProperties.backgroundShapeDrawingConfig.borderColor = .blue invariantViewProperties.backgroundShapeDrawingConfig.fillColor = .color(.theme).withAlphaComponent(0.5) } - - -// return DayView.calendarItemModel( -// invariantViewProperties: invariantViewProperties, -// content: .init( -// dayText: "\(day.day)", -// accessibilityLabel: date.map { dayDateFormatter.string(from: $0) }, -// accessibilityHint: nil)) return DayView.calendarItemModel( invariantViewProperties: invariantViewProperties, content: .init(