Bladeren bron

use custom i18n

Caijinglong 6 jaren geleden
bovenliggende
commit
b6f9cc418e

+ 53 - 0
example/lib/i18n/cn.dart

@@ -0,0 +1,53 @@
+part of 'i18n.dart';
+
+class _I18nZh extends I18n {
+  _I18nZh() : super._();
+
+  @override
+  String get indexTitle => "首页";
+
+  @override
+  String get assetButton => "播放asset视频";
+
+  @override
+  String get fullScreenAutoButton => "全屏切换示例(自动)";
+
+  @override
+  String get fullScreenManualButton => "全屏切换示例(手动)";
+
+  @override
+  String get listViewButton => "在ListView中";
+
+  @override
+  String get networkButton => "播放网络视频";
+
+  @override
+  String get pageViewButton => "在PageView中播放视频";
+
+  @override
+  String get photoButton => "在相册中播放";
+
+  @override
+  String get withDialogButton => "在dialog中播放";
+
+  @override
+  String get showDialog => "显示 dialog";
+
+  @override
+  String get autoFullScreenTitle => "切换横竖屏可以看到界面变化";
+
+  @override
+  String get changeFullScreenWithButton => "点击按钮切换横竖屏";
+
+  @override
+  String get fullScreen => "全屏";
+
+  @override
+  String get play => "播放";
+
+  @override
+  String get noPickTip => "没有选择";
+
+  @override
+  String get pick => "选择";
+}

+ 52 - 0
example/lib/i18n/en.dart

@@ -0,0 +1,52 @@
+part of 'i18n.dart';
+
+class _I18nEn extends I18n {
+  _I18nEn() : super._();
+
+  @override
+  String get indexTitle => "index";
+
+  @override
+  String get assetButton => "Play asset video";
+
+  @override
+  String get fullScreenAutoButton => "Full Screen (Auto)";
+
+  @override
+  String get fullScreenManualButton => "Full Screen (Manual)";
+
+  @override
+  String get listViewButton => "Use in ListView";
+
+  @override
+  String get networkButton => "Play network video";
+
+  @override
+  String get pageViewButton => "Use in PageView";
+
+  @override
+  String get photoButton => "Play video in photo";
+
+  @override
+  String get withDialogButton => "Play with dialog";
+
+  @override
+  String get showDialog => "Show dialog";
+
+  @override
+  String get autoFullScreenTitle => "Rotate device to see change";
+  @override
+  String get changeFullScreenWithButton => "Click button to show change";
+
+  @override
+  String get fullScreen => "full screen";
+
+  @override
+  String get play => "play";
+
+  @override
+  String get noPickTip => "at least pick one video";
+
+  @override
+  String get pick => "pick";
+}

+ 41 - 0
example/lib/i18n/i18n.dart

@@ -0,0 +1,41 @@
+import 'dart:ui';
+part 'cn.dart';
+part 'en.dart';
+
+abstract class I18n {
+  I18n._();
+
+  factory I18n(Locale locale) {
+    if (locale.languageCode == "zh") {
+      return _I18nZh();
+    } else {
+      return _I18nEn();
+    }
+  }
+
+  String get indexTitle;
+  String get networkButton;
+  String get photoButton;
+  String get assetButton;
+  String get listViewButton;
+  String get fullScreenAutoButton;
+  String get fullScreenManualButton;
+  String get withDialogButton;
+  String get pageViewButton;
+
+  String get showDialog;
+
+  String get autoFullScreenTitle;
+
+  String get changeFullScreenWithButton;
+
+  String get play;
+
+  String get fullScreen;
+
+  String get pick;
+
+  String get noPickTip;
+}
+
+I18n get currentI18n => I18n(window.locale);

+ 11 - 0
example/lib/main.dart

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
 import 'package:flutter_ijkplayer/flutter_ijkplayer.dart';
 import 'package:ijkplayer_example/page/index.dart';
 import 'package:oktoast/oktoast.dart';
+import 'package:flutter_localizations/flutter_localizations.dart';
 
 void main() {
   IjkConfig.isLog = true;
@@ -16,11 +17,21 @@ class MyApp extends StatefulWidget {
 }
 
 class _MyAppState extends State<MyApp> {
+  @override
+  void initState() {
+    super.initState();
+  }
+
   @override
   Widget build(BuildContext context) {
     return OKToast(
       child: MaterialApp(
         home: IndexPage(),
+        supportedLocales: [
+          Locale("cn"),
+          Locale("en"),
+        ],
+        localizationsDelegates: GlobalMaterialLocalizations.delegates,
       ),
     );
   }

+ 2 - 1
example/lib/page/asset_page.dart

@@ -1,5 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_ijkplayer/flutter_ijkplayer.dart';
+import 'package:ijkplayer_example/i18n/i18n.dart';
 
 class AssetPage extends StatefulWidget {
   @override
@@ -13,7 +14,7 @@ class _AssetPageState extends State<AssetPage> {
   Widget build(BuildContext context) {
     return Scaffold(
       appBar: AppBar(
-        title: Text("播放资产"),
+        title: Text(currentI18n.assetButton),
       ),
       body: ListView(
         children: <Widget>[

+ 3 - 2
example/lib/page/dialog_video_page.dart

@@ -1,5 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_ijkplayer/flutter_ijkplayer.dart';
+import 'package:ijkplayer_example/i18n/i18n.dart';
 
 class DialogVideoPage extends StatefulWidget {
   @override
@@ -19,13 +20,13 @@ class _DialogVideoPageState extends State<DialogVideoPage> {
   Widget build(BuildContext context) {
     return Scaffold(
       appBar: AppBar(
-        title: Text("在dialog中显示ijkplayer"),
+        title: Text(currentI18n.withDialogButton),
       ),
       body: Center(
         child: Column(
           children: <Widget>[
             FlatButton(
-              child: Text("显示dialog"),
+              child: Text(currentI18n.showDialog),
               onPressed: showIJKDialog,
             ),
           ],

+ 5 - 12
example/lib/page/full_screen.dart

@@ -1,5 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_ijkplayer/flutter_ijkplayer.dart';
+import 'package:ijkplayer_example/i18n/i18n.dart';
 
 class FullScreen extends StatefulWidget {
   @override
@@ -33,7 +34,7 @@ class _FullScreenState extends State<FullScreen> {
     }
     return Scaffold(
       appBar: AppBar(
-        title: Text("切换横竖屏可以看到界面变化"),
+        title: Text(currentI18n.autoFullScreenTitle),
       ),
       body: ListView(
         children: <Widget>[
@@ -135,17 +136,9 @@ class _FullScreen2State extends State<FullScreen2> {
   }
 
   Widget buildNormal() {
-    // SystemChrome.setEnabledSystemUIOverlays([
-    //   SystemUiOverlay.top,
-    //   SystemUiOverlay.bottom,
-    // ]);
-    // OrientationPlugin.setEnabledSystemUIOverlays([
-    //   SystemUiOverlay.top,
-    //   SystemUiOverlay.bottom,
-    // ]);
     return Scaffold(
       appBar: AppBar(
-        title: Text("手动切换全屏(强制)"),
+        title: Text(currentI18n.changeFullScreenWithButton),
       ),
       body: ListView(
         children: <Widget>[
@@ -166,11 +159,11 @@ class _FullScreen2State extends State<FullScreen2> {
               await controller.setDataSource(source);
               await controller.play();
             },
-            child: Text("播放"),
+            child: Text(currentI18n.play),
           ),
           RaisedButton(
             onPressed: setLandScapeLeft,
-            child: Text("全屏"),
+            child: Text(currentI18n.fullScreen),
           ),
         ],
       ),

+ 3 - 2
example/lib/page/gallery_page.dart

@@ -2,6 +2,7 @@ import 'dart:io';
 
 import 'package:flutter/material.dart';
 import 'package:flutter_ijkplayer/flutter_ijkplayer.dart';
+import 'package:ijkplayer_example/i18n/i18n.dart';
 import 'package:photo/photo.dart';
 
 class PlayGalleryPage extends StatefulWidget {
@@ -29,12 +30,12 @@ class _PlayGalleryPageState extends State<PlayGalleryPage> {
   Widget build(BuildContext context) {
     return Scaffold(
       appBar: AppBar(
-        title: Text("播放相册视频"),
+        title: Text(currentI18n.photoButton),
       ),
       body: ListView(
         children: <Widget>[
           FlatButton(
-            child: Text("选择"),
+            child: Text("Pick"),
             onPressed: _pickVideo,
           ),
           _buildFileText(),

+ 10 - 9
example/lib/page/index.dart

@@ -1,4 +1,5 @@
 import 'package:flutter/material.dart';
+import 'package:ijkplayer_example/i18n/i18n.dart';
 import 'package:ijkplayer_example/page/asset_page.dart';
 import 'package:ijkplayer_example/page/dialog_video_page.dart';
 import 'package:ijkplayer_example/page/full_screen.dart';
@@ -17,18 +18,18 @@ class _IndexPageState extends State<IndexPage> {
   Widget build(BuildContext context) {
     return Scaffold(
       appBar: AppBar(
-        title: Text("首页"),
+        title: Text(currentI18n.indexTitle),
       ),
       body: ListView(
         children: <Widget>[
-          buildButton("播放网络视频", NetworkPage()),
-          buildButton("播放相册视频", PlayGalleryPage()),
-          buildButton("播放应用asset", AssetPage()),
-          buildButton("ListView中插入视频(未完成)", VideoList()),
-          buildButton("全屏切换示例(自动)", FullScreen()),
-          buildButton("全屏切换示例(手动)", FullScreen2()),
-          buildButton("在dialog中播放显示视频", DialogVideoPage()),
-          buildButton("纵向视频", PagingPickPage()),
+          buildButton(currentI18n.networkButton, NetworkPage()),
+          buildButton(currentI18n.photoButton, PlayGalleryPage()),
+          buildButton(currentI18n.assetButton, AssetPage()),
+          buildButton(currentI18n.listViewButton, VideoList()),
+          buildButton(currentI18n.fullScreenAutoButton, FullScreen()),
+          buildButton(currentI18n.fullScreenManualButton, FullScreen2()),
+          buildButton(currentI18n.withDialogButton, DialogVideoPage()),
+          buildButton(currentI18n.pageViewButton, PagingPickPage()),
         ],
       ),
     );

+ 3 - 2
example/lib/page/network.dart

@@ -1,5 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_ijkplayer/flutter_ijkplayer.dart';
+import 'package:ijkplayer_example/i18n/i18n.dart';
 
 class NetworkPage extends StatefulWidget {
   @override
@@ -41,7 +42,7 @@ class _NetworkPageState extends State<NetworkPage> {
   Widget build(BuildContext context) {
     return Scaffold(
       appBar: AppBar(
-        title: Text("播放网络资源"),
+        title: Text(currentI18n.networkButton),
       ),
       body: ListView(
         children: <Widget>[
@@ -53,7 +54,7 @@ class _NetworkPageState extends State<NetworkPage> {
                 ),
               ),
               FlatButton(
-                child: Text("播放"),
+                child: Text(currentI18n.play),
                 onPressed: _playInput,
               ),
             ],

+ 4 - 3
example/lib/page/paging_page.dart

@@ -1,5 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_ijkplayer/flutter_ijkplayer.dart';
+import 'package:ijkplayer_example/i18n/i18n.dart';
 import 'package:oktoast/oktoast.dart';
 import 'package:photo/photo.dart';
 
@@ -8,12 +9,12 @@ class PagingPickPage extends StatelessWidget {
   Widget build(BuildContext context) {
     return Scaffold(
       appBar: AppBar(
-        title: Text("选择视频"),
+        title: Text(currentI18n.pick),
       ),
       body: ListView(
         children: <Widget>[
           FlatButton(
-            child: Text("选择视频并开启"),
+            child: Text(currentI18n.pick),
             onPressed: () => pickVideo(context),
           ),
         ],
@@ -29,7 +30,7 @@ class PagingPickPage extends StatelessWidget {
     );
 
     if (photos == null || photos.isEmpty) {
-      showToast("没选择视频");
+      showToast(currentI18n.noPickTip);
       return;
     }
 

+ 2 - 1
example/lib/page/video_list.dart

@@ -1,5 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_ijkplayer/flutter_ijkplayer.dart';
+import 'package:ijkplayer_example/i18n/i18n.dart';
 
 class VideoList extends StatefulWidget {
   @override
@@ -39,7 +40,7 @@ class _VideoListState extends State<VideoList> {
   Widget build(BuildContext context) {
     return Scaffold(
       appBar: AppBar(
-        title: Text("列表中IJKPlayer"),
+        title: Text(currentI18n.listViewButton),
       ),
       body: ListView.separated(
         itemBuilder: _buildItem,

+ 111 - 1
example/pubspec.lock

@@ -1,6 +1,20 @@
 # Generated by pub
 # See https://www.dartlang.org/tools/pub/glossary#lockfile
 packages:
+  analyzer:
+    dependency: transitive
+    description:
+      name: analyzer
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "0.35.4"
+  args:
+    dependency: transitive
+    description:
+      name: args
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.5.1"
   async:
     dependency: transitive
     description:
@@ -29,6 +43,20 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "1.14.11"
+  convert:
+    dependency: transitive
+    description:
+      name: convert
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.1.1"
+  crypto:
+    dependency: transitive
+    description:
+      name: crypto
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.0.6"
   cupertino_icons:
     dependency: "direct main"
     description:
@@ -36,23 +64,70 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "0.1.2"
+  dart_style:
+    dependency: transitive
+    description:
+      name: dart_style
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.2.4"
   flutter:
     dependency: "direct main"
     description: flutter
     source: sdk
     version: "0.0.0"
   flutter_ijkplayer:
-    dependency: "direct dev"
+    dependency: "direct main"
     description:
       path: ".."
       relative: true
     source: path
     version: "0.1.8"
+  flutter_localizations:
+    dependency: "direct main"
+    description: flutter
+    source: sdk
+    version: "0.0.0"
   flutter_test:
     dependency: "direct dev"
     description: flutter
     source: sdk
     version: "0.0.0"
+  front_end:
+    dependency: transitive
+    description:
+      name: front_end
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "0.1.14"
+  glob:
+    dependency: transitive
+    description:
+      name: glob
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.1.7"
+  intl:
+    dependency: "direct main"
+    description:
+      name: intl
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "0.15.8"
+  intl_translation:
+    dependency: "direct dev"
+    description:
+      name: intl_translation
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "0.17.3"
+  kernel:
+    dependency: transitive
+    description:
+      name: kernel
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "0.3.14"
   matcher:
     dependency: transitive
     description:
@@ -74,6 +149,13 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.1.6"
+  package_config:
+    dependency: transitive
+    description:
+      name: package_config
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.0.5"
   path:
     dependency: transitive
     description:
@@ -88,6 +170,13 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "1.5.0"
+  petitparser:
+    dependency: transitive
+    description:
+      name: petitparser
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.2.1"
   photo:
     dependency: "direct main"
     description:
@@ -102,6 +191,13 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "0.3.3"
+  pub_semver:
+    dependency: transitive
+    description:
+      name: pub_semver
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.4.2"
   quiver:
     dependency: transitive
     description:
@@ -170,6 +266,20 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.0.8"
+  watcher:
+    dependency: transitive
+    description:
+      name: watcher
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "0.9.7+10"
+  yaml:
+    dependency: transitive
+    description:
+      name: yaml
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.1.15"
 sdks:
   dart: ">=2.2.0 <3.0.0"
   flutter: ">=0.3.0 <2.0.0"

+ 8 - 3
example/pubspec.yaml

@@ -8,20 +8,25 @@ environment:
 dependencies:
   flutter:
     sdk: flutter
-
   # The following adds the Cupertino Icons font to your application.
   # Use with the CupertinoIcons class for iOS style icons.
   cupertino_icons: ^0.1.2
   photo: ^0.3.3
   oktoast: ^2.1.6
 
-dev_dependencies:
-  flutter_test:
+  flutter_localizations:
     sdk: flutter
+  intl: ^0.15.8
 
   flutter_ijkplayer:
     path: ../
 
+dev_dependencies:
+  flutter_test:
+    sdk: flutter
+
+  intl_translation: ^0.17.3
+
 # For information on the generic Dart part of this file, see the
 # following page: https://www.dartlang.org/tools/pub/pubspec