日历国际化修改
authorliangzhenying <867174124@qq.com>
Thu, 27 Nov 2025 02:59:50 +0000 (10:59 +0800)
committerliangzhenying <867174124@qq.com>
Thu, 27 Nov 2025 02:59:50 +0000 (10:59 +0800)
ShenYin/ShenYin/UI/Home/Chinese2English/Chinese2EnglishCell.swift
ShenYin/ShenYin/UI/Home/HistoryRecord/VC/CalendarPickerVC.swift

index 6d55316..b0c10c3 100644 (file)
@@ -16,8 +16,6 @@ class Chinese2EnglishCellModel{
 }
 
 
-
-
 class Chinese2EnglishCell:BaseTableViewCell{
     let bgView = UIView()
     let line = BrokenLineView()
index ef78132..166ddfe 100644 (file)
@@ -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(