Sfoglia il codice sorgente

Merge branch 'languages' of https://git.yishihui.com/iOS/BFCommonKit

wenweiwei 3 anni fa
parent
commit
484167404b
42 ha cambiato i file con 949 aggiunte e 1 eliminazioni
  1. 3 0
      BFCommonKit/Assets/BFCommonKit.xcassets/videomk_music_default.imageset/Contents.json
  2. 44 0
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle1.imageset/Contents.json
  3. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle1.imageset/wordStyle1.png
  4. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle1.imageset/wordStyle1@2x.png
  5. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle1.imageset/wordStyle1@3x.png
  6. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle1.imageset/wordStyle2.png
  7. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle1.imageset/wordStyle2@2x.png
  8. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle1.imageset/wordStyle2@3x.png
  9. 23 0
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle2.imageset/Contents.json
  10. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle2.imageset/wordStyle2.png
  11. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle2.imageset/wordStyle2@2x.png
  12. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle2.imageset/wordStyle2@3x.png
  13. 23 0
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle3.imageset/Contents.json
  14. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle3.imageset/wordStyle3.png
  15. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle3.imageset/wordStyle3@2x.png
  16. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle3.imageset/wordStyle3@3x.png
  17. 23 0
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle4.imageset/Contents.json
  18. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle4.imageset/wordStyle4.png
  19. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle4.imageset/wordStyle4@2x.png
  20. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle4.imageset/wordStyle4@3x.png
  21. 23 0
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle5.imageset/Contents.json
  22. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle5.imageset/wordStyle5.png
  23. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle5.imageset/wordStyle5@2x.png
  24. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle5.imageset/wordStyle5@3x.png
  25. 23 0
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle6.imageset/Contents.json
  26. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle6.imageset/wordStyle6.png
  27. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle6.imageset/wordStyle6@2x.png
  28. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle6.imageset/wordStyle6@3x.png
  29. 23 0
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle7.imageset/Contents.json
  30. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle7.imageset/wordStyle7.png
  31. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle7.imageset/wordStyle7@2x.png
  32. BIN
      BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle7.imageset/wordStyle7@3x.png
  33. 103 0
      BFCommonKit/Assets/Base.lproj/Localizable.strings
  34. 103 0
      BFCommonKit/Assets/en.lproj/Localizable.strings
  35. 103 0
      BFCommonKit/Assets/ja.lproj/Localizable.strings
  36. 103 0
      BFCommonKit/Assets/ko-KR.lproj/Localizable.strings
  37. 103 0
      BFCommonKit/Assets/vi.lproj/Localizable.strings
  38. 103 0
      BFCommonKit/Assets/zh-Hans.lproj/Localizable.strings
  39. 25 0
      BFCommonKit/Classes/BFCategorys/BFString+Ext.swift
  40. 60 0
      BFCommonKit/Classes/BFUtility/BFLocalizedUtil.swift
  41. 1 1
      BFCommonKit/Classes/BFUtility/PQPHAssetVideoParaseUtil.swift
  42. 60 0
      BFLocalizedUtil.swift

+ 3 - 0
BFCommonKit/Assets/BFCommonKit.xcassets/videomk_music_default.imageset/Contents.json

@@ -18,5 +18,8 @@
   "info" : {
     "author" : "xcode",
     "version" : 1
+  },
+  "properties" : {
+    "localizable" : true
   }
 }

+ 44 - 0
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle1.imageset/Contents.json

@@ -0,0 +1,44 @@
+{
+  "images" : [
+    {
+      "filename" : "wordStyle1.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "wordStyle1@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "wordStyle1@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    },
+    {
+      "filename" : "wordStyle2.png",
+      "idiom" : "universal",
+      "locale" : "en",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "wordStyle2@2x.png",
+      "idiom" : "universal",
+      "locale" : "en",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "wordStyle2@3x.png",
+      "idiom" : "universal",
+      "locale" : "en",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  },
+  "properties" : {
+    "localizable" : true
+  }
+}

BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle1.imageset/wordStyle1.png


BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle1.imageset/wordStyle1@2x.png


BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle1.imageset/wordStyle1@3x.png


BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle1.imageset/wordStyle2.png


BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle1.imageset/wordStyle2@2x.png


BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle1.imageset/wordStyle2@3x.png


+ 23 - 0
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle2.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "wordStyle2.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "wordStyle2@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "wordStyle2@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle2.imageset/wordStyle2.png


BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle2.imageset/wordStyle2@2x.png


BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle2.imageset/wordStyle2@3x.png


+ 23 - 0
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle3.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "wordStyle3.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "wordStyle3@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "wordStyle3@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle3.imageset/wordStyle3.png


BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle3.imageset/wordStyle3@2x.png


BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle3.imageset/wordStyle3@3x.png


+ 23 - 0
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle4.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "wordStyle4.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "wordStyle4@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "wordStyle4@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle4.imageset/wordStyle4.png


BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle4.imageset/wordStyle4@2x.png


BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle4.imageset/wordStyle4@3x.png


+ 23 - 0
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle5.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "wordStyle5.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "wordStyle5@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "wordStyle5@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle5.imageset/wordStyle5.png


BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle5.imageset/wordStyle5@2x.png


BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle5.imageset/wordStyle5@3x.png


+ 23 - 0
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle6.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "wordStyle6.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "wordStyle6@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "wordStyle6@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle6.imageset/wordStyle6.png


BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle6.imageset/wordStyle6@2x.png


BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle6.imageset/wordStyle6@3x.png


+ 23 - 0
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle7.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "wordStyle7.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "wordStyle7@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "wordStyle7@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle7.imageset/wordStyle7.png


BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle7.imageset/wordStyle7@2x.png


BIN
BFCommonKit/Assets/BFCommonKit.xcassets/wordStyle7.imageset/wordStyle7@3x.png


+ 103 - 0
BFCommonKit/Assets/Base.lproj/Localizable.strings

@@ -0,0 +1,103 @@
+"record_ly"="Hold to Record";
+"record_lz"="Hold to Record";
+"record_pause"="Relase to Pause";
+"record_back"="Back";
+"record_delete"="Delete Record";
+"record_undo"="Undo";
+"record_recover"="Recover";
+"home_agreement_tittle"="Welcome";
+"home_agreement_begin"="Please read the agreement";
+"home_agreement_privacy"="《Privacy Policy》";
+"home_agreement_service"="《Terms of Service》";
+"home_agreement_remarks"="Understand user rights and obligations and personal information processing rules";
+"home_agreement_prompt"="You are indicating that you agree Terms of Service and Privacy Policy";
+"option_accept"="Accept ";
+"option_refuse"="Refuse ";
+"option_ok"="OK";
+"option_cancel"="Cancel";
+"hone_privacy"="Terms of Service";
+"hone_service"="Privacy Policy";
+"hone_star"="Choose videos/images\n Narrate your videos";
+"home_title"="Narrate your videos";
+"home_shoot"="Shoot";
+"home_choose"="Choose";
+"grant_camera"="For recording";
+"grant_subtitles"="For generate subtitles";
+"grant_dubbing"="For dubbing";
+"grant_photos"="For select photos";
+"grant_micpass"="You need to turn on \"microphone permission\" to record";
+"grant_open"="Open";
+"album_title"="Choose from album ";
+"album_tips"="Please enable permission to use albums";
+"album_add"="Add photos";
+"album_fail_none"="No photos or videos";
+"album_fail_none2"="No photos or videos";
+"album_fail_novideo"="No photos available";
+"album_fail_nophoto"="No videos available";
+"option_refresh"="Refresh/Retry";
+"album_fail_load"="Content load failure";
+"album_reloading"="Reloading ";
+"album_Grant"="Grant permissions";
+"album_addvideo"="Add videos";
+"album_max_%@_count"="Select a maximum of %1$@ photos/videos";
+"album_fail_proportion"="This proportion of material is not supported temporarily";
+"album_fail_type"="This type of material is not supported at present";
+"album_all"="All ";
+"album_deleted"="Recently Deleted";
+"album_projects"="Recent Projects";
+"album_recents"="Recents";
+"album_album"="Album";
+"album_video"="Videos";
+"shoot_tips_switch"="You haven't recorded content yet, switching paragraphs will cancel the recording";
+"shoot_tips_least"="The shortest recording is 1 second";
+"shoot_tips_max"="Do add 20 more paragraphs";
+"tips_full"="Video recording finished";
+"function_voice"="Voice";
+"sound_record_ture"="Recording-Original sound";
+"sound_record_false"="No recording-Original sound";
+"function_subtitle"="Subtitle";
+"option_done"="Done";
+"option_cancel"="Cancel";
+"option_fail_emoji"="Do not recognize emoji";
+"option_location"="Loc";
+"option_bottom"="↓";
+"option_middle"="◦";
+"option_top"="↑";
+"option_size"="Size";
+"option_off"="Subtitles Off";
+"compose_fail_compose"="Video Composition Failure";
+"compose_retry"="Retry";
+"compose_retry2"="Redo ";
+"compose_retry3"="Please recompose your video";
+"compose_retry4"="Please retry ";
+"compose_fail_lost"="Lost data";
+"compose_fail_export"="Export failure ";
+"compose_save"="Save to album";
+"compose_fail_delete"="Original videos/photo do not exist ";
+"compose_fail_storage"="Insufficient storage space ";
+"compose_fail_records"="Records do not exist";
+"savemode_changes"="Discard changes?";
+"savemode_changes2"="Discard changes?";
+"compose_loading"="Compositing video";
+"compose_tips_saved"="It has been saved";
+"compose_tips_successfully"="Saved successfully";
+"compose_tips_changes"="Discard changes?";
+"option_confirm"="Confirm";
+"savemode_all"="Save All";
+"savemode_onlyrecord"="Save Record Only";
+"option_next"="NEXT";
+"option_exit"="EXIT";
+"option_not exit"="Not exit";
+"compose_tips_exit"="Exiting will not save the current operation";
+"compose_tips_export"="Export needs to be recorded first";
+"option_export"="Export";
+"option_Finish"="Finish";
+"album_tips_maxtime"="The total duration of the material cannot exceed 2 hours";
+"album_title"="My album";
+"album_tips_least"="Need to select 1 video";
+"option_network"="Reconnect to the network";
+"album_tips_network"="Page failed to load, please try again";
+"option_tips_network"="Network connection failed, please check the network and try again";
+"network_tips_subtitles"="Poor network, subtitles may not be generated";
+"option_need"="need";
+"option_available"="available";

+ 103 - 0
BFCommonKit/Assets/en.lproj/Localizable.strings

@@ -0,0 +1,103 @@
+"record_ly"="Hold to Record";
+"record_lz"="Hold to Record";
+"record_pause"="Relase to Pause";
+"record_back"="Back";
+"record_delete"="Delete Record";
+"record_undo"="Undo";
+"record_recover"="Recover";
+"home_agreement_tittle"="Welcome";
+"home_agreement_begin"="Please read the agreement";
+"home_agreement_privacy"="《Privacy Policy》";
+"home_agreement_service"="《Terms of Service》";
+"home_agreement_remarks"="Understand user rights and obligations and personal information processing rules";
+"home_agreement_prompt"="You are indicating that you agree Terms of Service and Privacy Policy";
+"option_accept"="Accept ";
+"option_refuse"="Refuse ";
+"option_ok"="OK";
+"option_cancel"="Cancel";
+"hone_privacy"="Terms of Service";
+"hone_service"="Privacy Policy";
+"hone_star"="Choose videos/images\n Narrate your videos";
+"home_title"="Narrate your videos";
+"home_shoot"="Shoot";
+"home_choose"="Choose";
+"grant_camera"="For recording";
+"grant_subtitles"="For generate subtitles";
+"grant_dubbing"="For dubbing";
+"grant_photos"="For select photos";
+"grant_micpass"="You need to turn on \"microphone permission\" to record";
+"grant_open"="Open";
+"album_title"="Choose from album ";
+"album_tips"="Please enable permission to use albums";
+"album_add"="Add photos";
+"album_fail_none"="No photos or videos";
+"album_fail_none2"="No photos or videos";
+"album_fail_novideo"="No photos available";
+"album_fail_nophoto"="No videos available";
+"option_refresh"="Refresh/Retry";
+"album_fail_load"="Content load failure";
+"album_reloading"="Reloading ";
+"album_Grant"="Grant permissions";
+"album_addvideo"="Add videos";
+"album_max_%@_count"="Select a maximum of %1$@ photos/videos";
+"album_fail_proportion"="This proportion of material is not supported temporarily";
+"album_fail_type"="This type of material is not supported at present";
+"album_all"="All ";
+"album_deleted"="Recently Deleted";
+"album_projects"="Recent Projects";
+"album_recents"="Recents";
+"album_album"="Album";
+"album_video"="Videos";
+"shoot_tips_switch"="You haven't recorded content yet, switching paragraphs will cancel the recording";
+"shoot_tips_least"="The shortest recording is 1 second";
+"shoot_tips_max"="Do add 20 more paragraphs";
+"tips_full"="Video recording finished";
+"function_voice"="Voice";
+"sound_record_ture"="Recording-Original sound";
+"sound_record_false"="No recording-Original sound";
+"function_subtitle"="Subtitle";
+"option_done"="Done";
+"option_cancel"="Cancel";
+"option_fail_emoji"="Do not recognize emoji";
+"option_location"="Loc";
+"option_bottom"="↓";
+"option_middle"="◦";
+"option_top"="↑";
+"option_size"="Size";
+"option_off"="Subtitles Off";
+"compose_fail_compose"="Video Composition Failure";
+"compose_retry"="Retry";
+"compose_retry2"="Redo ";
+"compose_retry3"="Please recompose your video";
+"compose_retry4"="Please retry ";
+"compose_fail_lost"="Lost data";
+"compose_fail_export"="Export failure ";
+"compose_save"="Save to album";
+"compose_fail_delete"="Original videos/photo do not exist ";
+"compose_fail_storage"="Insufficient storage space ";
+"compose_fail_records"="Records do not exist";
+"savemode_changes"="Discard changes?";
+"savemode_changes2"="Discard changes?";
+"compose_loading"="Compositing video";
+"compose_tips_saved"="It has been saved";
+"compose_tips_successfully"="Saved successfully";
+"compose_tips_changes"="Discard changes?";
+"option_confirm"="Confirm";
+"savemode_all"="Save All";
+"savemode_onlyrecord"="Save Record Only";
+"option_next"="NEXT";
+"option_exit"="EXIT";
+"option_not exit"="Not exit";
+"compose_tips_exit"="Exiting will not save the current operation";
+"compose_tips_export"="Export needs to be recorded first";
+"option_export"="Export";
+"option_Finish"="Finish";
+"album_tips_maxtime"="The total duration of the material cannot exceed 2 hours";
+"album_title"="My album";
+"album_tips_least"="Need to select 1 video";
+"option_network"="Reconnect to the network";
+"album_tips_network"="Page failed to load, please try again";
+"option_tips_network"="Network connection failed, please check the network and try again";
+"network_tips_subtitles"="Poor network, subtitles may not be generated";
+"option_need"="need";
+"option_available"="available";

+ 103 - 0
BFCommonKit/Assets/ja.lproj/Localizable.strings

@@ -0,0 +1,103 @@
+"record_ly"="録音を押さえる";
+"record_lz"="記録を押し続ける";
+"record_pause"="手を放して一時停止する";
+"record_back"="戻る";
+"record_delete"="レコードの削除";
+"record_undo"="削除する";
+"record_recover"="戻る";
+"home_agreement_tittle"="ようこそ";
+"home_agreement_begin"="契約書をお読みください";
+"home_agreement_privacy"="《プライバシーポリシー》";
+"home_agreement_service"="《ユーザー契約》";
+"home_agreement_remarks"=".";
+"home_agreement_prompt"="同意をクリックして、すべての条項を読み、承認したことを示します。";
+"option_accept"="同意する";
+"option_refuse"="同意しない";
+"option_ok"="わかった";
+"option_cancel"="キャンセル";
+"hone_privacy"="ユーザプロトコル";
+"hone_service"="プライバシー契約";
+"hone_star"="ビデオ/画像の選択\n 吹き替えを始める";
+"home_title"="吹き替え";
+"home_shoot"="ビデオを撮る";
+"home_choose"="選ぶ";
+"grant_camera"="撮影録画用";
+"grant_subtitles"="インターネットによる字幕の生成";
+"grant_dubbing"="ダビング用";
+"grant_photos"="アルバムに入ってビデオを選択";
+"grant_micpass"="マイクの権限が拒否されました。設定で開きます";
+"grant_open"="開く";
+"album_title"="アルバムの素材を選ぶ";
+"album_tips"="アルバムの使用許可を有効にしてください";
+"album_add"="写真を選びに行く";
+"album_fail_none"="このアルバムには何もない";
+"album_fail_none2"="この薄さには何もない";
+"album_fail_novideo"="写真集";
+"album_fail_nophoto"="このアルバムにはビデオがありません。";
+"option_refresh"="リセット";
+"album_fail_load"="コンテンツのロードに失敗しました";
+"album_reloading"="じゅうか";
+"album_Grant"="権限";
+"album_addvideo"="映像を選ぶ";
+"album_max_%@_count"="最大%1$@マテリアルを選択";
+"album_fail_proportion"="このルーラーのマテリアルはしばらくサポートされていません";
+"album_fail_type"="このタイプの素材はしばらくサポートされていません";
+"album_all"="すべて";
+"album_deleted"="最近の削除";
+"album_projects"="最近のアイテム";
+"album_recents"="最近追加";
+"album_album"="アルバム冊";
+"album_video"="ビデオ";
+"shoot_tips_switch"="まだコンテンツを録音していません。段落を切り替えると録音がキャンセルされます";
+"shoot_tips_least"="最短録音は1秒です";
+"shoot_tips_max"="さらに20段落追加してください";
+"tips_full"="ビデオ録画が終了しました";
+"function_voice"="音量";
+"sound_record_ture"="録音時のビデオサウンド";
+"sound_record_false"="録音なしのビデオサウンド";
+"function_subtitle"="字幕";
+"option_done"="完了";
+"option_cancel"="取消";
+"option_fail_emoji"="表情入力不可";
+"option_location"="位置";
+"option_bottom"="↓";
+"option_middle"="◦";
+"option_top"="↑";
+"option_size"="ふごう";
+"option_off"="字幕を閉じる";
+"compose_fail_compose"="合成に失敗しました";
+"compose_retry"="再試行";
+"compose_retry2"="作り直す";
+"compose_retry3"="合成に失敗しました。再試行してください。";
+"compose_retry4"="再試行してください";
+"compose_fail_lost"="すべてのデータ消失";
+"compose_fail_export"="エクスポートに失敗しました";
+"compose_save"="アルバムに保存";
+"compose_fail_delete"="元のビデオ/画像ファイルが削除されました";
+"compose_fail_storage"="ストレージ容量不足";
+"compose_fail_records"="携帯電話の録音ファイルが紛失しました";
+"savemode_changes"="合成中ですが、キャンセルしますか?";
+"savemode_changes2"="合成中ですが、切り替えますか?";
+"compose_loading"="合成中です。。。";
+"compose_tips_saved"="保存済み";
+"compose_tips_successfully"="保存に成功しました";
+"compose_tips_changes"="まだビデオを保存していませんよ。本当に離れますか?";
+"option_confirm"="確定して離れる";
+"savemode_all"="すべて保存";
+"savemode_onlyrecord"="録音部分のみ保存";
+"option_next"="次に";
+"option_exit"="終了する";
+"option_not exit"="終了しない";
+"compose_tips_exit"="終了しても現在の操作は保存されません";
+"compose_tips_export"="エクスポートを最初に記録する必要があります";
+"option_export"="輸出";
+"option_Finish"="終了";
+"album_tips_maxtime"="資料の合計期間は2時間を超えることはできません";
+"album_title"="私のアルバム";
+"album_tips_least"="1つのビデオを選択する必要があります";
+"option_network"="ネットワークに再接続します";
+"album_tips_network"="ページを読み込めませんでした。もう一度お試しください";
+"option_tips_network"="ネットワーク接続に失敗しました。ネットワークを確認して、再試行してください";
+"network_tips_subtitles"="ネットワークが貧弱で、字幕が生成されない可能性があります";
+"option_need"="必要";
+"option_available"="利用可能";

+ 103 - 0
BFCommonKit/Assets/ko-KR.lproj/Localizable.strings

@@ -0,0 +1,103 @@
+"record_ly"="녹음을 누르다";
+"record_lz"="기록 유지";
+"record_pause"="손을 놓고 잠시 멈추다";
+"record_back"="뒤";
+"record_delete"="녹화 삭제";
+"record_undo"="취소";
+"record_recover"="다시 덮다";
+"home_agreement_tittle"="시작";
+"home_agreement_begin"="계약서를 읽어주세요";
+"home_agreement_privacy"="《개인 정보 정책》";
+"home_agreement_service"="《利用規約》";
+"home_agreement_remarks"=".";
+"home_agreement_prompt"="동의를 클릭하면 모든 조항을 읽고 인정했다는 것을 표시합니다";
+"option_accept"="동의하다";
+"option_refuse"="동의하지 않다";
+"option_ok"="확신하는";
+"option_cancel"="취소";
+"hone_privacy"="사용자 프로토콜";
+"hone_service"="프라이버시 프로토콜";
+"hone_star"="비디오/사진 선택\n 해설을 시작하다";
+"home_title"="더빙을 시작하자";
+"home_shoot"="비디오 촬영";
+"home_choose"="선택하다";
+"grant_camera"="촬영을 하기 위해서";
+"grant_subtitles"="인터넷을 위한 자막 생성";
+"grant_dubbing"="더빙을 하기 위해서";
+"grant_photos"="영상을 고르기 위해서 더빙을 하겠습니다";
+"grant_micpass"="마이크 권한이 거부되었습니다. 설정에서 켜십시오";
+"grant_open"="열다";
+"album_title"="앨범 소재를 고르다";
+"album_tips"="앨범 사용 권한을 활성화하십시오";
+"album_add"="사진을 고르러 가다";
+"album_fail_none"="이 앨범에는 아무것도 없어요.";
+"album_fail_none2"="이 박자 에는 아무 것 도 없다";
+"album_fail_novideo"="사진첩";
+"album_fail_nophoto"="이 앨범에는 비디오가 없습니다.";
+"option_refresh"="리셋";
+"album_fail_load"="컨텐트 로드 실패";
+"album_reloading"="다시 로드";
+"album_Grant"="권한을 주다";
+"album_addvideo"="영상을 고르러 가다";
+"album_max_%@_count"="최대 개의%1$@소재 선택";
+"album_fail_proportion"="이 축척의 소재는 당분간 지원되지 않습니다";
+"album_fail_type"="이 유형의 소재는 당분간 지원되지 않습니다";
+"album_all"="모조리";
+"album_deleted"="최근 삭제";
+"album_projects"="최근 항목";
+"album_recents"="최근 추가";
+"album_album"="사진첩";
+"album_video"="비디오";
+"shoot_tips_switch"="아직 콘텐츠를 녹음하지 않았습니다. 단락을 전환하면 녹음이 취소됩니다.";
+"shoot_tips_least"="최단 기록은 1초";
+"shoot_tips_max"="20개의 단락을 더 추가하세요";
+"tips_full"="동영상 녹화 완료";
+"function_voice"="소리";
+"sound_record_ture"="녹음한 영상이 있어요. 어쿠스틱.";
+"sound_record_false"="무녹음 영상 어쿠스틱";
+"function_subtitle"="부제";
+"option_done"="완성";
+"option_cancel"="취소";
+"option_fail_emoji"="이모티콘 입력 안 돼.";
+"option_location"="위치:";
+"option_bottom"="↓";
+"option_middle"="◦";
+"option_top"="↑";
+"option_size"="상점";
+"option_off"="제목 닫기";
+"compose_fail_compose"="작성 실패";
+"compose_retry"="다시 시도하다";
+"compose_retry2"="다시 만든다";
+"compose_retry3"="작성 실패 다시 시도하십시오.";
+"compose_retry4"="다시 시도하십시오.";
+"compose_fail_lost"="모든 데이터 손실";
+"compose_fail_export"="내보내기 실패";
+"compose_save"="앨범에 저장";
+"compose_fail_delete"="원본 비디오/사진 파일 삭제";
+"compose_fail_storage"="스토리지 공간 부족";
+"compose_fail_records"="핸드폰 녹음 파일 분실";
+"savemode_changes"="작성 중입니다. 취소하시겠습니까?";
+"savemode_changes2"="작성 중입니다. 전환하시겠습니까?";
+"compose_loading"="작성 중...";
+"compose_tips_saved"="저장됨";
+"compose_tips_successfully"="저장 성공";
+"compose_tips_changes"="당신은 아직 동영상을 저장하지 않았습니다. 떠나시겠습니까?";
+"option_confirm"="떠나다";
+"savemode_all"="모든 내용 저장";
+"savemode_onlyrecord"="녹음 부분만 저장";
+"option_next"="다음 단계";
+"option_exit"="그만두 다";
+"option_not exit"="나가지 않는다";
+"compose_tips_exit"="종료하면 현재 작업이 저장되지 않습니다.";
+"compose_tips_export"="내보내기는 먼저 기록해야 합니다.";
+"option_export"="저장";
+"option_Finish"="마치다";
+"album_tips_maxtime"="자료의 총 시간은 2시간을 초과할 수 없습니다.";
+"album_title"="내 앨범";
+"album_tips_least"="동영상 1개를 선택해야 합니다.";
+"option_network"="네트워크에 다시 연결";
+"album_tips_network"="페이지를 로드하지 못했습니다. 다시 시도해 주세요.";
+"option_tips_network"="네트워크 연결에 실패했습니다. 네트워크를 확인하고 다시 시도하십시오.";
+"network_tips_subtitles"="네트워크 상태가 좋지 않아 자막이 생성되지 않을 수 있습니다.";
+"option_need"="필요";
+"option_available"="사용 가능";

+ 103 - 0
BFCommonKit/Assets/vi.lproj/Localizable.strings

@@ -0,0 +1,103 @@
+"record_ly"="Bấm và giữ đĩa";
+"record_lz"="Bấm và giữ đĩa";
+"record_pause"="Thả ra và tạm dừng";
+"record_back"="Lùi lại.";
+"record_delete"="Xoá ghi âm";
+"record_undo"="thu hồi";
+"record_recover"="hồi phục";
+"home_agreement_tittle"="Chào.";
+"home_agreement_begin"="Vui lòng đọc thỏa thuận";
+"home_agreement_privacy"="《Chính sách bảo mật》";
+"home_agreement_service"="《Điều khoản dịch vụ》";
+"home_agreement_remarks"=".";
+"home_agreement_prompt"="Việc thực hiện hợp đồng có nghĩa là bạn đã đọc và đồng ý với tất cả các điều khoản";
+"option_accept"="đồng ý!";
+"option_refuse"="không đồng";
+"option_ok"="Đảm bảo";
+"option_cancel"="Hủy bỏ";
+"hone_privacy"="Thỏa thuận người dùng";
+"hone_service"="Thỏa thuận cá nhân";
+"hone_star"="Chọn ảnh\n Giải thích đi";
+"home_title"="đến lồng tiếng";
+"home_shoot"="quay video";
+"home_choose"="lựa chọn";
+"grant_camera"="Để quay phim và ghi âm";
+"grant_subtitles"="Tạo ra phụ đề mạng";
+"grant_dubbing"="Để ghi lại lồng";
+"grant_photos"="Để chọn đoạn video cần lồng";
+"grant_micpass"="Không cho phép vi điện thoại. Hãy bật nó trong thiết lập";
+"grant_open"="Để mở";
+"album_title"="Chọn ảnh tập ảnh";
+"album_tips"="Vui lòng cho phép sử dụng anbom";
+"album_add"="Chọn ảnh";
+"album_fail_none"="Chẳng có gì trong album này cả.";
+"album_fail_none2"="Chẳng có gì trong album này cả.";
+"album_fail_novideo"="Không có ảnh nào trong album này.";
+"album_fail_nophoto"="Không có đoạn phim nào trong album này.";
+"option_refresh"="Cập nhật";
+"album_fail_load"="Tải về lỗi";
+"album_reloading"="Nạp";
+"album_Grant"="Bỏ quyền hạn";
+"album_addvideo"="Để chọn đoạn video";
+"album_max_%@_count"="Chọn tối đa %1$@ vật liệu";
+"album_fail_proportion"="Lượng vật liệu này không được hỗ trợ tạm thời";
+"album_fail_type"="Loại vật liệu này hiện tại không được hỗ trợ";
+"album_all"="nguyên";
+"album_deleted"="Xóa gần đây";
+"album_projects"="Dự án gần đây";
+"album_recents"="Mới cộng";
+"album_album"="tập";
+"album_video"="băng hình";
+"shoot_tips_switch"="Bạn chưa ghi nội dung, việc chuyển đổi đoạn văn sẽ hủy ghi";
+"shoot_tips_least"="Bản ghi ngắn nhất là 1 giây";
+"shoot_tips_max"="Thêm 20 đoạn văn nữa";
+"tips_full"="Quay video xong";
+"function_voice"="âm thanh";
+"sound_record_ture"="Âm thanh video với ghi âm";
+"sound_record_false"="Âm thanh video không ghi âm";
+"function_subtitle"="phụ đề";
+"option_done"="Hoàn";
+"option_cancel"="hủy";
+"option_fail_emoji"="Không thể nhập vào biểu thức";
+"option_location"="đâu";
+"option_bottom"="↓";
+"option_middle"="◦";
+"option_top"="↑";
+"option_size"="Size";
+"option_off"="Đóng phụ đề";
+"compose_fail_compose"="Lỗi nhân tạo";
+"compose_retry"="thử";
+"compose_retry2"="Comment";
+"compose_retry3"="Thành phần không thành công.";
+"compose_retry4"="Xin hãy thử lại.";
+"compose_fail_lost"="Mọi dữ liệu mất";
+"compose_fail_export"="Lỗi Xuất";
+"compose_save"="Lưu vào tập ảnh";
+"compose_fail_delete"="Tập tin ảnh gốc đã bị xoá";
+"compose_fail_storage"="Không có kho";
+"compose_fail_records"="Đang mất tập tin ghi âm điện thoại di động.";
+"savemode_changes"="Thành phần đang được sắp xếp, anh có muốn hủy không?";
+"savemode_changes2"="Thành phần đang được sắp xếp, anh có muốn thay đổi không?";
+"compose_loading"="Được tổng hợp...";
+"compose_tips_saved"="Lưu";
+"compose_tips_successfully"="Lưu thành công";
+"compose_tips_changes"="Anh vẫn chưa lưu lại đoạn video, anh có chắc là muốn đi không?";
+"option_confirm"="Anh có chắc là đi không?";
+"savemode_all"="Lưu lại mọi thứ";
+"savemode_onlyrecord"="Lưu chỉ phần đã ghi lại";
+"option_next"="tiếp theo";
+"option_exit"="từ bỏ";
+"option_not exit"="không thoát";
+"compose_tips_exit"="Thoát sẽ không lưu hoạt động hiện tại";
+"compose_tips_export"="Xuất cần ghi lại trước";
+"option_export"="đầu ra";
+"option_Finish"="Hoàn thành";
+"album_tips_maxtime"="Tổng thời lượng của tài liệu không được vượt quá 2 giờ";
+"album_title"="album của tôi";
+"album_tips_least"="Cần chọn 1 video";
+"option_network"="Kết nối lại với mạng";
+"album_tips_network"="Không tải được trang, vui lòng thử lại";
+"option_tips_network"="Kết nối mạng không thành công, vui lòng kiểm tra mạng và thử lại";
+"network_tips_subtitles"="Mạng kém, phụ đề có thể không được tạo";
+"option_need"="cần";
+"option_available"="có sẵn";

+ 103 - 0
BFCommonKit/Assets/zh-Hans.lproj/Localizable.strings

@@ -0,0 +1,103 @@
+"record_ly"="按住 录音";
+"record_lz"="按住 录制";
+"record_pause"="松手 暂停";
+"record_back"="回退";
+"record_delete"="删除录制";
+"record_undo"="撤销录制";
+"record_recover"="撤销删除";
+"home_agreement_tittle"="欢迎使用";
+"home_agreement_begin"="在您使用视说服务前,请认真阅读";
+"home_agreement_privacy"="《用户隐私政策》";
+"home_agreement_service"="《视说用户协议》";
+"home_agreement_remarks"="以了解用户权利义务和个人信息处理规则";
+"home_agreement_prompt"="点击同意表示您已阅读并且认可所有条款";
+"option_accept"="同意";
+"option_refuse"="不同意";
+"option_ok"="确定";
+"option_cancel"="取消";
+"hone_privacy"="用户协议";
+"hone_service"="隐私协议";
+"hone_star"="选择视频/图片\n开始讲解";
+"home_title"="开始讲解";
+"home_shoot"="拍摄录制";
+"home_choose"="从相册选择";
+"grant_camera"="点击\"允许\",可进行拍摄录制";
+"grant_subtitles"="点击\"允许\",可联网生成字幕";
+"grant_dubbing"="点击\"允许\",可进行录制配音";
+"grant_photos"="点击\"允许\",可进入相册选取视频";
+"grant_micpass"="需要开启「麦克风权限」才可以进行录制";
+"grant_open"="去开启";
+"album_title"="挑选相册素材";
+"album_tips"="要挑选相册素材,请先授予相册使用权限";
+"album_add"="去选照片";
+"album_fail_none"="此相册中什么都没有";
+"album_fail_none2"="此相薄中什么都没有";
+"album_fail_novideo"="此相册中没有照片";
+"album_fail_nophoto"="此相册中没有视频";
+"option_refresh"="刷新";
+"album_fail_load"="内容加载失败";
+"album_reloading"="重新加载";
+"album_Grant"="授予权限";
+"album_addvideo"="去选视频";
+"album_max_%@_count"="最多选择%1$@个素材";
+"album_fail_proportion"="暂不支持该比例的素材";
+"album_fail_type"="暂不支持该类型素材";
+"album_all"="全部";
+"album_deleted"="最近删除";
+"album_projects"="最近项目";
+"album_recents"="最近添加";
+"album_album"="相簿";
+"album_video"="视频";
+"shoot_tips_switch"="你还没有录制内容哦,切换段落将会取消录制,是否确定取消";
+"shoot_tips_least"="最短录制1秒";
+"shoot_tips_max"="做多添加20个段落";
+"tips_full"="此视频已录制到头了哦";
+"function_voice"="声音";
+"sound_record_ture"="录音时 视频原声";
+"sound_record_false"="未录音时 视频原声";
+"function_subtitle"="字幕";
+"option_done"="完成";
+"option_cancel"="取消";
+"option_fail_emoji"="不能输入表情";
+"option_location"="位置";
+"option_bottom"="下";
+"option_middle"="中";
+"option_top"="上";
+"option_size"="字号";
+"option_off"="关闭字幕";
+"compose_fail_compose"="合成失败";
+"compose_retry"="重试";
+"compose_retry2"="重新制作";
+"compose_retry3"="合成失败请重试";
+"compose_retry4"="请重新尝试";
+"compose_fail_lost"="所有数据丢失";
+"compose_fail_export"="导出失败";
+"compose_save"="保存到相册";
+"compose_fail_delete"="原视频/图片文件被删除";
+"compose_fail_storage"="存储空间不足";
+"compose_fail_records"="手机录音文件丢失";
+"savemode_changes"="正在合成中,是否取消?";
+"savemode_changes2"="正在合成中,是否切换?";
+"compose_loading"="正在合成中。。。";
+"compose_tips_saved"="已保存过了";
+"compose_tips_successfully"="保存成功";
+"compose_tips_changes"="你还未保存视频哦,是否确定离开?";
+"option_confirm"="确定离开";
+"savemode_all"="保存全部内容";
+"savemode_onlyrecord"="仅保存录音部分";
+"option_next"="下一步";
+"option_exit"="确认退出";
+"option_not exit"="不退出";
+"compose_tips_exit"="退出将不会保存当前操作";
+"compose_tips_export"="需要录制才可以导出";
+"option_export"="导出";
+"option_Finish"="回到首页";
+"album_tips_maxtime"="素材总时长不能超过2小时";
+"album_title"="我的相册";
+"album_tips_least"="需要选择一个视频";
+"option_network"="重新连接网络";
+"album_tips_network"="网页加载失败,请重试~";
+"option_tips_network"="网络连接失败,请检查网络后重试";
+"network_tips_subtitles"="网络不佳,字幕可能无法生成";
+"option_need"="需要";
+"option_available"="可用";

+ 25 - 0
BFCommonKit/Classes/BFCategorys/BFString+Ext.swift

@@ -200,3 +200,28 @@ public extension Optional where Wrapped == String {
         return self?.isSpace ?? true
     }
 }
+
+
+/* add by ak 本地化
+ e.g.
+  第一种正常使用
+ Let text = "home_msg_welcome".BFLocale
+ 第二种拼接使用
+ Let text = String(format: "welcome%@enterRoom".BFLocale, "89")
+*/
+public extension String{
+    class BFLocaleClass {}
+    var BFLocale: String {
+        let noFindStr = "key is not found! \(self)"
+        let bundlePaths = Bundle(for: BFLocaleClass.self).paths(forResourcesOfType: "bundle", inDirectory: nil)
+        guard bundlePaths.count > 0 , let resourcePath = (bundlePaths.first)  else {
+            return noFindStr
+        }
+        let resourceBundle = Bundle(path: resourcePath)
+        
+        let msg = NSLocalizedString(self, tableName: nil, bundle: resourceBundle!, value: noFindStr, comment: "")
+        return msg
+    }
+}
+
+ 

+ 60 - 0
BFCommonKit/Classes/BFUtility/BFLocalizedUtil.swift

@@ -0,0 +1,60 @@
+//
+//  BFLocalizedUtil.swift
+//  BFCommonKit
+//
+//  Created by ak on 2022/1/18.
+//
+
+import Foundation
+public let  BFLocalizedUtilAppLanguageKey:String = "AppLanguage"
+
+public class BFLocalizedUtil{
+    
+    
+    /// 取到当前的系统设置的首选语言 zh 中文, en 英语 ,ja 日语, vi 越南语 ,ko 韩语
+    /// - Returns: 首选语言
+    public class func currentLanguage() -> String{
+      
+        let appLanguages:Array? = UserDefaults.standard.object(forKey: "AppleLanguages") as? Array<String>
+        var language = (appLanguages?[0] ?? "en") as String
+        // zh 中文, en 英语 ,ja 日语, vi 越南语 ,ko 韩语
+        if(language.contains("zh")){
+            language = "zh"
+        }
+        if(language.contains("en")){
+            language = "en"
+        }
+        if(language.contains("ja")){
+            language = "ja"
+        }
+        if(language.contains("vi")){
+            language = "vi"
+        }
+        if(language.contains("ko")){
+            language = "ko"
+        }
+        BFLog(2, message: "当前设置的首选语言\(language)")
+        return language
+    }
+    
+    
+    public class func setLanguage(language:String){
+        BFLog(2, message: "当前设置的首选语言\(language)")
+        saveUserDefaults(key: BFLocalizedUtilAppLanguageKey, value: language)
+    
+    }
+    
+    public class func availableLocales() -> Array<String>{
+        var codes = Array<String>.init()
+        for code in NSLocale.availableLocaleIdentifiers{
+            
+            BFLog(2, message: "支持的语言 \(code)")
+            codes.append(code)
+        }
+        return codes
+    }
+    
+
+}
+
+

+ 1 - 1
BFCommonKit/Classes/BFUtility/PQPHAssetVideoParaseUtil.swift

@@ -531,7 +531,7 @@ open class PQPHAssetVideoParaseUtil: NSObject {
                     BFLog(message: "加载中...:\(url)")
                 case .failed, .cancelled, .unknown:
                     DispatchQueue.main.async {
-                        resultHandler(url, nil, startTime, endTime, "导出失败")
+                        resultHandler(url, nil, startTime, endTime, "compose_fail_export".BFLocale)
                     }
                 default:
                     break

+ 60 - 0
BFLocalizedUtil.swift

@@ -0,0 +1,60 @@
+//
+//  BFLocalizedUtil.swift
+//  BFCommonKit
+//
+//  Created by ak on 2022/1/18.
+//
+
+import Foundation
+public let  BFLocalizedUtilAppLanguageKey:String = "AppLanguage"
+
+public class BFLocalizedUtil{
+    
+    
+    /// 取到当前的系统设置的首选语言 zh 中文, en 英语 ,ja 日语, vi 越南语 ,ko 韩语
+    /// - Returns: 首选语言
+    public class func currentLanguage() -> String{
+      
+        let appLanguages:Array? = UserDefaults.standard.object(forKey: "AppleLanguages") as? Array<String>
+        var language = (appLanguages?[0] ?? "en") as String
+        // zh 中文, en 英语 ,ja 日语, vi 越南语 ,ko 韩语
+        if(language.contains("zh")){
+            language = "zh"
+        }
+        if(language.contains("en")){
+            language = "en"
+        }
+        if(language.contains("ja")){
+            language = "ja"
+        }
+        if(language.contains("vi")){
+            language = "vi"
+        }
+        if(language.contains("ko")){
+            language = "ko"
+        }
+        BFLog(2, message: "当前设置的首选语言\(language)")
+        return language
+    }
+    
+    
+    public class func setLanguage(language:String){
+        BFLog(2, message: "当前设置的首选语言\(language)")
+        saveUserDefaults(key: BFLocalizedUtilAppLanguageKey, value: language)
+    
+    }
+    
+    public class func availableLocales() -> Array<String>{
+        var codes = Array<String>.init()
+        for code in NSLocale.availableLocaleIdentifiers{
+            
+            BFLog(2, message: "支持的语言 \(code)")
+            codes.append(code)
+        }
+        return codes
+    }
+    
+
+}
+
+