Flutter微软Azure翻译服务插件azure_translation的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter微软Azure翻译服务插件azure_translation的使用

插件简介

azure_translation 是一个用于与微软Azure翻译API交互的包装器。它目前支持以下功能:

  • 列出语言
  • 翻译
  • 语言检测
  • 分句

即将添加的功能包括:

  • 转写(Transliteration)

列出语言

列出语言非常简单:

import 'package:azure_translation/azure_translation.dart' as at;

final langs = (await at.languages()).unwrap();
print(langs.translation?.take(4).join('\n'));
// Language(af, Afrikaans, Afrikaans, ltr)
// Language(am, Amharic, አማርኛ, ltr)
// Language(ar, Arabic, العربية, rtl)
// Language(as, Assamese, অসমীয়া, ltr)

在列表的语言中包含 translationtransliterationdictionary 语言。 可以通过传递可选的 scopes 参数来请求这些中的一个或两个:

listLanguages(scopes: [LanguageScope.translation]);

还有一个可选的 baseLanguage 参数,用于设置 Accept-Language 头部。

final langs = (await at.languages(baseLanguage: 'fr')).unwrap();
print(langs.translationLanguage('en'));
// Language(en, Anglais, English, ltr)

翻译

翻译功能如下:

import 'package:azure_translation/azure_translation.dart' as at;

final res = await at.translate(
    ['hello world', 'good morning'],
    baseLanguage: 'en', // 可选
    languages: ['fr', 'vi', 'ar'],
    key: 'YOUR_AZURE_KEY',
    region: 'YOUR_AZURE_REGION',
);
print(res.object!.join('\n'));
// TranslationResult(hello world, [fr: Salut tout le monde, vi: Chào thế giới, ar: مرحبا بالعالم])
// TranslationResult(good morning, [fr: Bonjour, vi: Xin chào, ar: صباح الخير])

转写(Transliteration)

转写功能如下:

final res = await transliterate(
    ['konnichiwa', 'arigato', 'sayounara'],
    key: key,
    region: region,
    language: 'ja',
    fromScript: 'Latn',
    toScript: 'Jpan',
);
print(res.object!);
// TransliterationResult(ja, Latn -> Jpan, {konnichiwa: こんにちわ, arigato: ありがと, sayounara: さようなら})

语言检测

语言检测功能如下:

final res = await detect(
    ['bonjour', 'hola', 'здравейте'],
    key: key,
    region: region,
);
print(res.object!.join('\n'));
// DetectionResult(bonjour, fr, 1.0, true, false)
// DetectionResult(hola, es, 1.0, true, false)
// DetectionResult(здравейте, bg, 1.0, true, true)
print(res.object!.first.scores);
// {fr: 1.0}

分句

分句功能如下:

final res = await breakSentence(
    [
        'How are you? I am fine. What did you do today?',
        '¿hola, cómo estás? ¿Donde está la biblioteca?',
    ],
    key: key,
    region: region,
);
print(res.object!.join('\n'));
// BrokenSentence([How are you? , I am fine. ,What did you do today?])
// BrokenSentence([¿hola, cómo estás? ,¿Donde está la biblioteca?])

错误处理

错误处理在该包中都是通过结果类模式完成的。 如果HTTP出现问题(例如没有连接),则会抛出异常。 具体来说,它使用了来自 elegent 包的结果类.

final langs = await languages();
final Result<LanguageList, AzureTranslationError> res = await languages();
if (res.ok) {
    final LanguageList languageList = res.object!;
    print('Success! Language list: $languageList');
} else {
    final AzureTranslationError error = res.error!;
    print('Error! $error');
}

示例代码

要运行这些示例,需要在执行目录下创建一个 .env 文件。 .env 应该包含以下变量:

AZURE_KEY=YOUR_AZURE_KEY
AZURE_REGION=YOUR_AZURE_REGION

翻译示例

import 'package:azure_translation/azure_translation.dart' as at;

void main() async {
  final res = await at.translate(
      ['hello world', 'banana', 'bonjour'],
      baseLanguage: 'en', // 可选
      languages: ['fr', 'zh-Hans', 'ru'],
      key: 'YOUR_AZURE_KEY',
      region: 'YOUR_AZURE_REGION',
  );

  print(res.object!.join('\n'));
  // 输出:
  // hello world: [vi: Chào thế giới, zh-Hans: 世界您好, ru: Всем привет]
  // banana: [vi: chuối, zh-Hans: 香蕉, ru: банан]
  // bonjour: [vi: Xin chào, zh-Hans: 你好, ru: Привет]
}

转写示例

import 'package:azure_translation/azure_translation.dart' as at;

void main() async {
  final res = await at.transliterate(
      ['konnichiwa', 'arigato', 'sayounara'],
      key: 'YOUR_AZURE_KEY',
      region: 'YOUR_AZURE_REGION',
      language: 'ja',
      fromScript: 'Latn',
      toScript: 'Jpan',
  );

  print(res.object!);
  // 输出:
  // konnichiwa: こんにちわ
  // arigato: ありがと
  // sayounara: さようなら
}

语言检测示例

import 'package:azure_translation/azure_translation.dart' as at;

void main() async {
  final res = await at.detect(
      ['bonjour', 'hola', 'здравейте'],
      key: 'YOUR_AZURE_KEY',
      region: 'YOUR_AZURE_REGION',
  );

  print(res.object!.join('\n'));
  // 输出:
  // detectionResult(bonjour, fr, 1.0, true, false)
  // detectionResult(hola, es, 1.0, true, false
  // detectionResult(здравейте, bg, 1.0, true, true)

  print(res.object!.first.scores);
  // 输出:
  // {fr: 1.0}
}

分句示例

import 'package:azure_translation/azure_translation.dart' as at;

void main() async {
  final res = await at.breakSentence(
      [
          'How are you? I am fine. What did you do today?',
          '¿hola, cómo estás? ¿Donde está la biblioteca?',
      ],
      key: 'YOUR_AZURE_KEY',
      region: 'YOUR_AZURE_REGION',
  );

  print(res.object!.join('\n'));
  // 输出:
  // brokenSentence([ How are you? ,I am fine. ,What did you do today?])
  // brokenSentence([¿hola, cómo estás? ,¿Donde está la biblioteca?])
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用azure_translation插件与微软Azure翻译服务进行集成的代码示例。这个示例展示了如何设置插件、初始化翻译客户端以及执行翻译操作。

首先,你需要确保你的Flutter项目已经添加了azure_translation依赖。在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  azure_translation: ^最新版本号  # 请替换为最新的插件版本号

然后运行flutter pub get来安装依赖。

接下来,你需要配置Azure翻译服务的API密钥和端点。这通常是在Azure门户中创建的翻译服务资源中获取的。

以下是一个完整的示例代码,展示了如何使用azure_translation插件:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final TranslationClient _translationClient = TranslationClient(
    endpoint: '你的翻译服务端点',  // 例如: "https://your-service-name.cognitiveservices.azure.com/"
    apiKey: '你的API密钥',  // 你的Azure翻译服务API密钥
  );

  String translatedText = '';
  String sourceText = 'Hello, how are you?';
  String targetLanguage = 'zh-Hans';  // 目标语言代码,例如中文简体

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Azure Translation Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              TextField(
                decoration: InputDecoration(labelText: 'Source Text'),
                initialValue: sourceText,
                onChanged: (value) {
                  setState(() {
                    sourceText = value;
                  });
                },
              ),
              SizedBox(height: 16),
              DropdownButton<String>(
                value: targetLanguage,
                onChanged: (String newValue) {
                  setState(() {
                    targetLanguage = newValue;
                  });
                },
                items: <String>[
                  'en', 'es', 'fr', 'de', 'zh-Hans', // 添加更多语言代码根据需要
                ].map<DropdownMenuItem<String>>((String value) {
                  return DropdownMenuItem<String>(
                    value: value,
                    child: Text(value),
                  );
                }).toList(),
              ),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: () async {
                  try {
                    TranslationResult result = await _translationClient.translate(
                      text: sourceText,
                      to: targetLanguage,
                    );
                    setState(() {
                      translatedText = result.translatedText;
                    });
                  } catch (e) {
                    print('Error: $e');
                  }
                },
                child: Text('Translate'),
              ),
              SizedBox(height: 16),
              Text('Translated Text: $translatedText'),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,它包含一个文本字段用于输入源文本,一个下拉菜单用于选择目标语言,以及一个按钮用于触发翻译操作。翻译结果会显示在页面上。

请注意:

  1. 你需要将endpointapiKey替换为你自己的Azure翻译服务资源的值。
  2. 确保你已经在Azure门户中启用了翻译服务,并获取了相应的API密钥和端点。
  3. azure_translation插件的API可能会随着版本更新而变化,因此请参考最新的插件文档以确保代码的正确性。

这个示例应该能帮助你开始在Flutter项目中使用Azure翻译服务。

回到顶部