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

如何在Flutter中实现类似Android R.string.ok的多语言本地化(支持安卓iOS)

Flutter's Equivalent to Android's R.string.ok (Cross-Platform for Android & iOS)

Absolutely! Flutter provides a built-in, cross-platform localization system that mirrors the convenience of Android's R.string approach—even better, it works seamlessly across both Android and iOS without needing separate native configurations. Here's how it works:

Step 1: Set Up Dependencies

First, add the required packages to your pubspec.yaml:

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter
  intl: ^0.18.1 # Optional, for date/number localization helpers

Run flutter pub get to install these dependencies.

Step 2: Create Localization Resource Files

Instead of Android's values/strings.xml folders, Flutter uses ARB (Application Resource Bundle) files, which are JSON-based. Create a lib/l10n directory, then add locale-specific files:

  • For English (app_en.arb):
{
  "ok": "OK",
  "@ok": {
    "description": "Text for the OK button"
  }
}
  • For Spanish (app_es.arb):
{
  "ok": "DE ACUERDO",
  "@ok": {
    "description": "Texto para el botón OK"
  }
}

Step 3: Configure Pubspec to Generate the "R.string" Equivalent

Add this to your pubspec.yaml under the flutter section to enable auto-generation of the localization class:

flutter:
  generate: true
  localizations:
    sdk: flutter
  supported_locales:
    - en # English
    - es # Spanish

Run flutter pub get again—Flutter will automatically generate an AppLocalizations class, which acts exactly like Android's R.string!

Step 4: Access Localized Strings Like R.string.ok

To use your localized strings, you can access them via the generated AppLocalizations class. For a cleaner syntax (similar to R.string.ok), create an extension on BuildContext:

import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';

extension AppLocalizationsX on BuildContext {
  AppLocalizations get l10n => AppLocalizations.of(this)!;
}

Now you can access your strings anywhere with a context:

Text(context.l10n.ok) // Displays "OK" in English, "DE ACUERDO" in Spanish

Does This Work for Both Android and iOS?

Yes! This system is fully cross-platform. Flutter handles detecting the device's system language automatically, just like Android does, and loads the correct ARB file—no need to set up iOS-specific Localizable.strings files separately. The same codebase works for both platforms.

Bonus: Key Advantages Over Android's Native Approach

  • Single source of truth for localization strings (no duplicate files across Android/iOS)
  • Type-safe access (the generated AppLocalizations class will throw errors if you reference a non-existent string, preventing runtime bugs)
  • Supports more complex localization needs (plurals, gender, placeholders) out of the box

内容的提问来源于stack exchange,提问作者Hasan A Yousef

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:40:08