You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中如何根据当前Locale为文本设置不同字体?

解决方案:根据Locale自动切换字体

因为@Environment只能在View或ViewModifier的上下文里使用,直接扩展Font类无法读取环境变量,所以我们可以通过自定义ViewModifier来实现需求,下面提供两种简洁的实现方式:

方式一:通用化的多样式支持

先定义一个支持多种字体样式的ViewModifier,后续可以轻松扩展更多样式:

// 定义字体样式枚举,方便扩展
enum AppFontStyle {
    case title
    case headline
    case body
}

// 自定义Modifier处理Locale判断和字体切换
struct LocalizedFontModifier: ViewModifier {
    @Environment(\.locale) private var locale
    private let style: AppFontStyle
    
    init(style: AppFontStyle) {
        self.style = style
    }
    
    func body(content: Content) -> some View {
        content.font(resolveFont())
    }
    
    private func resolveFont() -> Font {
        let isKurdish = locale.identifier == "ku"
        switch style {
        case .title:
            return isKurdish ? Font.custom("rabar_013", size: 30) : .title
        case .headline:
            return isKurdish ? Font.custom("rabar_013", size: 24) : .headline
        case .body:
            return isKurdish ? Font.custom("rabar_013", size: 17) : .body
        }
    }
}

// 给View做扩展,简化调用
extension View {
    func appFont(_ style: AppFontStyle) -> some View {
        modifier(LocalizedFontModifier(style: style))
    }
}

调用方式:

Text("Test") // 配合Localizable.strings自动切换中英文/库尔德语文本
    .appFont(.title)

方式二:针对单一样式的极简实现

如果只需要支持title这一种样式,可以直接写更简洁的扩展:

extension View {
    func myTitleFont() -> some View {
        modifier(MyTitleFontModifier())
    }
}

private struct MyTitleFontModifier: ViewModifier {
    @Environment(\.locale) private var locale
    
    func body(content: Content) -> some View {
        let targetFont = locale.identifier == "ku" 
            ? Font.custom("rabar_013", size: 30) 
            : Font.title
        return content.font(targetFont)
    }
}

调用方式:

Text("Test")
    .myTitleFont()

注意事项

  • 确保自定义字体rabar_013已正确导入项目,并且在Info.plist的Fonts provided by application中配置了对应字体文件名
  • 文本内容的多语言切换需要依赖项目中的Localizable.strings文件,分别维护英文和库尔德语的对应翻译

内容的提问来源于stack exchange,提问作者Enos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 06:45:45