Flutter翻译服务插件preklad_io_client的使用

Flutter翻译服务插件preklad_io_client的使用

Prekla.IO API 服务 该包设计用于与翻译API服务一起工作。
https://preklad.io

特性

它允许按需翻译键值对映射或简单的文本消息。
翻译结果存储在缓存中以减少网络请求。

入门

pubspec.yaml 文件中添加 preklad_io_client

dependencies:
  preklad_io_client: any # 或者使用最新版本

Preklad.IO 服务获取 API_KEY。 https://preklad.io

使用方法

配置客户端:

ApiClient.initialize(
      apiKey: 'YOUR_API_KEY',
      sourceLanguage: 'en',
      targetLanguage: 'cs',
    );

翻译纯文本消息:

final result = await ApiClient().translateText(text);

翻译键值对映射:

const textData = {
    'inputField': 'Enter text in English to translate',
    'button': 'Translate',
};
await ApiClient().translateData(textData)

随时通过键使用翻译后的数据:

ApiClient().getTranslationForKey('inputField');

运行示例

查看 example/ 文件夹中的示例应用。

完整示例代码

import 'package:flutter/material.dart';
import 'package:preklad_io_client/preklad_io_client.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  ApiClient.initialize(apiKey: 'YOUR_API_KEY');

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Preklad.io Client Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(
          title: 'Preklad.IO Client Example:  https://preklad.io'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _translatedText = '';
  final _textController = TextEditingController();
  bool _isInitialized = false;

  [@override](/user/override)
  void dispose() {
    _textController.dispose();
    super.dispose();
  }

  [@override](/user/override)
  void initState() {
    super.initState();

    const textData = {
      'inputField': 'Enter text in English to translate',
      'button': 'Translate',
    };

    ApiClient()
        .translateData(textData,
            sourceLanguageCode: 'en', targetLanguageCode: 'es')
        .then((value) {
      setState(() {
        _isInitialized = true;
      });
    });
  }

  String getTextLabel() {
    return ApiClient().getTranslationForKey('inputField');
  }

  String getButtonText() {
    return ApiClient().getTranslationForKey('button');
  }

  buttonClickHandler() async {
    final text = _textController.text;
    final result = await ApiClient().translateText(text);

    setState(() {
      _translatedText = result;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    // 等待翻译数据加载
    if (!_isInitialized) {
      return Scaffold(
        appBar: AppBar(
          title: Text(widget.title),
        ),
        body: const Center(
          child: CircularProgressIndicator(),
        ),
      );
    }

    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            TextField(
              controller: _textController,
              decoration: InputDecoration(
                border: const OutlineInputBorder(),
                labelText: getTextLabel(),
              ),
            ),
            ElevatedButton(
              onPressed: buttonClickHandler,
              child: Text(getButtonText()),
            ),
            if (_translatedText.isNotEmpty)
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: Text(
                  _translatedText,
                  locale: const Locale('es', 'ES'),
                  style: Theme.of(context).textTheme.headlineSmall,
                ),
              ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter翻译服务插件preklad_io_client的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter翻译服务插件preklad_io_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


preklad_io_client 是一个用于在 Flutter 应用中集成翻译服务的插件。它允许你通过 Preklad.io 服务轻松实现多语言翻译。以下是如何使用 preklad_io_client 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 preklad_io_client 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  preklad_io_client: ^最新版本

然后运行 flutter pub get 来获取依赖。

2. 初始化插件

在你的 Flutter 应用中,首先需要初始化 PrekladIoClient。通常你可以在 main.dart 文件中进行初始化:

import 'package:flutter/material.dart';
import 'package:preklad_io_client/preklad_io_client.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 PrekladIoClient
  await PrekladIoClient.initialize(
    apiKey: '你的 API 密钥',
    projectId: '你的项目 ID',
  );

  runApp(MyApp());
}

3. 获取翻译

在应用中,你可以使用 PrekladIoClient 来获取翻译文本。例如:

import 'package:flutter/material.dart';
import 'package:preklad_io_client/preklad_io_client.dart';

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter 翻译示例'),
        ),
        body: Center(
          child: FutureBuilder<String>(
            future: PrekladIoClient.translate('Hello, World!', 'es'), // 翻译为西班牙语
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.waiting) {
                return CircularProgressIndicator();
              } else if (snapshot.hasError) {
                return Text('Error: ${snapshot.error}');
              } else {
                return Text(snapshot.data ?? '');
              }
            },
          ),
        ),
      ),
    );
  }
}

4. 使用翻译缓存

为了减少网络请求,你可以启用翻译缓存。初始化时传递 enableCache: true 参数:

await PrekladIoClient.initialize(
  apiKey: '你的 API 密钥',
  projectId: '你的项目 ID',
  enableCache: true,
);

5. 处理错误

在实际使用中,你可能需要处理翻译过程中可能出现的错误。PrekladIoClient.translate 方法会返回一个 Future,你可以通过 try-catch 块来捕获异常:

try {
  String translatedText = await PrekladIoClient.translate('Hello, World!', 'es');
  print(translatedText);
} catch (e) {
  print('Translation failed: $e');
}
回到顶部