-1

我正在尝试使用 getX 作为颤振状态管理工具。GetX 有其处理语言翻译的方式。我不确定的一件事是如何从远程服务器初始化翻译源,而不是对翻译进行硬编码。通过这种方式,我可以在无需发布新应用的情况下修改翻译。

欢迎任何建议。谢谢。

4

1 回答 1

1

我有DotNet WebAPI后端,我正在发送如下格式的翻译:

[ApiController]
[Route("[controller]")]
public class TranslationsController : ControllerBase
{
    [HttpGet]
    public async Task<IActionResult> GetAll()
    {
        return Ok(new
        {
            en_US = new
            {
                hi = "Hi",
                bye = "Bye"
            },
            bn_BD = new
            {
                hi = "ওহে&quot;,
                bye = "বিদায়&quot;
            }
        });
    }
}

还有我的AppTranslations类:

class AppTranslations extends Translations {
  final Map<String, String> en_US;
  final Map<String, String> bn_BD;

  AppTranslations({required this.en_US, required this.bn_BD});

  static AppTranslations fromJson(dynamic json) {
    return AppTranslations(
    en_US: Map<String, String>.from(json["en_US"]),
    bn_BD: Map<String, String>.from(json["bn_BD"]),
   );
  }

 @override
 Map<String, Map<String, String>> get keys => {
    "en_US": en_US,
    "bn_BD": bn_BD,
  };
}

我的翻译提供者

class TranslationProvider extends GetConnect {
  Future<AppTranslations?> getTranslations() async {
  final url = 'http://192.168.0.106:5000/translations';

  final response = await get(url, decoder: AppTranslations.fromJson);

   if (response.hasError) {
     return Future.error(response.statusText!);
    }

   return response.body;
  }
}

然后在我的主要功能中:

void main() async {
 final translationProvider = TranslationProvider();

 final translations = await translationProvider.getTranslations();

 runApp(MyApp(translations: translations!));
}

这是我的MyApp

class MyApp extends StatelessWidget {
 final AppTranslations translations;

 const MyApp({Key? key, required this.translations}) : super(key: key);

 @override
 Widget build(BuildContext context) {
  return GetMaterialApp(
    translations: translations,
    locale: Locale("en_US"),
    home: MyHomePage(),
  );
 }
}

你完成了!现在您可以在 API 中更新您的翻译,更新将反映在应用程序上。

于 2021-03-27T18:39:24.237 回答