├── .github ├── FUNDING.yml └── workflows │ └── main.yml ├── .gitignore ├── .metadata ├── .vscode ├── launch.json └── settings.json ├── LICENSE ├── README.md ├── android ├── .gitignore ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ ├── AndroidManifest.xml │ │ ├── ic_launcher-playstore.png │ │ └── res │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ └── values │ │ │ └── ic_launcher_background.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── ic_launcher-playstore.png │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── simplytranslate_mobile │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable-v21 │ │ │ └── launch_background.xml │ │ │ ├── drawable │ │ │ ├── ic_launcher_foreground.xml │ │ │ └── launch_background.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_foreground.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_foreground.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_foreground.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_foreground.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_foreground.png │ │ │ ├── values-night │ │ │ └── styles.xml │ │ │ └── values │ │ │ ├── ic_launcher_background.xml │ │ │ └── styles.xml │ │ └── profile │ │ ├── AndroidManifest.xml │ │ ├── ic_launcher-playstore.png │ │ └── res │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ └── values │ │ └── ic_launcher_background.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets ├── ca │ └── lets-encrypt-r3.pem ├── favicon │ ├── simplytranslate.png │ ├── simplytranslate.svg │ ├── simplytranslate_transparent.png │ ├── simplytranslate_transparent.svg │ └── simplytranslate_transparent_black.png └── settings │ ├── counter-dark.png │ ├── counter-light.png │ └── counter.svg ├── desiredFileName.txt ├── docs ├── ar │ ├── contributors.html │ ├── donate.html │ ├── download.html │ ├── index.html │ └── source.html ├── assets │ ├── 1.webp │ ├── 2.webp │ ├── 3.webp │ ├── 4.webp │ ├── bc1q0mk9eynz9waufjmk2eslt36cqxtgnqkhfmj9yj.png │ ├── codeberg.svg │ ├── design.svg │ ├── f-droid.png │ ├── favicon.png │ ├── github.svg │ ├── logo.svg │ ├── preview.png │ └── preview.svg ├── contributors.html ├── css │ ├── fonts │ │ ├── Inter-VariableFont_slnt,wght.ttf │ │ └── Vazirmatn-VariableFont_wght.ttf │ └── index.css ├── donate.html ├── download.html ├── en │ ├── contributors.html │ ├── donate.html │ ├── download.html │ ├── index.html │ └── source.html ├── fr │ ├── contributors.html │ ├── donate.html │ ├── download.html │ ├── index.html │ └── source.html ├── index.html ├── nb_NO │ ├── contributors.html │ ├── donate.html │ ├── download.html │ ├── index.html │ └── source.html ├── pl │ ├── contributors.html │ ├── donate.html │ ├── download.html │ ├── index.html │ └── source.html ├── pug │ ├── contributors.pug │ ├── donate.pug │ ├── download.pug │ ├── index.pug │ ├── source.pug │ └── widgets │ │ └── widgets.pug ├── source.html ├── strings │ ├── ar.json │ ├── bg.json │ ├── bn.json │ ├── cs.json │ ├── de.json │ ├── el.json │ ├── en.json │ ├── eo.json │ ├── es.json │ ├── fa.json │ ├── fi.json │ ├── fr.json │ ├── hu.json │ ├── id.json │ ├── is.json │ ├── it.json │ ├── ja.json │ ├── ko.json │ ├── ml.json │ ├── nb_NO.json │ ├── nl.json │ ├── pl.json │ ├── pt_BR.json │ ├── ru.json │ ├── tr.json │ ├── uk.json │ └── zh_Hant_HK.json └── tr │ ├── contributors.html │ ├── donate.html │ ├── download.html │ ├── index.html │ └── source.html ├── fastlane └── metadata │ └── android │ ├── ar │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── cs │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── de │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── en-US │ ├── full_description.txt │ ├── images │ │ ├── icon.png │ │ └── phoneScreenshots │ │ │ ├── 1.webp │ │ │ ├── 2.webp │ │ │ ├── 3.webp │ │ │ └── 4.webp │ ├── short_description.txt │ └── title.txt │ ├── eo │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── es │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── fr │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── hu-HU │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── is-IS │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── it │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── ja │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── ko-KR │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── nl │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── pl │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── pt-BR │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── ru │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── tr │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ └── uk │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt ├── lib ├── data.dart ├── main.dart ├── messages.dart ├── messages │ ├── messages.i18n.dart │ ├── messages.i18n.yaml │ ├── messages_ar.i18n.dart │ ├── messages_ar.i18n.yaml │ ├── messages_cs.i18n.dart │ ├── messages_cs.i18n.yaml │ ├── messages_de.i18n.dart │ ├── messages_de.i18n.yaml │ ├── messages_el.i18n.dart │ ├── messages_el.i18n.yaml │ ├── messages_en.i18n.dart │ ├── messages_en.i18n.yaml │ ├── messages_eo.i18n.dart │ ├── messages_eo.i18n.yaml │ ├── messages_es.i18n.dart │ ├── messages_es.i18n.yaml │ ├── messages_fa.i18n.dart │ ├── messages_fa.i18n.yaml │ ├── messages_fi.i18n.dart │ ├── messages_fi.i18n.yaml │ ├── messages_fr.i18n.dart │ ├── messages_fr.i18n.yaml │ ├── messages_hu.i18n.dart │ ├── messages_hu.i18n.yaml │ ├── messages_is.i18n.dart │ ├── messages_is.i18n.yaml │ ├── messages_it.i18n.dart │ ├── messages_it.i18n.yaml │ ├── messages_ja.i18n.dart │ ├── messages_ja.i18n.yaml │ ├── messages_ko.i18n.dart │ ├── messages_ko.i18n.yaml │ ├── messages_ml.i18n.dart │ ├── messages_ml.i18n.yaml │ ├── messages_nb_NO.i18n.dart │ ├── messages_nb_NO.i18n.yaml │ ├── messages_pl.i18n.dart │ ├── messages_pl.i18n.yaml │ ├── messages_pt_BR.i18n.dart │ ├── messages_pt_BR.i18n.yaml │ ├── messages_ru.i18n.dart │ ├── messages_ru.i18n.yaml │ ├── messages_tr.i18n.dart │ ├── messages_tr.i18n.yaml │ ├── messages_uk.i18n.dart │ ├── messages_uk.i18n.yaml │ ├── messages_zh_HK.i18n.dart │ └── messages_zh_HK.i18n.yaml ├── screens │ ├── about │ │ ├── about_screen.dart │ │ └── about_screen_button.dart │ ├── settings │ │ ├── settings_screen.dart │ │ └── widgets │ │ │ ├── select_theme.dart │ │ │ └── settings_button.dart │ └── translate │ │ ├── translate.dart │ │ └── widgets │ │ ├── input │ │ ├── character_limit.dart │ │ ├── delete_button.dart │ │ ├── input.dart │ │ └── tts_button.dart │ │ ├── lang_selector │ │ ├── lang.dart │ │ └── switch_lang.dart │ │ └── output │ │ ├── copy_button.dart │ │ ├── definitions.dart │ │ ├── output.dart │ │ ├── pronounciation.dart │ │ ├── translations.dart │ │ └── tts_button.dart └── simplytranslate.dart ├── pubspec.lock ├── pubspec.yaml └── scripts ├── arb_compile.sh ├── python └── arb_merger.py └── website_compile.sh /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | custom: ['https://www.buymeacoffee.com/manerakai', 'bc1q0mk9eynz9waufjmk2eslt36cqxtgnqkhfmj9yj'] # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 10 | liberapay: simplytranslate_mobile # Replace with a single Liberapay username 11 | issuehunt: # Replace with a single IssueHunt username 12 | otechie: # Replace with a single Otechie username 13 | 14 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: Flutter build apk 4 | 5 | # Controls when the workflow will run 6 | on: 7 | workflow_dispatch: 8 | 9 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 10 | jobs: 11 | # This workflow contains a single job called "build" 12 | build: 13 | # The type of runner that the job will run on 14 | runs-on: ubuntu-latest 15 | 16 | # Steps represent a sequence of tasks that will be executed as part of the job 17 | steps: 18 | - uses: actions/checkout@v2 19 | - uses: actions/setup-java@v1 20 | with: 21 | java-version: '17.0.10' 22 | - uses: subosito/flutter-action@v1 23 | - run: flutter pub get 24 | - run: flutter build apk --flavor development --debug 25 | 26 | - name: Save result 27 | uses: actions/upload-artifact@v2 28 | with: 29 | name: compiled-flutter-code 30 | path: build/app/outputs/flutter-apk/app-development-debug.apk 31 | 32 | 33 | # You may pin to the exact commit or the version. 34 | # uses: subosito/flutter-action@4389e6cbc6cb8a4b18c628ff96ff90be0e926aa8 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | **/doc/api/ 25 | **/ios/Flutter/.last_build_id 26 | .dart_tool/ 27 | .flutter-plugins 28 | .flutter-plugins-dependencies 29 | .packages 30 | .pub-cache/ 31 | .pub/ 32 | /build/ 33 | # Web related 34 | lib/generated_plugin_registrant.dart 35 | 36 | # Symbolication related 37 | app.*.symbols 38 | 39 | # Obfuscation related 40 | app.*.map.json 41 | 42 | # Android Studio will place build artifacts here 43 | /android/app/debug 44 | /android/app/profile 45 | /android/app/release 46 | 47 | # key password 48 | android/local.properties 49 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: f4abaa0735eba4dfd8f33f73363911d63931fe03 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "debug", 9 | "request": "launch", 10 | "type": "dart", 11 | "args": [ 12 | "--flavor", 13 | "development" 14 | ] 15 | }, 16 | { 17 | "name": "release", 18 | "request": "launch", 19 | "type": "dart", 20 | "args": [ 21 | "--flavor", 22 | "github" 23 | ] 24 | } 25 | ] 26 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "java.configuration.updateBuildConfiguration": "interactive" 3 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 |

3 | 4 | 5 | 6 |

7 |

SimplyTranslate Mobile

8 | 9 |

A privacy friendly frontend to Google Translate

10 | 11 |

12 | 13 | Get it on F-Droid 16 | 17 |

18 | 19 |
20 | drawing  21 | drawing  22 | drawing  23 | drawing 24 |
25 | 26 | ## Download beta debug versions 27 | Download the most recent **Artifact** from the [Actions](https://github.com/ManeraKai/simplytranslate_mobile/actions) page. You should be logged in before you're able to download. 28 | 29 | ## Contributing 30 | I use [VSCodium](https://vscodium.com/). I use the extensions [Dart](https://marketplace.visualstudio.com/items?itemName=Dart-Code.dart-code) and [Flutter](https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter). The Dart one has an auto-formatter. Please use this setup to prevent unnecessary formatting changes. 31 | 32 | If you've inherited this project, keep in mind that there are some python scripts in `scripts/` that process translated strings for both website and app. 33 | 34 | To compile translations run `dart run build_runner build` 35 | 36 | ## Translation 37 | Weblate: https://hosted.weblate.org/projects/simplytranslate-mobile/ 38 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException('Flutter SDK not found. Define location with flutter.sdk in the local.properties file.') 12 | } 13 | 14 | apply plugin: 'com.android.application' 15 | apply plugin: 'kotlin-android' 16 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 17 | 18 | android { 19 | namespace "com.simplytranslate_mobile" 20 | compileSdkVersion flutter.compileSdkVersion 21 | 22 | lintOptions { 23 | disable 'InvalidPackage' 24 | checkReleaseBuilds false 25 | } 26 | 27 | compileOptions { 28 | sourceCompatibility JavaVersion.VERSION_17 29 | targetCompatibility JavaVersion.VERSION_17 30 | } 31 | 32 | sourceSets { 33 | main.java.srcDirs += 'src/main/kotlin' 34 | } 35 | 36 | defaultConfig { 37 | applicationId 'com.simplytranslate_mobile' 38 | minSdkVersion 21 39 | targetSdkVersion 33 40 | versionCode 13 41 | versionName '1.4.4' 42 | } 43 | 44 | 45 | flavorDimensions 'deploy' 46 | 47 | productFlavors { 48 | development { 49 | dimension 'deploy' 50 | } 51 | github { 52 | dimension 'deploy' 53 | } 54 | fdroid { 55 | dimension 'deploy' 56 | } 57 | } 58 | 59 | android.applicationVariants.all { variant -> 60 | if (variant.flavorName == 'fdroid') { 61 | variant.outputs.all { output -> 62 | output.outputFileName = 'app-fdroid-release.apk' 63 | } 64 | } 65 | } 66 | } 67 | 68 | flutter { 69 | source '../..' 70 | } 71 | 72 | dependencies { 73 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 74 | } 75 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /android/app/src/debug/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/debug/ic_launcher-playstore.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/debug/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/debug/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/debug/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/debug/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/debug/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/debug/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/debug/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/debug/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/debug/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/debug/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/debug/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #478061 4 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /android/app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/simplytranslate_mobile/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.simplytranslate_mobile 2 | 3 | import android.app.Activity 4 | import android.content.Context 5 | import android.content.Intent 6 | import android.hardware.Sensor 7 | import android.hardware.SensorEvent 8 | import android.hardware.SensorEventListener 9 | import android.hardware.SensorManager 10 | import android.os.Bundle 11 | import android.os.Messenger 12 | import android.widget.Toast 13 | import io.flutter.embedding.android.FlutterActivity 14 | import io.flutter.embedding.engine.FlutterEngine 15 | import io.flutter.plugin.common.BinaryMessenger 16 | import io.flutter.plugin.common.EventChannel 17 | import io.flutter.plugin.common.MethodChannel 18 | import org.jetbrains.annotations.NotNull 19 | import java.lang.reflect.Method 20 | import android.content.Intent.getIntent 21 | import android.os.Parcelable 22 | 23 | // import `in`.jvapps.system_alert_window.SystemAlertWindowPlugin 24 | // import io.flutter.app.FlutterApplication 25 | // import io.flutter.plugin.common.PluginRegistry 26 | // import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback 27 | 28 | class MainActivity: FlutterActivity() { 29 | 30 | private val TRANSLATE_CHANNEL_NAME = "com.simplytranslate_mobile/translate" 31 | private var translateChannel: MethodChannel? = null 32 | 33 | override fun configureFlutterEngine(@NotNull flutterEngine: FlutterEngine) { 34 | super.configureFlutterEngine(flutterEngine) 35 | // Setup Channels 36 | setupChannels(this,flutterEngine.dartExecutor.binaryMessenger) 37 | 38 | } 39 | 40 | private fun setupChannels(context:Context, messenger: BinaryMessenger){ 41 | translateChannel = MethodChannel(messenger, TRANSLATE_CHANNEL_NAME) 42 | translateChannel!!.setMethodCallHandler{ 43 | call, result -> 44 | if (call.method == "getText"){ 45 | result.success(text) 46 | text = "" 47 | } else { 48 | result.notImplemented() 49 | } 50 | } 51 | } 52 | private fun teardownChannels(){ 53 | teardownChannels() 54 | translateChannel!!.setMethodCallHandler(null) 55 | } 56 | 57 | 58 | 59 | 60 | } 61 | var text = "" 62 | class UppercaseActivity : Activity() { 63 | 64 | override fun onCreate(savedInstanceState: Bundle?) { 65 | super.onCreate(savedInstanceState) 66 | 67 | text = intent.getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT).toString() 68 | 69 | val launchIntent = packageManager.getLaunchIntentForPackage("com.simplytranslate_mobile") 70 | launchIntent?.let { startActivity(it) } 71 | finish() 72 | 73 | } 74 | 75 | } 76 | 77 | class SharedActivity : Activity() { 78 | 79 | override fun onCreate(savedInstanceState: Bundle?) { 80 | super.onCreate(savedInstanceState) 81 | 82 | text = intent.getCharSequenceExtra(Intent.EXTRA_TEXT).toString() 83 | 84 | val launchIntent = packageManager.getLaunchIntentForPackage("com.simplytranslate_mobile") 85 | launchIntent?.let { startActivity(it) } 86 | finish() 87 | 88 | } 89 | 90 | } 91 | 92 | 93 | // class Application : FlutterApplication(), PluginRegistrantCallback { 94 | // override fun onCreate() { 95 | // super.onCreate() 96 | // SystemAlertWindowPlugin.setPluginRegistrant(this) 97 | // } 98 | 99 | // override fun registerWith(registry: PluginRegistry) { 100 | // SystemAlertWindowPlugin.registerWith(registry.registrarFor("in.jvapps.system_alert_window")); 101 | // } 102 | // } -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #478061 4 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/profile/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/profile/ic_launcher-playstore.png -------------------------------------------------------------------------------- /android/app/src/profile/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/profile/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/profile/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/profile/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/profile/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/profile/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/profile/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/profile/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/profile/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/profile/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/profile/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/profile/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/profile/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/profile/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/profile/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/profile/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/profile/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/profile/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/profile/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/profile/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/profile/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/profile/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/profile/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/profile/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/profile/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/profile/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/profile/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/profile/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/profile/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/profile/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/profile/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/android/app/src/profile/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/profile/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #478061 4 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.8.0' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.3.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | project.evaluationDependsOn(':app') 25 | } 26 | 27 | tasks.register("clean", Delete) { 28 | delete rootProject.buildDir 29 | } 30 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-all.zip 7 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /assets/ca/lets-encrypt-r3.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw 3 | TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh 4 | cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw 5 | WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg 6 | RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK 7 | AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP 8 | R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx 9 | sxPnHKzhm+/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm 10 | NHz6a4uPVymZ+DAXXbpyb/uBxa3Shlg9F8fnCbvxK/eG3MHacV3URuPMrSXBiLxg 11 | Z3Vms/EY96Jc5lP/Ooi2R6X/ExjqmAl3P51T+c8B5fWmcBcUr2Ok/5mzk53cU6cG 12 | /kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC 13 | AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYB 14 | Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA 15 | FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw 16 | AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw 17 | Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB 18 | gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W 19 | PTNlclQtgaDqw+34IL9fzLdwALduO/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl 20 | ikfmZW4/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2QQz 21 | CkcheAmCJ8MqyJu5zlzyZMjAvnnAT45tRAxekrsu94sQ4egdRCnbWSDtY7kh+BIm 22 | lJNXoB1lBMEKIq4QDUOXoRgffuDghje1WrG9ML+Hbisq/yFOGwXD9RiX8F6sw6W4 23 | avAuvDszue5L3sz85K+EC4Y/wFVDNvZo4TYXao6Z0f+lQKc0t8DQYzk1OXVu8rp2 24 | yJMC6alLbBfODALZvYH7n7do1AZls4I9d1P4jnkDrQoxB3UqQ9hVl3LEKQ73xF1O 25 | yK5GhDDX8oVfGKF5u+decIsH4YaTw7mP3GFxJSqv3+0lUFJoi5Lc5da149p90Ids 26 | hCExroL1+7mryIkXPeFM5TgO9r0rvZaBFOvV2z0gp35Z0+L4WPlbuEjN/lxPFin+ 27 | HlUjr8gRsI3qfJOQFy/9rKIJR0Y/8Omwt/8oTWgy1mdeHmmjk7j1nYsvC9JSQ6Zv 28 | MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX 29 | nLRbwHOoq7hHwg== 30 | -----END CERTIFICATE----- 31 | -------------------------------------------------------------------------------- /assets/favicon/simplytranslate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/assets/favicon/simplytranslate.png -------------------------------------------------------------------------------- /assets/favicon/simplytranslate_transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/assets/favicon/simplytranslate_transparent.png -------------------------------------------------------------------------------- /assets/favicon/simplytranslate_transparent_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/assets/favicon/simplytranslate_transparent_black.png -------------------------------------------------------------------------------- /assets/settings/counter-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/assets/settings/counter-dark.png -------------------------------------------------------------------------------- /assets/settings/counter-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/assets/settings/counter-light.png -------------------------------------------------------------------------------- /assets/settings/counter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 38 | 40 | 45 | 48 | 52 | 56 | 57 | 5000 68 | 0 79 | 80 | 81 | -------------------------------------------------------------------------------- /desiredFileName.txt: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /docs/ar/donate.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 17 |

18 |



19 |

تبرع 20 | تسلم دياتك! 21 |

22 |
23 |

Buymeacoffee: https://www.buymeacoffee.com/manerakai

24 |

LiberaPay: https://liberapay.com/simplytranslate_mobile

25 |

btc: bc1qrhue0frps6p2vkg978u9ayethnwprtmfug827q

26 |




27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/ar/download.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 17 |

18 |



19 |

تحميل

20 |
21 |

إف-درويد: https://f-droid.org/en/packages/com.simplytranslate_mobile

22 |

آثار غيت هاب (إصدارات بيتا): https://github.com/ManeraKai/simplytranslate_mobile/actions/workflows/main.yml

23 |




24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/ar/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 18 |
19 |

SimplyTranslate Mobile

20 |
21 |
22 |
23 |

عميل أندرويد لـSimplyTranslate

Get it on F-Droid 24 |

25 |
26 |

ما هو SimplyTranslate؟

27 |

SimplyTranslate هو برنامج خادم (سيرفر) مفتوح المصدر يسحب بيانات الترجمة من مواقع مشهورة مثل ترجمة غوغل، ICIBA ،Reverso ،LibreTranslate إلخ... ويقدمها لك على شكل صفحة ويب بسيطة بدون أي إعلانات أو برامج تتبع مدسوسة بها.
SimplyTranslate هو ليس عبارة عن نظير واحد (خادم، server)، بل هو عبارة عن عدة نظراء مشغلة بواسطة متطوعين حول العالم، تستطيع أيضا أن تشغل نظيرك الخاص إذا أردت. هنا القائمة الرسمية للنظراء العامين المعروفين.

28 |

ما هو SimplyTranslate Mobile؟

29 |

بدلاً من استعمال "واجهة الويب" لـSimplyTranslate على هاتفك، صنعنا واجهة هاتف كاملة لـSimplyTranslate + بعض الميزات الإضافية:

30 |
36 |
37 |
38 | 39 | -------------------------------------------------------------------------------- /docs/ar/source.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 17 |

18 |



19 |

كود المصدر

20 |
21 |

غيت هاب: https://github.com/ManeraKai/simplytranslate_mobile

22 |

كود بيرغ: https://codeberg.org/ManeraKai/simplytranslate_mobile

23 |




24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/assets/1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/docs/assets/1.webp -------------------------------------------------------------------------------- /docs/assets/2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/docs/assets/2.webp -------------------------------------------------------------------------------- /docs/assets/3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/docs/assets/3.webp -------------------------------------------------------------------------------- /docs/assets/4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/docs/assets/4.webp -------------------------------------------------------------------------------- /docs/assets/bc1q0mk9eynz9waufjmk2eslt36cqxtgnqkhfmj9yj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/docs/assets/bc1q0mk9eynz9waufjmk2eslt36cqxtgnqkhfmj9yj.png -------------------------------------------------------------------------------- /docs/assets/f-droid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/docs/assets/f-droid.png -------------------------------------------------------------------------------- /docs/assets/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/docs/assets/favicon.png -------------------------------------------------------------------------------- /docs/assets/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/docs/assets/preview.png -------------------------------------------------------------------------------- /docs/css/fonts/Inter-VariableFont_slnt,wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/docs/css/fonts/Inter-VariableFont_slnt,wght.ttf -------------------------------------------------------------------------------- /docs/css/fonts/Vazirmatn-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/docs/css/fonts/Vazirmatn-VariableFont_wght.ttf -------------------------------------------------------------------------------- /docs/donate.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 16 |

17 |



18 |

Donate 19 | Thank You! 20 |

21 |
22 |

Buymeacoffee: https://www.buymeacoffee.com/manerakai

23 |

LiberaPay: https://liberapay.com/simplytranslate_mobile

24 |

btc: bc1qrhue0frps6p2vkg978u9ayethnwprtmfug827q

25 |




26 | 27 | 28 | -------------------------------------------------------------------------------- /docs/download.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 16 |

17 |



18 |

Download

19 |
20 |

F-Droid: https://f-droid.org/en/packages/com.simplytranslate_mobile

21 |

GitHub Artifacts (beta builds): https://github.com/ManeraKai/simplytranslate_mobile/actions/workflows/main.yml

22 |




23 | 24 | 25 | -------------------------------------------------------------------------------- /docs/en/donate.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 16 |

17 |



18 |

Donate 19 | Thank You! 20 |

21 |
22 |

Buymeacoffee: https://www.buymeacoffee.com/manerakai

23 |

LiberaPay: https://liberapay.com/simplytranslate_mobile

24 |

btc: bc1qrhue0frps6p2vkg978u9ayethnwprtmfug827q

25 |




26 | 27 | 28 | -------------------------------------------------------------------------------- /docs/en/download.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 16 |

17 |



18 |

Download

19 |
20 |

F-Droid: https://f-droid.org/en/packages/com.simplytranslate_mobile

21 |

GitHub Artifacts (beta builds): https://github.com/ManeraKai/simplytranslate_mobile/actions/workflows/main.yml

22 |




23 | 24 | 25 | -------------------------------------------------------------------------------- /docs/en/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 16 |
17 |

SimplyTranslate Mobile

18 |
19 |
20 |
21 |

A privacy friendly frontend to Google Translate

Get it on F-Droid 22 |

23 |
24 |
25 |
26 | 27 | -------------------------------------------------------------------------------- /docs/en/source.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 16 |

17 |



18 |

Source Code

19 |
20 |

GitHub: https://github.com/ManeraKai/simplytranslate_mobile

21 |

Codeberg: https://codeberg.org/ManeraKai/simplytranslate_mobile

22 |




23 | 24 | 25 | -------------------------------------------------------------------------------- /docs/fr/donate.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 17 |

18 |



19 |

Faire un don 20 | Merci ! 21 |

22 |
23 |

Buymeacoffee: https://www.buymeacoffee.com/manerakai

24 |

LiberaPay: https://liberapay.com/simplytranslate_mobile

25 |

btc: bc1qrhue0frps6p2vkg978u9ayethnwprtmfug827q

26 |




27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/fr/download.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 17 |

18 |



19 |

Télécharger

20 |
21 |

F-Droid: https://f-droid.org/en/packages/com.simplytranslate_mobile

22 |

GitHub Artifacts (versions bêta): https://github.com/ManeraKai/simplytranslate_mobile/actions/workflows/main.yml

23 |




24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/fr/source.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 17 |

18 |



19 |

Code source

20 |
21 |

GitHub: https://github.com/ManeraKai/simplytranslate_mobile

22 |

Codeberg: https://codeberg.org/ManeraKai/simplytranslate_mobile

23 |




24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 16 |
17 |

SimplyTranslate Mobile

18 |
19 |
20 |
21 |

A privacy friendly frontend to Google Translate

Get it on F-Droid 22 |

23 |
24 |
25 |
26 | 27 | -------------------------------------------------------------------------------- /docs/nb_NO/donate.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 17 |

18 |



19 |

Doner 20 | Takk. 21 |

22 |
23 |

Buymeacoffee: https://www.buymeacoffee.com/manerakai

24 |

LiberaPay: https://liberapay.com/simplytranslate_mobile

25 |

btc: bc1qrhue0frps6p2vkg978u9ayethnwprtmfug827q

26 |




27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/nb_NO/download.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 17 |

18 |



19 |

Last ned

20 |
21 |

F-Droid: https://f-droid.org/en/packages/com.simplytranslate_mobile

22 |

GitHub Artifacts (beta-bygg): https://github.com/ManeraKai/simplytranslate_mobile/actions/workflows/main.yml

23 |




24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/nb_NO/source.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 17 |

18 |



19 |

Kildekode

20 |
21 |

GitHub: https://github.com/ManeraKai/simplytranslate_mobile

22 |

Codeberg: https://codeberg.org/ManeraKai/simplytranslate_mobile

23 |




24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/pl/donate.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 17 |

18 |



19 |

Wesprzyj 20 | Dziękuję! 21 |

22 |
23 |

Buymeacoffee: https://www.buymeacoffee.com/manerakai

24 |

LiberaPay: https://liberapay.com/simplytranslate_mobile

25 |

btc: bc1qrhue0frps6p2vkg978u9ayethnwprtmfug827q

26 |




27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/pl/download.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 17 |

18 |



19 |

Pobierz

20 |
21 |

F-Droid: https://f-droid.org/en/packages/com.simplytranslate_mobile

22 |

GitHub Artifacts (kompilacje beta): https://github.com/ManeraKai/simplytranslate_mobile/actions/workflows/main.yml

23 |




24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/pl/source.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 17 |

18 |



19 |

Kod źródłowy

20 |
21 |

GitHub: https://github.com/ManeraKai/simplytranslate_mobile

22 |

Codeberg: https://codeberg.org/ManeraKai/simplytranslate_mobile

23 |




24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/pug/donate.pug: -------------------------------------------------------------------------------- 1 | include ./widgets/widgets.pug 2 | doctype html 3 | html(lang="ar" dir=dir) 4 | head 5 | +head 6 | title SimplyTranslate Mobile 7 | body 8 | +navbar('donate') 9 | 10 | div.section 11 | br 12 | .section_title 13 | br 14 | br 15 | br 16 | h1!=donate 17 | | 18 | | 19 | !=donate_thanks 20 | p Buymeacoffee: https://www.buymeacoffee.com/manerakai 21 | p LiberaPay: https://liberapay.com/simplytranslate_mobile 22 | p btc: bc1qrhue0frps6p2vkg978u9ayethnwprtmfug827q 23 | 24 | br 25 | br 26 | br 27 | br 28 | 29 | +footer -------------------------------------------------------------------------------- /docs/pug/download.pug: -------------------------------------------------------------------------------- 1 | include ./widgets/widgets.pug 2 | doctype html 3 | html(lang="ar" dir=dir) 4 | head 5 | +head 6 | title SimplyTranslate Mobile 7 | body 8 | +navbar('download') 9 | 10 | div.section 11 | br 12 | .section_title 13 | br 14 | br 15 | br 16 | h1.section_title!=download 17 | 18 | p!=fdroid 19 | |: https://f-droid.org/en/packages/com.simplytranslate_mobile 20 | p!=github_artifacts 21 | |: https://github.com/ManeraKai/simplytranslate_mobile/actions/workflows/main.yml 22 | 23 | br 24 | br 25 | br 26 | br 27 | 28 | +footer -------------------------------------------------------------------------------- /docs/pug/index.pug: -------------------------------------------------------------------------------- 1 | include ./widgets/widgets.pug 2 | doctype html 3 | html(lang="ar" dir=dir) 4 | head 5 | +head 6 | title SimplyTranslate Mobile 7 | body 8 | +navbar('home') 9 | 10 | header 11 | img.main_logo(src="/simplytranslate_mobile/assets/logo.svg") 12 | h1 SimplyTranslate Mobile 13 | 14 | div.section 15 | .badge 16 | p.main-font A privacy friendly frontend to Google Translate 17 | a(href="https://f-droid.org/en/packages/com.simplytranslate_mobile/") 18 | img(src="/simplytranslate_mobile/assets/f-droid.png" alt="Get it on F-Droid" height="80") 19 | 20 | br 21 | 22 | div.screenshots 23 | img.center(src="/simplytranslate_mobile/assets/1.webp") 24 | img.center(src="/simplytranslate_mobile/assets/2.webp") 25 | img.center(src="/simplytranslate_mobile/assets/3.webp") 26 | img.center(src="/simplytranslate_mobile/assets/4.webp") 27 | 28 | +footer 29 | 30 | br -------------------------------------------------------------------------------- /docs/pug/source.pug: -------------------------------------------------------------------------------- 1 | include ./widgets/widgets.pug 2 | doctype html 3 | html(lang="ar" dir=dir) 4 | head 5 | +head 6 | title SimplyTranslate Mobile 7 | body 8 | +navbar('source') 9 | 10 | div.section 11 | br 12 | .section_title 13 | br 14 | br 15 | br 16 | h1!=source_code 17 | 18 | p!=github 19 | |: https://github.com/ManeraKai/simplytranslate_mobile 20 | p!=codeberg 21 | |: https://codeberg.org/ManeraKai/simplytranslate_mobile 22 | 23 | br 24 | br 25 | br 26 | br 27 | 28 | +footer -------------------------------------------------------------------------------- /docs/pug/widgets/widgets.pug: -------------------------------------------------------------------------------- 1 | mixin head 2 | meta(http-equiv="Content-Type" content="text/html; charset=UTF-8") 3 | meta(name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0" ) 4 | meta(name="theme-color" content="#141414" ) 5 | link(rel="shortcut icon" type="image/png" href="./assets/favicon.png" ) 6 | meta(name="description" content="An alternative front-end to GoogleTranslate") 7 | link(itemprop="image" href="./assets/favicon.png") 8 | link(href="/simplytranslate_mobile/css/index.css" type="text/css" rel="stylesheet" media="screen,projection" ) 9 | meta(content="https://manerakai.github.io/simplytranslate_mobile/assets/preview.png" property="og:image") 10 | 11 | mixin navbar(page) 12 | .navbar 13 | a(href="./index.html" class=page == 'home' ? "selected" : "")!=home 14 | a(href="./download.html" class=page == 'download' ? "selected" : "")!=download 15 | a(href="./source.html" class=page == 'source' ? "selected" : "")!=source_code 16 | a(href="./contributors.html" class=page == 'contributors' ? "selected" : "")!=contributors 17 | a(href="./donate.html" class=page == 'donate' ? "selected" : "")!=donate 18 | 19 | //- if page == 'home' 20 | .langs(dir="ltr") 21 | a(href="/simplytranslate_mobile/en/index.html") EN 22 | a(href="/simplytranslate_mobile/ar/index.html") AR 23 | a(href="/simplytranslate_mobile/fr/index.html") FR 24 | a(href="/simplytranslate_mobile/nb_NO/index.html") NB NO 25 | a(href="/simplytranslate_mobile/pl/index.html") PL 26 | a(href="/simplytranslate_mobile/tr/index.html") TR 27 | 28 | 29 | mixin footer 30 | footer 31 | a(href="https://simple-web.org/projects/simplytranslate.html") SimplyTranslate 32 | | |  33 | a(href="https://simple-web.org/") Simple Web Project -------------------------------------------------------------------------------- /docs/source.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 16 |

17 |



18 |

Source Code

19 |
20 |

GitHub: https://github.com/ManeraKai/simplytranslate_mobile

21 |

Codeberg: https://codeberg.org/ManeraKai/simplytranslate_mobile

22 |




23 | 24 | 25 | -------------------------------------------------------------------------------- /docs/strings/ar.json: -------------------------------------------------------------------------------- 1 | { 2 | "home": "الصفحة الرئيسية", 3 | "download": "تحميل", 4 | "source_code": "كود المصدر", 5 | "contributors": "المساهمون", 6 | "developers": "المطورون", 7 | "donate": "تبرع", 8 | "donate_thanks": "تسلم دياتك!", 9 | "short_description": "عميل أندرويد لـSimplyTranslate.", 10 | "what_is_simplytranslate": "ما هو SimplyTranslate؟", 11 | "what_is_simplytranslate_answer": "SimplyTranslate هو برنامج خادم (سيرفر) مفتوح المصدر يسحب بيانات الترجمة من مواقع مشهورة مثل ترجمة غوغل، ICIBA ،Reverso ،LibreTranslate إلخ... ويقدمها لك على شكل صفحة ويب بسيطة بدون أي إعلانات أو برامج تتبع مدسوسة بها.
SimplyTranslate هو ليس عبارة عن نظير واحد (خادم، server)، بل هو عبارة عن عدة نظراء مشغلة بواسطة متطوعين حول العالم، تستطيع أيضا أن تشغل نظيرك الخاص إذا أردت. هنا القائمة الرسمية للنظراء العامين المعروفين.", 12 | "what_is_simplytranslate_mobile": "ما هو SimplyTranslate Mobile؟", 13 | "what_is_simplytranslate_mobile_answer": "بدلاً من استعمال \"واجهة الويب\" لـSimplyTranslate على جهازك، هناك الآن واجهة جوال كاملة، زائد بعض الميزات الإضافية:", 14 | "random_instance_each_request": "نظير عشوائي كل عملية ترجمة لمنع اعطاء كامل سياق ترجمتك لنظير واحد فقط", 15 | "custom_instance_option": "خيار نظير مخصص", 16 | "text_to_speech": "نص-إلى-كلام (TTS)", 17 | "offline_camera_text_recognition": "تعرف على النص بدون الحاجة إلى إنترنت مش خرافي ولكن كل عمليات المعالجة تتم داخل الهاتف ولا تُبعث أي صورة إلى النظير", 18 | "fdroid": "إف-درويد", 19 | "github_artifacts": "آثار غيت هاب (إصدارات بيتا)", 20 | "github": "غيت هاب", 21 | "codeberg": "كود بيرغ", 22 | "testers": "المختبرون", 23 | "translators": "المترجمون", 24 | "icon": "الأيقونة" 25 | } 26 | -------------------------------------------------------------------------------- /docs/strings/bg.json: -------------------------------------------------------------------------------- 1 | { 2 | "home": "Начало", 3 | "source_code": "Изходен код", 4 | "contributors": "Доброволци", 5 | "download": "Изтегляне", 6 | "developers": "Разработчици", 7 | "donate": "Дари", 8 | "donate_thanks": "Благодаря!", 9 | "what_is_simplytranslate": "Какво е SimplyTranslate?", 10 | "what_is_simplytranslate_mobile": "Какво е SimplyTranslate Mobile?", 11 | "translators": "Преводачи", 12 | "icon": "Иконка", 13 | "fdroid": "F-Droid", 14 | "github": "GitHub", 15 | "codeberg": "Codeberg" 16 | } 17 | -------------------------------------------------------------------------------- /docs/strings/bn.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /docs/strings/cs.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /docs/strings/de.json: -------------------------------------------------------------------------------- 1 | { 2 | "source_code": "Quellcode", 3 | "download": "Herunterladen", 4 | "developers": "Entwickler", 5 | "donate": "Spenden", 6 | "what_is_simplytranslate_mobile": "Was ist SimplyTranslate Mobile?", 7 | "github": "GitHub", 8 | "donate_thanks": "Danke!", 9 | "short_description": "Ein Android-Client für SimplyTranslate.", 10 | "home": "Startseite", 11 | "testers": "Prüfer", 12 | "translators": "Übersetzer", 13 | "icon": "Symbol", 14 | "text_to_speech": "Text-zu-Sprache (TzS)", 15 | "codeberg": "Codeberg", 16 | "contributors": "Mitwirkende", 17 | "what_is_simplytranslate": "Was ist SimplyTranslate?", 18 | "what_is_simplytranslate_mobile_answer": "Anstatt die Web-Schnittstelle von SimplyTranslate auf Ihrem Telefon zu verwenden, haben wir ein komplettes mobiles Interface für SimplyTranslate und einige zusätzliche Funktionen entwickelt:", 19 | "custom_instance_option": "Option \"Benutzerdefinierte Instanz\"", 20 | "random_instance_each_request": "Zufällige Instanz bei jeder Anfrage um zu verhindern, dass der gesamte Kontext Ihrer Übersetzung an eine Instanz weitergegeben wird", 21 | "offline_camera_text_recognition": "Offline Kamera Texterkennung nicht die perfekteste, aber sie sendet keine Fotos an die Instanzen", 22 | "fdroid": "F-Droid", 23 | "github_artifacts": "GitHub Artefakte (Beta-Builds)", 24 | "what_is_simplytranslate_answer": "SimplyTranslateSimplyTranslate ist eine Open-Source-Server-Applikation, die Übersetzungsdaten von beliebten Übersetzungswebseiten wie Google Translate, ICIBA, Reverso, LibreTranslate etc... abruft und sie dir in einer einfachen Weboberfläche ohne Werbung oder Tracking-Scripts präsentiert. Du kannst es sogar mit deaktiviertem Tor + JavaScript benutzen und es funktioniert immer noch einwandfrei.
SimplyTranslate ist'nicht nur eine Instanz (Server), sondern'mehrere Instanzen rund um die Welt, die von Freiwilligen betrieben werden, du kannst sogar deine eigene private Instanz betreiben. Hier ist die offizielle Liste der bekannten öffentlichen Instanzen." 25 | } 26 | -------------------------------------------------------------------------------- /docs/strings/el.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /docs/strings/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "home": "Home", 3 | "download": "Download", 4 | "source_code": "Source Code", 5 | "contributors": "Contributors", 6 | "developers": "Developers", 7 | "donate": "Donate", 8 | "donate_thanks": "Thank You!", 9 | "short_description": "An android client for SimplyTranslate.", 10 | "what_is_simplytranslate": "What is SimplyTranslate?", 11 | "what_is_simplytranslate_answer": "SimplyTranslate is an open source server app that scraps translation data from popular translation websites like Google Translate, ICIBA, Reverso, LibreTranslate etc… and presents it to you in a simple web interface without any ads nor tracking scripts. You can even use it with Tor + JavaScript disabled and it'll still work properly.
SimplyTranslate isn't just one instance (server), it's multiple instances around the world ran by volunteers, you can even run your own private instance. Here is the official list of the known public instances.", 12 | "what_is_simplytranslate_mobile": "What is SimplyTranslate Mobile?", 13 | "what_is_simplytranslate_mobile_answer": "Rather than using the \"web interface\" of SimplyTranslate on your device, there is now a whole mobile interface, plus some additional features:", 14 | "random_instance_each_request": "Random Instance Each Request to prevent giving the full context of your translation to one instance", 15 | "custom_instance_option": "Custom instance option", 16 | "text_to_speech": "Text-To-Speech (TTS)", 17 | "offline_camera_text_recognition": "Offline Camera Text Recognition not the most perfect but it doesn't send any photos to the instances", 18 | "fdroid": "F-Droid", 19 | "github_artifacts": "GitHub Artifacts (beta builds)", 20 | "github": "GitHub", 21 | "codeberg": "Codeberg", 22 | "testers": "Testers", 23 | "translators": "Translators", 24 | "icon": "Icon" 25 | } 26 | -------------------------------------------------------------------------------- /docs/strings/eo.json: -------------------------------------------------------------------------------- 1 | { 2 | "home": "Ĉefpaĝo", 3 | "download": "Elŝuti", 4 | "source_code": "Fontokodo", 5 | "contributors": "Kontribuantoj", 6 | "developers": "Programistoj", 7 | "donate": "Donaci", 8 | "donate_thanks": "Dankon!", 9 | "fdroid": "F-Droid", 10 | "what_is_simplytranslate": "Kio estas SimplyTranslate?", 11 | "github": "GitHub", 12 | "codeberg": "Codeberg", 13 | "translators": "Tradukantoj", 14 | "icon": "Piktogramo", 15 | "what_is_simplytranslate_answer": "SimplyTranslate estas malfermitfonta servila programo, kiu prenas tradukaĵojn el popularaj tradukaj retejoj kiel Google Translate, ICIBA, Reverso, LibreTranslate ktp… kaj prezentas ĝin al vi sur simpla retfasado sen reklamoj aŭ spuriloj. Vi eĉ povas uzi ĝin per Tor aŭ sen JavaScript.
SimplyTranslate ne estas nur unu servilo; ĝi konsistas el pluraj serviloj tra la mondo prizorgataj de volontuloj. Vi eĉ povas funkciigi vian propran servilon. Jen la oficiala listo de la konataj publikaj serviloj.", 16 | "github_artifacts": "GitHub-Artefaktoj (beta-versioj)", 17 | "custom_instance_option": "Opcio uzi propran servilon", 18 | "text_to_speech": "Prononcilo", 19 | "testers": "Elprovantoj", 20 | "what_is_simplytranslate_mobile_answer": "Anstataŭ uzo de la «retfasado» de SimplyTranslate per via aparato, nun ekzistas plena poŝaparata fasado kun pliaj funkcioj:", 21 | "random_instance_each_request": "Hazarda servilo por ĉiu peto por malhelpi sciigi unu servilon pri la plena kunteksto de via tradukado", 22 | "offline_camera_text_recognition": "Senreta fotila tekstlegilo ne plene perfekta, sed tio ne sendas fotojn al la serviloj", 23 | "short_description": "Kliento por SimplyTranslate sur Android.", 24 | "what_is_simplytranslate_mobile": "Kio estas SimplyTranslate Mobile?" 25 | } 26 | -------------------------------------------------------------------------------- /docs/strings/es.json: -------------------------------------------------------------------------------- 1 | { 2 | "what_is_simplytranslate_answer": "SimplyTranslate es una aplicación de código abierto de servidor que extrae datos de traducción de traductores web populares como Google Translate, ICIBA, Reverso, LibreTranslate, etc... y te los presenta en una interfaz web sencilla sin publicidad ni scripts de rastreo. Se puede usar incluso a través de Tor y con JavaScript deshabilitado y seguirá funcionando correctamente. SimplyTranslate no es solo una instancia (servidor), sino múltiples instancias alrededor del mundo manejadas por voluntarios; incluso puedes alojar tu propia instancia privada. Aquí tienes la lista oficial de todas las instancias públicas conocidas.", 3 | "home": "Inicio", 4 | "download": "Descargar", 5 | "source_code": "Código fuente", 6 | "donate": "Donar", 7 | "contributors": "Contribuyentes", 8 | "developers": "Desarrolladores", 9 | "donate_thanks": "¡Gracias!", 10 | "short_description": "Un cliente de Android para SimplyTranslate.", 11 | "what_is_simplytranslate": "¿Qué es SimplyTranslate?", 12 | "what_is_simplytranslate_mobile_answer": "En lugar de usar la interfaz web de SimplyTranslate en tu dispositivo, ahora hay una interfaz móvil, con unas cuantas funciones nuevas:", 13 | "what_is_simplytranslate_mobile": "¿Qué es SimplyTranslate Mobile?", 14 | "random_instance_each_request": "Cada solicitud se manda a una instancia aleatoria para evitar dar el contexto completo de tu traducción a una instancia", 15 | "text_to_speech": "Texto a voz (TTS)", 16 | "offline_camera_text_recognition": "El reconocimiento de texto offline a través de la cámara no es el mejor del mundo pero al menos no envía fotos a ninguna instancia", 17 | "custom_instance_option": "Opción de usar una instancia personalizada", 18 | "fdroid": "F-Droid", 19 | "github_artifacts": "Artefactos de GitHub (builds en beta)", 20 | "github": "GitHub", 21 | "codeberg": "Codeberg", 22 | "testers": "Testers", 23 | "translators": "Traductores", 24 | "icon": "Icono" 25 | } 26 | -------------------------------------------------------------------------------- /docs/strings/fa.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /docs/strings/fi.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /docs/strings/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "source_code": "Code source", 3 | "what_is_simplytranslate_answer": "SimplyTranslate est une application serveur open source qui récupère les données de traduction des sites web de traduction les plus populaires comme Google Translate, ICIBA, Reverso, LibreTranslate etc. et vous les présente dans une interface web simple sans aucune publicité ni script de suivi. Vous pouvez même l'utiliser avec Tor + JavaScript désactivé et il fonctionnera toujours correctement.
SimplyTranslate n'est pas seulement une instance (serveur), c'est de multiples instances dans le monde entier gérées par des bénévoles, vous pouvez même faire fonctionner votre propre instance privée. Voici la liste officielle des instances publiques connues.", 4 | "github": "GitHub", 5 | "testers": "Testeurs", 6 | "translators": "Traducteurs", 7 | "home": "Accueil", 8 | "random_instance_each_request": "Instance aléatoire à chaque demande pour éviter de donner le contexte complet de votre traduction à une seule instance", 9 | "custom_instance_option": "Option d'instance personnalisée", 10 | "text_to_speech": "Synthèse vocale", 11 | "offline_camera_text_recognition": "Reconnaissance de texte par caméra hors ligne pas la plus parfaite mais elle n'envoie aucune photo aux instances", 12 | "donate": "Faire un don", 13 | "download": "Télécharger", 14 | "what_is_simplytranslate": "Qu'est-ce que SimplyTranslate ?", 15 | "codeberg": "Codeberg", 16 | "contributors": "Contributeurs", 17 | "developers": "Développeurs", 18 | "donate_thanks": "Merci !", 19 | "short_description": "Un client Android pour SimplyTranslate.", 20 | "what_is_simplytranslate_mobile": "Qu'est-ce que SimplyTranslate Mobile ?", 21 | "what_is_simplytranslate_mobile_answer": "Plutôt que d'utiliser l'interface web de SimplyTranslate sur votre appareil, il y a maintenant une interface mobile complète, plus quelques fonctionnalités supplémentaires :", 22 | "fdroid": "F-Droid", 23 | "github_artifacts": "GitHub Artifacts (versions bêta)", 24 | "icon": "Icône" 25 | } 26 | -------------------------------------------------------------------------------- /docs/strings/hu.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_description": "Az android kliens a SimplyTranslate számára.", 3 | "home": "Kezdőképernyő", 4 | "download": "Letöltés", 5 | "source_code": "Forráskód", 6 | "contributors": "Közreműködők", 7 | "donate_thanks": "Köszönöm!", 8 | "what_is_simplytranslate_answer": "A SimplyTranslate egy nyílt forráskódú szerveralkalmazás, amely begyüjti a fordítási adatokat a népszerű fordítási weboldalakról, mint a Google Fordító, ICIBA, Reverso, LibreTranslate stb..., és egy egyszerű webes felületen bemutatja, hirdetések és nyomkövető szkriptek nélkül. Akár Tor + JavaScript nélkül is használhatja, akkor is megfelelően fog működni.
A SimplyTranslate nem csak egy példány (szerver), hanem több példány (szerver) is van a világon, amelyet önkéntesek működtetnek, akár saját magánpéldányt is futtathat. Itt található az ismert nyilvános példányok hivatalos listája.", 9 | "donate": "Támogatás", 10 | "developers": "Fejlesztők", 11 | "what_is_simplytranslate": "Mi az a SimplyTranslate?", 12 | "fdroid": "F-Droid", 13 | "what_is_simplytranslate_mobile": "Mi az a SimplyTranslate Mobil?", 14 | "what_is_simplytranslate_mobile_answer": "Ahelyett, hogy a SimplyTranslate „webes felületét” használná az eszközén, most már egy teljes mobil felület áll rendelkezésre, valamint néhány további funkció is elérhető:", 15 | "random_instance_each_request": "Minden kérés véletlenszerű példány, megakadályozva a fordítás teljes szövegkörnyezetének átadását egy példánynak", 16 | "text_to_speech": "Text-To-Speech (TTS)", 17 | "offline_camera_text_recognition": "Az offline kamera szövegfelismerés nem a legtökéletesebb, de nem küld fényképeket a példányoknak", 18 | "custom_instance_option": "Egyéni példány választási lehetőség", 19 | "github_artifacts": "GitHub Artifacts (béta kiadás)", 20 | "github": "GitHub", 21 | "codeberg": "Codeberg", 22 | "testers": "Tesztelők", 23 | "translators": "Fordítók", 24 | "icon": "Ikon" 25 | } 26 | -------------------------------------------------------------------------------- /docs/strings/id.json: -------------------------------------------------------------------------------- 1 | { 2 | "donate": "Berdonasi" 3 | } 4 | -------------------------------------------------------------------------------- /docs/strings/is.json: -------------------------------------------------------------------------------- 1 | { 2 | "download": "Sækja", 3 | "home": "Upphaf", 4 | "source_code": "Grunnkóði", 5 | "contributors": "Framlög frá", 6 | "what_is_simplytranslate": "Hvaða er SimplyTranslate?", 7 | "fdroid": "F-Droid", 8 | "custom_instance_option": "Val um að sérsníða netþjónstilvik", 9 | "donate": "Styrkja", 10 | "developers": "Forritarar", 11 | "donate_thanks": "Þakka þér fyrir!", 12 | "short_description": "Android-forrit fyrir SimplyTranslate.", 13 | "what_is_simplytranslate_mobile": "Hvaða er SimplyTranslate Mobile?", 14 | "text_to_speech": "Texti-í-tal (TTS)", 15 | "github_artifacts": "GitHub Artifacts (beta-byggingarútgáfur)", 16 | "github": "GitHub", 17 | "codeberg": "Codeberg", 18 | "testers": "Prófarar", 19 | "translators": "Þýðendur", 20 | "icon": "Táknmynd", 21 | "what_is_simplytranslate_answer": "SimplyTranslate er netþjónsforrit með opnum grunnkóða sem skrapar þýðingagögn frá vinsælum þýðingavefjum á borð við Google Translate, ICIBA, Reverso, LibreTranslate o.s.frv… og setur þau fram fyrir þig í einföldu vefviðmóti án nokkurra rakningaskriftunar. Þú getur meira að segja notað þetta í gegnum Tor ásamt því að gera JavaScript óvirkt og það mun samt virka rétt properly.
SimplyTranslate er ekki bara eitt tilvik (netþjónn), heldur euru þetta mörg tilvik rekin af sjálfboðaliðum úti um víða veröld, þú getur meira að segja keyrt þitt eigið einkatilvik. Hér er opinber listi yfir þekkt aðgengileg tilvik.", 22 | "what_is_simplytranslate_mobile_answer": "Frekar en að nota \"vefviðmótið\" á SimplyTranslate á tækinu þínu, þá er komið forrit fyrir snjalltæki sem innifelur ýmsa viðbótareiginleika:", 23 | "random_instance_each_request": "Handahófskennt tilvik fyrir hverja beiðni til að koma í veg fyrir að allt samhengi þýðingarinnar fari til eins og sama tilviksins", 24 | "offline_camera_text_recognition": "Ónettengd textagreining með myndavél er ekki það allra fullkomnasta en sendir ekki neinar myndir á netþjónana" 25 | } 26 | -------------------------------------------------------------------------------- /docs/strings/it.json: -------------------------------------------------------------------------------- 1 | { 2 | "what_is_simplytranslate_answer": "SimplyTranslate è un'applicazione server open source che raccoglie i dati di traduzione da siti web di traduzione popolari come Google Translate, ICIBA, Reverso, LibreTranslate ecc... e te lo presenta in una semplice interfaccia web senza pubblicità né script di tracciamento. Puoi anche usarlo con Tor + JavaScript disabilitato e funzionerà comunque correttamente.
SimplyTranslate non è solo una istanza (server), sono più istanze in tutto il mondo gestite da volontari, puoi anche eseguire la tua istanza privata. Qui la lista ufficiale delle istanze pubbliche conosciute.", 3 | "home": "Home", 4 | "download": "Scarica", 5 | "source_code": "Codice Sorgente", 6 | "contributors": "Collaboratori", 7 | "developers": "Sviluppatori", 8 | "donate": "Dona", 9 | "donate_thanks": "Grazie!", 10 | "short_description": "Un client Android per SimplyTranslate.", 11 | "what_is_simplytranslate": "Cos'è SimplyTranslate?", 12 | "what_is_simplytranslate_mobile": "Cos'è SimplyTranslate Mobile?", 13 | "what_is_simplytranslate_mobile_answer": "Piuttosto che utilizzare l' \"interfaccia web\" di SimplyTranslate sul tuo dispositivo, ora c'è un'intera interfaccia mobile, oltre ad alcune funzionalità aggiuntive:", 14 | "random_instance_each_request": "Istanza casuale ad ogni richiesta per evitare di dare il contesto completo della tua traduzione ad un'istanza", 15 | "custom_instance_option": "Opzione per un'istanza personalizzata", 16 | "text_to_speech": "Sintesi vocale (TTS)", 17 | "offline_camera_text_recognition": "Riconoscimento del testo dalla fotocamera offline non il migliore, ma non invia alcuna foto alle istanze", 18 | "fdroid": "F-Droid", 19 | "github_artifacts": "Artifatti GitHub (build beta)", 20 | "github": "GitHub", 21 | "codeberg": "Codeberg", 22 | "testers": "Collaudatori", 23 | "translators": "Traduttori", 24 | "icon": "Icona" 25 | } 26 | -------------------------------------------------------------------------------- /docs/strings/ja.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /docs/strings/ko.json: -------------------------------------------------------------------------------- 1 | { 2 | "home": "홈", 3 | "donate": "기부하기", 4 | "donate_thanks": "감사합니다!", 5 | "what_is_simplytranslate": "SimplyTranslate는 무엇인가요?", 6 | "what_is_simplytranslate_mobile": "SimplyTranslate Mobile는 무엇인가요?", 7 | "what_is_simplytranslate_mobile_answer": "장치에서 SimplyTranslate의 \"웹 인터페이스\"를 사용하는 대신 이제 전체 모바일 인터페이스와 몇 가지 추가 기능이 있습니다:", 8 | "custom_instance_option": "커스텀 인스턴스 설정", 9 | "fdroid": "F-Droid", 10 | "download": "다운로드", 11 | "short_description": "안드로이드 클라이언트 SimplyTranslate.", 12 | "source_code": "소스 코드", 13 | "developers": "개발자들", 14 | "contributors": "기여자들", 15 | "github": "GitHub", 16 | "random_instance_each_request": "임의 인스턴스 각 요청은 한 인스턴스에 번역의 전체 컨텍스트를 제공하지 않도록 합니다", 17 | "text_to_speech": "글자 읽어주기 (TTS)", 18 | "offline_camera_text_recognition": "오프라인 카메라 텍스트 인식 가장 완벽하지는 않지만 인스턴스에 사진을 보내지 않습니다", 19 | "github_artifacts": "Github 아티팩트(베타 빌드)", 20 | "testers": "테스터들", 21 | "codeberg": "코드버그", 22 | "translators": "번역가들", 23 | "icon": "아이콘", 24 | "what_is_simplytranslate_answer": "SimplyTranslate는 Google Translate, ICIBA, Reverso, LibreTranslate 등과 같은 인기 있는 번역 웹사이트에서 번역 데이터를 스크랩하여 광고나 추적 스크립트 없이 간단한 웹 인터페이스로 제공하는 오픈 소스 서버 앱입니다. Tor + JavaScript를 비활성화한 상태에서도 사용할 수 있으며 여전히 제대로 작동합니다.
SimplyTranslate는 하나의 인스턴스(서버)가 아니라 자원봉사자가 운영하는 전 세계 여러 인스턴스입니다." 25 | } 26 | -------------------------------------------------------------------------------- /docs/strings/ml.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /docs/strings/nb_NO.json: -------------------------------------------------------------------------------- 1 | { 2 | "home": "Hjem", 3 | "download": "Last ned", 4 | "source_code": "Kildekode", 5 | "contributors": "Bidragsytere", 6 | "developers": "Utviklere", 7 | "donate_thanks": "Takk.", 8 | "short_description": "En Android-klient for SimplyTranslate.", 9 | "what_is_simplytranslate": "Hva er SimplyTranslate?", 10 | "github": "GitHub", 11 | "custom_instance_option": "Alternativ for egendefinert instans", 12 | "text_to_speech": "Tekst-til-tale/talesyntese (TTS)", 13 | "fdroid": "F-Droid", 14 | "github_artifacts": "GitHub Artifacts (beta-bygg)", 15 | "random_instance_each_request": "Tilfeldig insans for hver forespørsel for å forhindre at hele konteksten av oversettelsen går til samme sted", 16 | "what_is_simplytranslate_mobile_answer": "Snarere enn å bruke vev-grensesnittet til SimplyTranslate på enheten din, kan du bruke mobilgrensesnittet, pluss noen ytterligere funksjoner:", 17 | "offline_camera_text_recognition": "Frakoblet kamera-tekstoppdagelse ikke den beste funksjonaliteten, men det sender ihvertfall ikke bilder til instansene", 18 | "donate": "Doner", 19 | "codeberg": "Codeberg", 20 | "what_is_simplytranslate_mobile": "Hva er SimplyTranslate Mobile?", 21 | "translators": "Oversettere", 22 | "icon": "Ikon", 23 | "testers": "Testere", 24 | "what_is_simplytranslate_answer": "SimplyTranslate er fri server som henter oversettelsesdata fra populære oversettelsesnettsider som Google Translate, ICIBA, Reverso, LibreTranslate osv… og presenterer det for deg i et enkelt vev-grensesnitt, uten reklame eller sporingsskript.
SimplyTranslate er ikke bare én instans (tjener), det er flere rundt omkring som vertstjenes av frivillige, og du kan også bruke din egen private instans fra listen over offentlige instanser." 25 | } 26 | -------------------------------------------------------------------------------- /docs/strings/nl.json: -------------------------------------------------------------------------------- 1 | { 2 | "home": "Voorblad", 3 | "download": "Opslaan", 4 | "contributors": "Medewerkers", 5 | "developers": "Ontwikkelaars", 6 | "donate_thanks": "Dankuwel!", 7 | "short_description": "Een Android cliënt voor SimplyTranslate.", 8 | "what_is_simplytranslate": "Wat is SimplyTranslate?", 9 | "what_is_simplytranslate_mobile": "Wat is SimplyTranslate Mobiel?", 10 | "what_is_simplytranslate_mobile_answer": "Beter dan een \"web-aansluiting\" van SimplyTranslate op jouw mobiel, bieden wij een hele mobiele app aan, met nog wat aanvullende functionaliteiten:", 11 | "random_instance_each_request": "Willekeurige server bij elk verzoek om te voorkomen dat één server de hele invoer van uw vertaling ziet", 12 | "custom_instance_option": "Aangepaste server mogelijkheid", 13 | "text_to_speech": "Tekst-naar-spraak (TTS)", 14 | "fdroid": "F-Droid", 15 | "translators": "Vertalers", 16 | "icon": "Teken", 17 | "donate": "Doneren", 18 | "github_artifacts": "GitHub Artifacten (beta-builds)", 19 | "github": "GitHub", 20 | "codeberg": "Codeberg", 21 | "testers": "Testers", 22 | "source_code": "Broncode", 23 | "what_is_simplytranslate_answer": "SimplyTranslate is een openbron server app die de vertalingen van Google Translate, ICIBA, Reverso, LibreTranslate, enz. pakt en jou aanbiedt zonder enige reclames of privacyschendende scripts. U kunt het zelfs met Tor +JavaScript uitgeschakeld gebruiken en het werkt uitstekend.
SimplyTranslate is niet slechts één instantie (server); het zijn meerdere servers over de wereld beheerd door vrijwilligers. U kunt zelfs uw eigen privé server beheren. Hier is de officiële lijst van de erkende servers.", 24 | "offline_camera_text_recognition": "Offline Camera Tekst Herkenning niet vlekkeloos, maar zo verzendt u geen afbeeldingen naar servers" 25 | } 26 | -------------------------------------------------------------------------------- /docs/strings/pl.json: -------------------------------------------------------------------------------- 1 | { 2 | "home": "Strona główna", 3 | "download": "Pobierz", 4 | "source_code": "Kod źródłowy", 5 | "contributors": "Współtwórcy", 6 | "developers": "Programiści", 7 | "donate_thanks": "Dziękuję!", 8 | "donate": "Wesprzyj", 9 | "short_description": "Klient androidowy dla SimplyTranslate.", 10 | "custom_instance_option": "Opcja ustawienia własnej instancji", 11 | "text_to_speech": "Zamiana tekstu na mowę (TTS)", 12 | "fdroid": "F-Droid", 13 | "github_artifacts": "GitHub Artifacts (kompilacje beta)", 14 | "github": "GitHub", 15 | "icon": "Ikona", 16 | "random_instance_each_request": "Losowa instancja dla każdego żądania — aby zapobiec przekazywaniu pełnego kontekstu tłumaczenia jednej instancji", 17 | "offline_camera_text_recognition": "Rozpoznawanie tekstu z aparatu offline — nie najdoskonalsze, ale nie wysyła żadnych zdjęć do instancji", 18 | "what_is_simplytranslate": "Co to jest SimplyTranslate?", 19 | "what_is_simplytranslate_mobile": "Co to jest SimplyTranslate Mobile?", 20 | "what_is_simplytranslate_answer": "SimplyTranslate to otwartoźródłowa aplikacja serwerowa, która zbiera dane tłumaczeniowe z popularnych stron tłumaczeniowych, takich jak Tłumacz Google, ICIBA, Reverso, LibreTranslate itp., i przedstawia je w prostym interfejsie webowym bez żadnych reklam ani skryptów śledzących. Możesz nawet używać go z Torem i wyłączonym JavaScriptem i nadal będzie działać prawidłowo.
SimplyTranslate to nie tylko jedna instancja (serwer), ale wiele instancji na całym świecie prowadzonych przez wolontariuszy; możesz nawet uruchomić swoją własną prywatną instancję. Oto oficjalna lista znanych publicznych instancji.", 21 | "what_is_simplytranslate_mobile_answer": "Zamiast korzystać z „interfejsu webowego” SimplyTranslate na urządzeniu, masz teraz cały interfejs mobilny oraz kilka dodatkowych funkcji:", 22 | "translators": "Tłumacze", 23 | "codeberg": "Codeberg", 24 | "testers": "Testerzy" 25 | } 26 | -------------------------------------------------------------------------------- /docs/strings/pt_BR.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /docs/strings/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "what_is_simplytranslate_answer": "SimplyTranslate — это серверное приложение с открытым исходным кодом, которое собирает данные переводов с популярных онлайн-переводчиков, таких как Google Translate, ICIBA, Reverso, LibreTranslate и т.д... И предоставляет их вам в простом веб-интерфейсе, без какой-либо рекламы или отслеживающих скриптов. Вы даже можете использовать его с Tor и выключенным JavaScript, и он всё ещё будет работать как надо.
SimplyTranslate — это не просто одна инстанция (сервер), это множественные инстанции, расположенные по всему миру и запущенные добровольцами. Вы даже можете запустить вашу собственную приватную инстанцию. Здесь есть официальный список известных публичных инстанций.", 3 | "home": "Домой", 4 | "download": "Загрузить", 5 | "source_code": "Исходный код", 6 | "contributors": "Помощники", 7 | "developers": "Разработчики", 8 | "donate": "Пожертвовать", 9 | "donate_thanks": "Спасибо!", 10 | "short_description": "Android клиент для SimplyTranslate.", 11 | "what_is_simplytranslate": "Что такое SimplyTranslate?", 12 | "what_is_simplytranslate_mobile": "Что такое SimplyTranslate Mobile?", 13 | "what_is_simplytranslate_mobile_answer": "Вместо использования \"веб-интерфейса\" SimplyTranslate на вашем устройстве, здесь есть полноценный мобильный интерфейс, а также некоторые дополнительные функции:", 14 | "random_instance_each_request": "Случайная инстанция на каждый запрос, чтобы предотвратить получение одной инстанцией полного текста вашего перевода", 15 | "custom_instance_option": "Опция добавления пользовательской инстанции", 16 | "text_to_speech": "Текст-в-Речь (TTS)", 17 | "offline_camera_text_recognition": "Распознавание текста камерой без интернета с не самым лучшим качеством, но оно не отправляет какие-либо фотографии на инстанции", 18 | "fdroid": "F-Droid", 19 | "github_artifacts": "GitHub Артефакты (бета сборки)", 20 | "github": "GitHub", 21 | "codeberg": "Codeberg", 22 | "testers": "Тестировщики", 23 | "translators": "Переводчики", 24 | "icon": "Значок" 25 | } 26 | -------------------------------------------------------------------------------- /docs/strings/tr.json: -------------------------------------------------------------------------------- 1 | { 2 | "donate": "Bağış Yap", 3 | "donate_thanks": "Teşekkürler!", 4 | "short_description": "SimplyTranslate için bir Android istemcisi.", 5 | "what_is_simplytranslate": "SimplyTranslate Nedir?", 6 | "what_is_simplytranslate_mobile": "SimplyTranslate Mobil Nedir?", 7 | "what_is_simplytranslate_mobile_answer": "Aygıtınızda SimplyTranslate'in \"web arayüzünü\" kullanmak yerine, artık tam bir mobil arayüz ve bazı ek özellikler bulunmaktadır:", 8 | "random_instance_each_request": "Her İstekte Rastgele Örnek çevirinizin tüm bağlamının tek bir örneğe verilmesini önlemek için", 9 | "custom_instance_option": "Özel örnek seçeneği", 10 | "text_to_speech": "Metin Okuma (TTS)", 11 | "offline_camera_text_recognition": "Çevrim Dışı Kamera Metin Tanıma en mükemmeli değil ama örneklere herhangi bir fotoğraf göndermez", 12 | "testers": "Test Edenler", 13 | "translators": "Çevirmenler", 14 | "icon": "Simge", 15 | "contributors": "Katkıda Bulunanlar", 16 | "developers": "Geliştiriciler", 17 | "source_code": "Kaynak Kodu", 18 | "download": "İndir", 19 | "home": "Ana Sayfa", 20 | "fdroid": "F-Droid", 21 | "codeberg": "Codeberg", 22 | "what_is_simplytranslate_answer": "SimplyTranslate; Google Çeviri, ICIBA, Reverso, LibreTranslate gibi popüler çeviri web sitelerinden çeviri verilerini toplayan ve bunları herhangi bir reklam veya izleme betiği olmadan basit bir web arayüzünde size sunan açık kaynaklı bir sunucu uygulamasıdır. Tor + JavaScript devre dışıyken bile kullanabilirsiniz ve yine de düzgün çalışacaktır.
SimplyTranslate sadece bir örnek (sunucu) değil, gönüllüler tarafından yönetilen dünya çapında birden fazla örnektir, hatta kendi özel örneğinizi çalıştırabilirsiniz. Bilinen herkese açık örneklerin resmi listesine göz atabilirsiniz.", 23 | "github_artifacts": "GitHub Yapıları (beta derlemeleri)", 24 | "github": "GitHub" 25 | } 26 | -------------------------------------------------------------------------------- /docs/strings/uk.json: -------------------------------------------------------------------------------- 1 | { 2 | "home": "Головна", 3 | "source_code": "Вихідний код", 4 | "donate": "Пожертви", 5 | "donate_thanks": "Дякую!", 6 | "short_description": "Клієнт android для SimplyTranslate.", 7 | "what_is_simplytranslate": "Що таке SimplyTranslate?", 8 | "text_to_speech": "Текст-у-голос (TTS)", 9 | "fdroid": "F-Droid", 10 | "github": "GitHub", 11 | "testers": "Тестувальники", 12 | "translators": "Перекладачі", 13 | "contributors": "Співрозробники", 14 | "download": "Завантажити", 15 | "developers": "Розробники", 16 | "what_is_simplytranslate_mobile": "Що таке SimplyTranslate Mobile?", 17 | "codeberg": "Codeberg", 18 | "icon": "Значок" 19 | } 20 | -------------------------------------------------------------------------------- /docs/strings/zh_Hant_HK.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /docs/tr/donate.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 17 |

18 |



19 |

Bağış Yap 20 | Teşekkürler! 21 |

22 |
23 |

Buymeacoffee: https://www.buymeacoffee.com/manerakai

24 |

LiberaPay: https://liberapay.com/simplytranslate_mobile

25 |

btc: bc1qrhue0frps6p2vkg978u9ayethnwprtmfug827q

26 |




27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/tr/download.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 17 |

18 |



19 |

İndir

20 |
21 |

F-Droid: https://f-droid.org/en/packages/com.simplytranslate_mobile

22 |

GitHub Yapıları (beta derlemeleri): https://github.com/ManeraKai/simplytranslate_mobile/actions/workflows/main.yml

23 |




24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/tr/source.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | SimplyTranslate Mobile 13 | 14 | 15 | 17 |

18 |



19 |

Kaynak Kodu

20 |
21 |

GitHub: https://github.com/ManeraKai/simplytranslate_mobile

22 |

Codeberg: https://codeberg.org/ManeraKai/simplytranslate_mobile

23 |




24 | 25 | 26 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ar/full_description.txt: -------------------------------------------------------------------------------- 1 | هذا التطبيق هو عبارة واجهة أماميةبديلة لـGoogle Translate 2 | 3 | الميزات 4 | * 108 لغات 5 | * النص إلى كلام 6 | * استقبال نص مشارك من تطبيق آخر 7 | * زر ترجمة في شريط الأدوات عندما تحدد على نص في النظام 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ar/short_description.txt: -------------------------------------------------------------------------------- 1 | واجهة أمامية بديلة لـGoogle Translate 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ar/title.txt: -------------------------------------------------------------------------------- 1 | SimplyTranslate Mobile 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/cs/full_description.txt: -------------------------------------------------------------------------------- 1 | Tato aplikace je alternativním klientem pro Google Translate, ale přímo se k němu nepřipojuje. 2 | Funguje následovně: 3 | 1. Text je odeslán od vás (uživatele) náhodné instanci SimplyTranslate (serveru). 4 | 2. Tato instance si vyžádá překlad od Google Translate. 5 | 3. Google Translate pošle překlad dané instanci, která: 6 | 4. Jej předá zase vám. 7 | 8 | To znamená, že Google Translate nebude znát vaši totožnost. Zanesení vašich dat do centralizované databáze zabraňuje tím, že každý požadavek bude vykonán jinou náhodnou instancí (výchozí nastavení), budou tedy vaše data rozprostřeny mezi různými instancemi, tak, že bude mnohem těžší je mezi sebou pospojovat, efektivně je skrývajíc. 9 | 10 | Funkce: 11 | * Podporuje 108 jazyků 12 | * Předčítání (TTS) 13 | * Zpracuje i sdílený text z jiných aplikací 14 | * Tlačítko překladu v nástrojové liště vybraného textu 15 | * Náhodný výběr instance pro každý požadavek 16 | * Aktualizovatelný oficiální seznam SimplyTranslate instancí 17 | * Možnost výběru vlastní instance 18 | * Temný mód 19 | * Rozpoznání textu z obrázku (OCR) 20 | -------------------------------------------------------------------------------- /fastlane/metadata/android/cs/short_description.txt: -------------------------------------------------------------------------------- 1 | Alternativní klient pro Google Translate 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/cs/title.txt: -------------------------------------------------------------------------------- 1 | SimplyTranslate Mobile 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/de/full_description.txt: -------------------------------------------------------------------------------- 1 | Diese App ist ein alternatives Front-End zu Google Translate, verbindet sich aber nicht direkt mit diesem. 2 | Sie funktioniert wie folgt: 3 | 1. Der Text wird von Ihnen (dem Benutzer) eingegeben und an eine zufällige SimplyTranslate-Instanz (Server) gesendet. 4 | 2. Diese Instanz wird die Daten von Google Translate anfordern. 5 | 3. Google Translate sendet die Übersetzung zurück an diese Instanz. 6 | 4. Diese Instanz sendet die Übersetzung an Sie zurück. 7 | 8 | Auf diese Weise wird Google Translate Ihre Identität nicht kennen. Durch die automatische Auswahl einer zufälligen Instanz (Standardmodus) bei jeder Anfrage werden Ihre Daten verschleiert und zwischen den Instanzen verteilt, so dass nichts leicht verknüpft werden kann, da es sich nicht in einer zentralen Datenbank befindet. 9 | 10 | Features: 11 | * Unterstützt 108 Sprachen 12 | * Text-To-Speech (TTS) 13 | * Kann freigegebenen Text von anderen Anwendungen empfangen 14 | * Eine Schaltfläche zum Übersetzen in der Textauswahl-Symbolleiste 15 | * Automatische Zufallsauswahl der Instanz bei jeder Anfrage 16 | * Eine aktualisierbare offizielle Liste von SimplyTranslate-Instanzen 17 | * Option für benutzerdefinierte Instanzen 18 | * Dunkles Thema 19 | * Kamera-Text-Erkennung 20 | -------------------------------------------------------------------------------- /fastlane/metadata/android/de/short_description.txt: -------------------------------------------------------------------------------- 1 | Alternatives Front-End für Google Translate 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/de/title.txt: -------------------------------------------------------------------------------- 1 | SimplyTranslate Mobil 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/full_description.txt: -------------------------------------------------------------------------------- 1 | This app is an alternative frontend to Google Translate. 2 | 3 | Features: 4 | * Supports 108 languages 5 | * Text-To-Speech (TTS) 6 | * Can receive shared text from other apps 7 | * A translate button in the text selection toolbar -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/fastlane/metadata/android/en-US/images/icon.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/fastlane/metadata/android/en-US/images/phoneScreenshots/1.webp -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/fastlane/metadata/android/en-US/images/phoneScreenshots/2.webp -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/fastlane/metadata/android/en-US/images/phoneScreenshots/3.webp -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManeraKai/simplytranslate_mobile/fbb76f92c6edcd2e7846aaf4d072d2666987c54b/fastlane/metadata/android/en-US/images/phoneScreenshots/4.webp -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/short_description.txt: -------------------------------------------------------------------------------- 1 | A privacy friendly frontend to Google Translate 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/title.txt: -------------------------------------------------------------------------------- 1 | SimplyTranslate Mobile 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/eo/full_description.txt: -------------------------------------------------------------------------------- 1 | Ĉi tiu programo estas alternativa fasado por Google Translate, sed ne rekte ligas al ĝi. 2 | Ĝi funkcias jene: 3 | 1. Teksto estas sendita de vi (la uzanto) al hazarda servilo de SimplyTranslate. 4 | 2. Ĉi tiu servilo petos tradukaĵon de Google Translate. 5 | 3. Google Translate sendos la tradukaĵon al la servilo. 6 | 4. La servilo sendos la tradukaĵon al vi. 7 | 8 | Tiel Google Translate ne scios vian identecon. Aŭtomate elektante hazardan servilon (laŭ la apriora reĝimo), ĉiu peto kaŝos kaj tramiksos viajn datenojn inter serviloj; do nenio estos facile ligebla, ĉar ĝi ne estas en centralizita datenbanko. 9 | 10 | Trajtoj: 11 | * Subtenas 108 lingvojn 12 | * Prononcilo 13 | * Povas ricevi tekston el aliaj programoj 14 | * Butono «traduki» en la ilobreto de tekstoelekto 15 | * Aŭtomata hazarda elekto de servilo por ĉiu peto 16 | * Ĝisdatigebla oficiala listo de SimplyTranslate-serviloj 17 | * Opcio uzi propran servilon 18 | * Malhela etoso 19 | * Fota tekstlegilo 20 | -------------------------------------------------------------------------------- /fastlane/metadata/android/eo/short_description.txt: -------------------------------------------------------------------------------- 1 | Alternativa fasado por Google-Tradukilo 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/eo/title.txt: -------------------------------------------------------------------------------- 1 | SimplyTranslate por Poŝaparato 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/es/full_description.txt: -------------------------------------------------------------------------------- 1 | Esta aplicación es una interfaz alternativa al Traductor de Google (Google Translate). 2 | 3 | Características: 4 | * Admite 108 idiomas 5 | * Texto a voz (TTS) 6 | * Puede recibir texto compartido de otras aplicaciones 7 | * Un botón de traducción en la barra de herramientas de selección de texto 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/es/short_description.txt: -------------------------------------------------------------------------------- 1 | Una interfaz amigable con la privacidad para Google Translate 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/es/title.txt: -------------------------------------------------------------------------------- 1 | SimplyTranslate Mobile 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/fr/full_description.txt: -------------------------------------------------------------------------------- 1 | Cette application est une alternative frontale à Google Translate, mais ne s'y connecte pas directement. 2 | Elle fonctionne comme suit : 3 | 1. Le texte est soumis par vous (l'utilisateur) et envoyé à une instance aléatoire de SimplyTranslate (serveur). 4 | 2. Cette instance va demander ces données à Google Translate. 5 | 3. Google Translate renvoie la traduction à cette instance. 6 | 4. Cette instance vous renverra la traduction. 7 | 8 | De cette façon, Google Translate ne connaîtra pas votre identité. La sélection automatique d'une instance aléatoire (mode par défaut) à chaque demande obscurcit et répartit vos données entre les instances, de sorte que rien ne peut être relié facilement puisqu'elles ne se trouvent pas dans une base de données centralisée. 9 | 10 | Caractéristiques : 11 | * Prise en charge de 108 langues 12 | * Synthèse vocale 13 | * Peut recevoir du texte partagé d'autres applis 14 | * Un bouton de traduction dans la barre d'outils de sélection de texte. 15 | * Sélection automatique et aléatoire d'une instance à chaque demande 16 | * Une liste officielle actualisable des instances de SimplyTranslate 17 | * Option d'instance personnalisée 18 | * Thème sombre 19 | * Reconnaissance de texte par caméra 20 | -------------------------------------------------------------------------------- /fastlane/metadata/android/fr/short_description.txt: -------------------------------------------------------------------------------- 1 | Une alternative front-end à Google Translate 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/fr/title.txt: -------------------------------------------------------------------------------- 1 | SimplyTranslate Mobile 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/hu-HU/full_description.txt: -------------------------------------------------------------------------------- 1 | Ez az alkalmazás egy alternatív frontend a Google Fordítójához. 2 | 3 | Jellemzői: 4 | * 108 nyelvet támogat 5 | Text-To-Speech (TTS) 6 | * Megosztott szöveget kaphat más alkalmazásokból 7 | * Fordítógomb a szövegkiválasztó eszköztárban 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/hu-HU/short_description.txt: -------------------------------------------------------------------------------- 1 | Egy magánéletbarát frontend a Google Fordítójához 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/hu-HU/title.txt: -------------------------------------------------------------------------------- 1 | SimplyTranslate Mobil 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/is-IS/full_description.txt: -------------------------------------------------------------------------------- 1 | Þetta forrit er annað viðmót fyrir Google Translate. 2 | 3 | Eiginleikar: 4 | * Styður 108 tungumál 5 | * Texti-í-tal (TTS) 6 | * Tekur við deildum texta frá öðrum forritum 7 | * Þýðingahnappur í verkfærastiku fyrir val texta 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/is-IS/short_description.txt: -------------------------------------------------------------------------------- 1 | Annað viðmót á Google Translate 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/is-IS/title.txt: -------------------------------------------------------------------------------- 1 | SimplyTranslate á snjalltæki 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/it/full_description.txt: -------------------------------------------------------------------------------- 1 | Questa applicazione è un front-end alternativo a Google Traduttore, ma non si collega direttamente ad esso. 2 | Funziona come segue: 3 | 1. Il testo viene inviato da voi (l'utente) e inviato a un'istanza casuale di SimplyTranslate (server). 4 | 2. Questa istanza richiederà quei dati da Google Traduttore. 5 | 3. Google Traduttore invierà la traduzione indietro a quell'istanza. 6 | 4. L'istanza rimanderà la traduzione a te. 7 | 8 | In questo modo Google Traduttore non conoscerà la tua identità. La selezione automatica di un'istanza casuale (modalità predefinita) ad ogni richiesta offuscherà e diffonderà di più i vostri dati tra le istanze in modo che nulla sarà collegato facilmente in quanto non è in un database centralizzato. 9 | 10 | Caratteristiche: 11 | * Supporta 108 lingue 12 | * Text-To-Speech (TTS) 13 | * Può ricevere testo condiviso da altre applicazioni 14 | * Un pulsante di traduzione nella barra degli strumenti di selezione del testo 15 | * Selezione automatica di istanze casuali ad ogni richiesta 16 | * Un elenco ufficiale aggiornabile di istanze SimplyTranslate 17 | * Opzione di istanza personalizzata 18 | * Tema scuro 19 | * Riconoscimento del testo della fotocamera 20 | -------------------------------------------------------------------------------- /fastlane/metadata/android/it/short_description.txt: -------------------------------------------------------------------------------- 1 | Front-end alternativo a Google Traduttore 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/it/title.txt: -------------------------------------------------------------------------------- 1 | SimplyTranslate Mobile 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ja/full_description.txt: -------------------------------------------------------------------------------- 1 | このアプリは Google翻訳 の代替フロントエンドで、Google翻訳 に直接接続せずに、翻訳することができます。 2 | 次のように機能します。 3 | 1. テキストはあなた (ユーザー) から送信され、ランダムな SimplyTranslate インスタンス (サーバー) に送信されます。 4 | 2. このインスタンスは、Google翻訳 にそのデータを要求します。 5 | 3. Google翻訳 は、翻訳をそのインスタンスに送り返します。 6 | 4. そのインスタンスは翻訳をあなたに送り返します。 7 | 8 | このように、Google翻訳 はあなたを特定することができません。各リクエストにランダムなインスタンスを自動的に選択 (デフォルトモード) することにより、インスタンス間でデータをわかりにくし、より分散されているため、一元化されたデータベースのような、簡単にリンクされるものはありません。 9 | 10 | 機能: 11 | * 108 の言語をサポート 12 | * テキスト読み上げ (TTS) 13 | * 他のアプリから共有されたテキストを受け取れます 14 | * 翻訳ボタンがテキスト選択ツールバーにあります 15 | * 各リクエストにランダムなインスタンスを自動的に選択 16 | * 更新可能な SimplyTranslate インスタンスの公式リスト 17 | * カスタムインスタンスオプション 18 | * ダークテーマ 19 | * カメラによる文字認識 20 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ja/short_description.txt: -------------------------------------------------------------------------------- 1 | Google翻訳 の代替フロントエンド 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ja/title.txt: -------------------------------------------------------------------------------- 1 | SimplyTranslate Mobile 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ko-KR/full_description.txt: -------------------------------------------------------------------------------- 1 | 이 앱은 구글 번역의 대체 프론트엔드입니다. 2 | 3 | 특징들: 4 | * 108개 언어 지원 5 | * TTS 지원 6 | * 다른 앱에서 공유 문장을 받을 수 있음 7 | * 언어 선택 툴바에 있는 번역 버튼 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ko-KR/short_description.txt: -------------------------------------------------------------------------------- 1 | 구글 번역 대체 프론트엔드 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ko-KR/title.txt: -------------------------------------------------------------------------------- 1 | SimplyTranslate Mobile 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/nl/full_description.txt: -------------------------------------------------------------------------------- 1 | Deze toepassing is een andere voorzijde van Google Translate, maar het maakt er geen rechtstreekse verbinding mee. 2 | Het werkt als volgt: 3 | 1. De tekst is ingevoerd door u (de gebruiker) en wordt verzonden naar een willekeurige SimplyTranslate instantie (server. 4 | 2. Deze instantie zal de gegevens opvragen van Google Translate. 5 | 3. Google Translate zal deze vertaling geven aan de instantie. 6 | 4. De instantie zal de vertaling doorgeven aan u. 7 | 8 | Op deze wijze zal Google Translate uw identiteit niet weten. Het willekeurig kiezen van een instantie (de standaard instelling) zal uw gegevens verdoezelen en verspreiden over meerdere instanties, zodat niets eenvoudig gekoppeld kan worden. Er is immers geen grote gegevensbank in het midden. 9 | 10 | Mogelijkheden: 11 | * Ondersteunt 108 talen 12 | * Tekst-naar-spraak (TTS) 13 | * Kan tekst gedeeld uit andere apps ontvangen 14 | * Een vertaalknop bij het selecteren van tekst op welke app dan ook 15 | * Willekeurig kiezen van een SimplyTranslate instantie 16 | * Een tegenwoordige lijst van SimplyTranslate instanties 17 | * Aangepaste instantie mogelijkheid 18 | * Donker uiterlijk 19 | * Tekstherkenning met camera 20 | -------------------------------------------------------------------------------- /fastlane/metadata/android/nl/short_description.txt: -------------------------------------------------------------------------------- 1 | Andere voorzijde van Google Translate 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/nl/title.txt: -------------------------------------------------------------------------------- 1 | SimplyTranslate Mobiel 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/pl/full_description.txt: -------------------------------------------------------------------------------- 1 | Ta aplikacja jest alternatywnym front-endem do Tłumacza Google. 2 | 3 | Cechy: 4 | * Obsługuje 108 języków 5 | * Zamiana tekstu na mowę (TTS) 6 | * Może odbierać tekst udostępniany przez inne aplikacje 7 | * Przycisk do tłumaczenia na pasku narzędzi przy zaznaczaniu tekstu 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/pl/short_description.txt: -------------------------------------------------------------------------------- 1 | Przyjazny dla prywatności interfejs Tłumacza Google 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/pl/title.txt: -------------------------------------------------------------------------------- 1 | SimplyTranslate Mobile 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/pt-BR/full_description.txt: -------------------------------------------------------------------------------- 1 | Este app ē um front-end alternativo para Google Tradutor, mas não se conecta directamente a ele. 2 | 3 | Funciona da seguinte maneira: 4 | 5 | 1. O texto é enviado a uma instância (servidor) aleatória de SimplyTranslate. 6 | 7 | 2. A instância enviará os dados ao Google Tradutor. 8 | 9 | 3. O Google Tradutor retornará a tradução à essa instância. 10 | 11 | 4. A instância enviará a tradução de volta para ti. 12 | 13 | 14 | Dessa forma Google não conhece sua identidade. Selecionando automaticamente uma instância aleatória (que é o que se faz por padrão) cada pedido se ofuscará e a informação se dissipará mais entre instâncias para que nada possa ser vinculado a você facilmente já que não estará em uma base de dados centralizada. 15 | 16 | 17 | Características: 18 | 19 | * Suporta 108 idiomas 20 | 21 | * Texto em voz (TTS) 22 | 23 | * Pode receber texto compartilhado por outros apps 24 | 25 | * Um botão de traduzir no menu de selecionar texto 26 | 27 | * Seleção automática de instância aleatória em cada pedido 28 | 29 | * Una lista oficial atualizável de instâncias de SimplyTranslate 30 | 31 | * Opção de usar uma instância personalizada 32 | 33 | * Tema escuro 34 | 35 | * Reconhecimento de texto com a câmera 36 | -------------------------------------------------------------------------------- /fastlane/metadata/android/pt-BR/short_description.txt: -------------------------------------------------------------------------------- 1 | Front-end alternativo para Google Tradutor 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/pt-BR/title.txt: -------------------------------------------------------------------------------- 1 | SimplyTranslate Mobile 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ru/full_description.txt: -------------------------------------------------------------------------------- 1 | Это приложение является альтернативным клиентом для Google Translate, но оно не подключается к нему напрямую. 2 | Оно работает следующим образом: 3 | 1. Текст, введённый вами (пользователем) отправляется на случайное зеркало (сервер) SimplyTranslate. 4 | 2. Это зеркало запрашивает перевод у Google Translate. 5 | 3. Google Translate отправляет перевод назад на зеркало. 6 | 4. Зеркало отправляет перевод вам. 7 | 8 | Таким образом, Google Translate не может определить вашу личность и собрать какие-либо данные о вас. Автоматический выбор случайного зеркало (режим по умолчанию) для каждого запроса перемешает и распределит ваши данные между зеркалами, так что установить ваши запросы среди прочих будет непросто, ведь это не централизованная база данных. 9 | 10 | Функции: 11 | * Поддержка 108 языков 12 | * Текст-в-Речь (TTS, он же Text-To-Speech) 13 | * Получение текста из других приложений 14 | * Кнопка перевода в меню выделенного текста 15 | * Автоматический выбор случайного зеркала для каждого запроса 16 | * Обновляемый официальный список зеркал SimplyTranslate 17 | * Добавление пользовательских зеркал 18 | * Тёмная тема 19 | * Распознавание текста через камеру 20 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ru/short_description.txt: -------------------------------------------------------------------------------- 1 | Альтернативный клиент для Google Translate 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ru/title.txt: -------------------------------------------------------------------------------- 1 | SimplyTranslate Mobile 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/tr/full_description.txt: -------------------------------------------------------------------------------- 1 | Bu uygulama, Google Çeviri için alternatif bir ön yüzdür, ancak doğrudan ona bağlanmaz. 2 | Şu şekilde çalışır: 3 | 1. Siz (kullanıcı) metni girersiniz ve bu rastgele bir SimplyTranslate örneğine (sunucusuna) gönderilir. 4 | 2. O örnek, Google Çeviri'den verileri ister. 5 | 3. Google Çeviri, çeviriyi o örneğe geri gönderir. 6 | 4. O örnek çeviriyi size geri gönderir. 7 | 8 | Bu şekilde Google Çeviri kimliğinizi bilmeyecektir. Rastgele bir örneği otomatik olarak seçerek (öntanımlı mod), her istekte verileriniz örnekler arasında daha fazla karıştırılır ve yayılır, böylece merkezi bir veri tabanında olmadığı için hiçbir şey kolayca birbiriyle ilişkilendirilemeyecektir. 9 | 10 | Özellikler: 11 | * 108 dili destekler 12 | * Metin Okuma (Text-To-Speech (TTS)) 13 | * Diğer uygulamalardan paylaşılan metin alabilir 14 | * Metin seçimi araç çubuğunda bir çevir düğmesi 15 | * Her istek için otomatik rastgele örnek seçimi 16 | * SimplyTranslate örneklerinin güncellenebilir resmi listesi 17 | * Özel örnek seçeneği 18 | * Koyu tema 19 | * Kameradan Metin Tanıma 20 | -------------------------------------------------------------------------------- /fastlane/metadata/android/tr/short_description.txt: -------------------------------------------------------------------------------- 1 | Google Çeviri için alternatif ön yüz 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/tr/title.txt: -------------------------------------------------------------------------------- 1 | SimplyTranslate Mobil 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/uk/full_description.txt: -------------------------------------------------------------------------------- 1 | Цей застосунок є альтернативним клієнтом для Перекладача Google, але зʼєднується з ним не напряму. 2 | Це працює наступним чином: 3 | 1. Текст від Вас (користувача) надсилається до випадкового екземпляра (сервера) SimplyTranslate. 4 | 2. Цей екземпляр запитує дані від Перекладача Google. 5 | 3. Перекладач Google надсилає переклад назад до екземпляра. 6 | 4. Екземпляр надсилає переклад назад до Вас. 7 | 8 | Таким чином Перекладач Google не знатиме про Вашу особистість. Автоматичний вибір випадкового екземпляра (типовий режим) для кожного запиту буде заплутувати і розпорошувати Ваші дані між екземплярами, тому нічого не буде легко звʼязати, оскільки це не централізована база даних. 9 | 10 | Можливості: 11 | * Підтримка 108 мов 12 | * Текст-у-голос (TTS) 13 | * Може отримувати поширюваний текст з інших програм 14 | * Кнопка перекладу на панелі вибору тексту 15 | * Автовипадковий вибір екземпляра для кожного запиту 16 | * Оновлюваний офіційний список екземплярів SimplyTranslate 17 | * Опція власного екземпляра 18 | * Темна тема 19 | * Розпізнавання тексту через камеру 20 | -------------------------------------------------------------------------------- /fastlane/metadata/android/uk/short_description.txt: -------------------------------------------------------------------------------- 1 | Альтернативна обгортка для Google Translate 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/uk/title.txt: -------------------------------------------------------------------------------- 1 | SimplyTranslate Mobile 2 | -------------------------------------------------------------------------------- /lib/data.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter/scheduler.dart'; 3 | import 'package:flutter/services.dart'; 4 | import 'package:get_storage/get_storage.dart'; 5 | import 'package:package_info_plus/package_info_plus.dart'; 6 | import '/simplytranslate.dart' as simplytranslate; 7 | export 'package:simplytranslate_mobile/messages.dart'; 8 | 9 | const greyColor = const Color(0xff131618); 10 | const greenColor = const Color(0xff3fb274); 11 | const lightThemeGreyColor = const Color(0xffa9a9a9); 12 | 13 | late BuildContext contextOverlordData; 14 | late void Function(void Function() fn) setStateOverlord; 15 | 16 | var themeRadio = AppTheme.system; 17 | 18 | late String fromLangVal; 19 | late String toLangVal; 20 | 21 | Map googleOutput = {}; 22 | 23 | extension CapitalizeString on String { 24 | String capitalize() { 25 | return "${this[0].toUpperCase()}${this.substring(1).toLowerCase()}"; 26 | } 27 | } 28 | 29 | enum AppTheme { dark, light, system } 30 | 31 | var themeValue = ''; 32 | 33 | final Widget line = Container( 34 | margin: const EdgeInsets.only(top: 10, bottom: 5), 35 | height: 1.5, 36 | color: theme == Brightness.dark ? Colors.white : lightThemeGreyColor, 37 | ); 38 | 39 | Brightness theme = SchedulerBinding.instance.platformDispatcher.platformBrightness; 40 | 41 | late Map toSelLangMap; 42 | late Map fromSelLangMap; 43 | 44 | bool loading = false; 45 | bool isTranslationCanceled = false; 46 | 47 | final googleInCtrl = TextEditingController(); 48 | 49 | final session = GetStorage(); 50 | 51 | late final PackageInfo packageInfo; 52 | 53 | Function() fromCancel = () {}; 54 | Function() toCancel = () {}; 55 | 56 | Function(String)? changeFromTxt; 57 | Function(String)? changeToTxt; 58 | 59 | String newText = ""; 60 | 61 | Future getSharedText() async { 62 | const methodChannel = MethodChannel('com.simplytranslate_mobile/translate'); 63 | try { 64 | final answer = await methodChannel.invokeMethod('getText'); 65 | if (answer != '') { 66 | final _translationInput = answer.toString(); 67 | 68 | setStateOverlord(() { 69 | googleInCtrl.text = _translationInput; 70 | loading = true; 71 | }); 72 | 73 | final translatedText = await simplytranslate.translate(_translationInput, 'auto', toLangVal); 74 | setStateOverlord(() => googleOutput = translatedText); 75 | } 76 | } catch (_) { 77 | setStateOverlord(() => loading = false); 78 | } 79 | } 80 | 81 | BuildContext? translateContext; 82 | 83 | bool isTtsInCanceled = false; 84 | bool ttsInputloading = false; 85 | 86 | bool ttsOutloading = false; 87 | bool isTtsOutputCanceled = false; 88 | 89 | bool isFirst = true; 90 | 91 | switchVals() { 92 | if (fromLangVal == 'auto') return; 93 | changeFromTxt!(toSelLangMap[toLangVal]!); 94 | changeToTxt!(fromSelLangMap[fromLangVal]!); 95 | 96 | final tmp = fromLangVal; 97 | fromLangVal = toLangVal; 98 | toLangVal = tmp; 99 | 100 | session.write('to_lang', toLangVal); 101 | session.write('from_lang', fromLangVal); 102 | } 103 | 104 | enum FromTo { from, to } 105 | 106 | (String?, String?, String?) lastUsed(FromTo fromto) { 107 | if (fromto == FromTo.from) { 108 | return (session.read("fromLast1"), session.read("fromLast2"), session.read("fromLast3")); 109 | } else { 110 | return (session.read("toLast1"), session.read("toLast2"), session.read("toLast3")); 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /lib/messages.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'messages/messages.i18n.dart'; 4 | import 'messages/messages_ar.i18n.dart'; 5 | import 'messages/messages_cs.i18n.dart'; 6 | import 'messages/messages_de.i18n.dart'; 7 | import 'messages/messages_el.i18n.dart'; 8 | import 'messages/messages_en.i18n.dart'; 9 | import 'messages/messages_eo.i18n.dart'; 10 | import 'messages/messages_es.i18n.dart'; 11 | import 'messages/messages_fa.i18n.dart'; 12 | import 'messages/messages_fi.i18n.dart'; 13 | import 'messages/messages_fr.i18n.dart'; 14 | import 'messages/messages_hu.i18n.dart'; 15 | import 'messages/messages_is.i18n.dart'; 16 | import 'messages/messages_it.i18n.dart'; 17 | import 'messages/messages_ja.i18n.dart'; 18 | import 'messages/messages_ko.i18n.dart'; 19 | import 'messages/messages_ml.i18n.dart'; 20 | import 'messages/messages_nb_NO.i18n.dart'; 21 | import 'messages/messages_pl.i18n.dart'; 22 | import 'messages/messages_pt_BR.i18n.dart'; 23 | import 'messages/messages_ru.i18n.dart'; 24 | import 'messages/messages_tr.i18n.dart'; 25 | import 'messages/messages_uk.i18n.dart'; 26 | import 'messages/messages_zh_HK.i18n.dart'; 27 | 28 | var langs = [ 29 | MessagesAr(), 30 | MessagesCs(), 31 | MessagesDe(), 32 | MessagesEl(), 33 | MessagesEn(), 34 | MessagesEo(), 35 | MessagesEs(), 36 | MessagesFa(), 37 | MessagesFi(), 38 | MessagesFr(), 39 | MessagesHu(), 40 | MessagesIs(), 41 | MessagesIt(), 42 | MessagesJa(), 43 | MessagesKo(), 44 | MessagesMl(), 45 | MessagesNbNO(), 46 | MessagesPl(), 47 | MessagesPtBR(), 48 | MessagesRu(), 49 | MessagesTr(), 50 | MessagesUk(), 51 | MessagesZhHK(), 52 | ]; 53 | 54 | late Locale appLocale; 55 | 56 | Messages i18n() { 57 | var locale = appLocale; 58 | for (var lang in langs) { 59 | if (lang.locale == "${locale.languageCode}_${locale.countryCode}") return lang; 60 | } 61 | for (var lang in langs) { 62 | if (lang.languageCode == locale.languageCode) return lang; 63 | } 64 | return Messages(); 65 | } 66 | -------------------------------------------------------------------------------- /lib/messages/messages_eo.i18n.yaml: -------------------------------------------------------------------------------- 1 | langs: 2 | afrikaans: Afrikanso 3 | albanian: Albana 4 | amharic: Amharo 5 | arabic: Araba 6 | armenian: Armena 7 | autodetect: Aŭtomate trovi 8 | azerbaijani: Azerbajĝana 9 | basque: Eŭska 10 | belarusian: Belorusa 11 | bengali: Bengala 12 | bosnian: Bosna 13 | bulgarian: Bulgara 14 | catalan: Kataluna 15 | cebuano: Cebua 16 | chichewa: Malavia 17 | chinese: Ĉina 18 | corsican: Korsika 19 | croatian: Kroata 20 | czech: Ĉeĥa 21 | danish: Dana 22 | dutch: Nederlanda 23 | english: Angla 24 | esperanto: Esperanto 25 | estonian: Estona 26 | filipino: Filipina 27 | finnish: Finna 28 | french: Franca 29 | frisian: Frisa 30 | galician: Galega 31 | georgian: Kartvela 32 | german: Germana 33 | greek: Greka 34 | gujarati: Guĝarata 35 | haitian_creole: Haitia kreola 36 | hausa: Haŭsa 37 | hawaiian: Havaja 38 | hebrew: Hebrea 39 | hindi: Hindia 40 | hmong: Hmong 41 | hungarian: Hungara 42 | icelandic: Islanda 43 | igbo: Igbo 44 | indonesian: Indonezia 45 | irish: Irlanda 46 | italian: Itala 47 | japanese: Japana 48 | javanese: Java 49 | kannada: Kannada 50 | kazakh: Kazaĥa 51 | khmer: Ĥmera 52 | kinyarwanda: Ruanda 53 | korean: Korea 54 | kurdish_kurmanji: Kurda (norda) 55 | kyrgyz: Kirgiza 56 | lao: Laosa 57 | latin: Latino 58 | latvian: Latva 59 | lithuanian: Litova 60 | luxembourgish: Leceburga 61 | macedonian: Makedona 62 | malagasy: Malagasa 63 | malay: Malaja 64 | malayalam: Malajala 65 | maltese: Malta 66 | maori: Maoria 67 | marathi: Maharaŝtra 68 | mongolian: Mongola 69 | myanmar_burmese: Birma 70 | nepali: Nepala 71 | norwegian: Norvega 72 | odia_oriya: Orisa 73 | pashto: Patana 74 | persian: Persa 75 | polish: Pola 76 | portuguese: Portugala 77 | punjabi: Panĝaba 78 | romanian: Rumana 79 | russian: Rusa 80 | samoan: Samoa 81 | scots_gaelic: Skotgaela 82 | serbian: Serba 83 | sesotho: Lesota 84 | shona: Zimbabva 85 | sindhi: Sinda 86 | sinhala: Sinhalo 87 | slovak: Slovaka 88 | slovenian: Slovena 89 | somali: Somalia 90 | spanish: Hispana 91 | sundanese: Sunda 92 | swahili: Svahila 93 | swedish: Sveda 94 | tajik: Taĝika 95 | tamil: Tamula 96 | tatar: Tatara 97 | telugu: Teluguo 98 | thai: Taja 99 | traditional_chinese: Traditional Chinese 100 | turkish: Turka 101 | turkmen: Turkmena 102 | ukrainian: Ukraina 103 | urdu: Urduo 104 | uyghur: Ujgura 105 | uzbek: Uzbeka 106 | vietnamese: Vjetnama 107 | welsh: Kimra 108 | xhosa: Kosa 109 | yiddish: Jido 110 | yoruba: Joruba 111 | zulu: Zulua 112 | main: 113 | about: Pri 114 | appearance: Aspekto 115 | audio_limit: Ne eblas prononci pli ol 200 signojn 116 | autodetect_not_supported: Aŭtomata trovado ne funkcias 117 | cancel: Nuligi 118 | contribute: Kontribui 119 | copied_to_clipboard: Kopiita al tondujo 120 | dark: Malhela 121 | definitions: Difinoj 122 | donate: Donaci 123 | enter_text_here: Tajpu tekston ĉi tie 124 | error: Okazis eraro 125 | follow_system: Laŭ sistemo 126 | help: Helpo 127 | input_limit: La tradukotaĵo estas pli longa ol 5000 signoj 128 | install: Instali 129 | license: Permesilo 130 | light: Hela 131 | no_internet: Sen Interreta konekto 132 | ok: Bone 133 | report_bug: Raporti cimon 134 | settings: Agordoj 135 | something_went_wrong: Io fiaskis 136 | text_recognition: Tekstorekono 137 | text_to_speech: Prononcilo 138 | theme: Etoso 139 | translate: Traduki 140 | translation: Tradukado 141 | translations: Tradukoj 142 | version: Versio 143 | website: Retejo 144 | -------------------------------------------------------------------------------- /lib/messages/messages_fa.i18n.yaml: -------------------------------------------------------------------------------- 1 | langs: 2 | afrikaans: آفریقایی 3 | albanian: آلبانیایی 4 | amharic: امهری 5 | arabic: عربی 6 | armenian: ارمنی 7 | autodetect: شناسایی خودکار 8 | azerbaijani: آذربایجانی 9 | basque: باسْکی 10 | belarusian: بلاروسی 11 | bengali: بنگالی 12 | bosnian: بوسنیایی 13 | bulgarian: بلغاری 14 | catalan: کاتالانی 15 | cebuano: سِبوانویی 16 | chichewa: چوایی 17 | chinese: چینی 18 | corsican: کرسی 19 | croatian: کرواتی 20 | czech: چکی 21 | danish: دانمارکی 22 | dutch: هلندی 23 | english: انگلیسی 24 | esperanto: اسپرانتو 25 | estonian: استونیایی 26 | filipino: فیلیپینی 27 | finnish: فنلاندی 28 | french: فرانسوی 29 | frisian: فریسی 30 | galician: گالیسیایی 31 | georgian: گرجی 32 | german: آلمانی 33 | greek: یونانی 34 | gujarati: گجراتی 35 | haitian_creole: کِریول آییسیِنی 36 | hausa: هوسایی 37 | hawaiian: هاوایی 38 | hebrew: عبری 39 | hindi: هندی 40 | hmong: همونگ 41 | hungarian: مجارستانی 42 | icelandic: ایسلندی 43 | igbo: ایگبو 44 | indonesian: اندونزیایی 45 | irish: ایرلندی 46 | italian: ایتالیایی 47 | japanese: ژاپنی 48 | javanese: جاوه‌ای 49 | kannada: کانارا 50 | kazakh: قزاقی 51 | khmer: خمر 52 | kinyarwanda: رواندایی 53 | korean: کره‌ای 54 | kurdish_kurmanji: کردی 55 | kyrgyz: قرقیزی 56 | lao: لائو 57 | latin: لاتین 58 | latvian: لتونیایی 59 | lithuanian: لیتوانیایی 60 | luxembourgish: لوکزامبورگی 61 | macedonian: مقدونی 62 | malagasy: مالاگاسی 63 | malay: مالایی 64 | malayalam: مالایالم 65 | maltese: مالتی 66 | maori: مائوری 67 | marathi: مراتی 68 | mongolian: مغولی 69 | myanmar_burmese: برمه‌ای 70 | nepali: نپالی 71 | norwegian: نروژی 72 | odia_oriya: اودیه (اوریه) 73 | pashto: پشتو 74 | persian: پارسی 75 | polish: لهستانی 76 | portuguese: پرتقالی 77 | punjabi: پنجابی 78 | romanian: رومانیایی 79 | russian: روسی 80 | samoan: ساموآیی 81 | scots_gaelic: گیلیک اسکاتلندی 82 | serbian: صربی 83 | sesotho: سوتو 84 | shona: شونا 85 | sindhi: سندی 86 | sinhala: سینهالی 87 | slovak: اسلواکی 88 | slovenian: اسلوونیایی 89 | somali: سومالیایی 90 | spanish: اسپانیایی 91 | sundanese: سوندایی 92 | swahili: سواحِلی 93 | swedish: سوئدی 94 | tajik: تاجیکی 95 | tamil: تامیلی 96 | tatar: تاتاری 97 | telugu: تلوگو 98 | thai: تایلندی 99 | traditional_chinese: Traditional Chinese 100 | turkish: ترکی 101 | turkmen: ترکمن 102 | ukrainian: اوکراینی 103 | urdu: اردو 104 | uyghur: اویغوری 105 | uzbek: ازبکی 106 | vietnamese: ویتنامی 107 | welsh: ولزی 108 | xhosa: خوسایی 109 | yiddish: ییدیش 110 | yoruba: یوروبایی 111 | zulu: زولو 112 | main: 113 | about: درباره 114 | appearance: ظاهر 115 | audio_limit: نمی توان برای بیش از ۲۰۰ نویسه صدا دریافت کرد 116 | autodetect_not_supported: Autodetect not supported 117 | cancel: لغو 118 | contribute: مشارکت 119 | copied_to_clipboard: ذخیره در کلیپ‌بورد 120 | dark: تیره 121 | definitions: Definitions 122 | donate: Donate 123 | enter_text_here: متن را اینجا وارد کنید 124 | error: یک مشکل به وجود آمده 125 | follow_system: مطابق با تم دستگاه 126 | help: Help 127 | input_limit: ورودی ترجمه بالای ۵۰۰۰ نویسه است 128 | install: Install 129 | license: پروانه 130 | light: روشن 131 | no_internet: اتصال به اینترنت برقرار نیست 132 | ok: خُب 133 | report_bug: Report a bug 134 | settings: تنظیمات 135 | something_went_wrong: مشکلی پیش آمده 136 | text_recognition: Text Recognition 137 | text_to_speech: Text-To-Speech 138 | theme: تم 139 | translate: ترجمه 140 | translation: ترجمه 141 | translations: Translation 142 | version: نسخه 143 | website: Website 144 | -------------------------------------------------------------------------------- /lib/messages/messages_hu.i18n.yaml: -------------------------------------------------------------------------------- 1 | langs: 2 | afrikaans: Afrikai 3 | albanian: Albán 4 | amharic: Amhara 5 | arabic: Arab 6 | armenian: Örmény 7 | autodetect: Automatikus felismerés 8 | azerbaijani: Azerbajdzsán 9 | basque: Baszk 10 | belarusian: Fehérorosz 11 | bengali: Bengáli 12 | bosnian: Bosnyák 13 | bulgarian: Bolgár 14 | catalan: Katalán 15 | cebuano: Szebuano 16 | chichewa: Chichewa 17 | chinese: Kínai 18 | corsican: Korzikai 19 | croatian: Horvát 20 | czech: Cseh 21 | danish: Dán 22 | dutch: Holland 23 | english: Angol 24 | esperanto: Eszperantó 25 | estonian: Észt 26 | filipino: Fülöp-szigeteki 27 | finnish: Finn 28 | french: Francia 29 | frisian: Fríz 30 | galician: Galiciai 31 | georgian: Grúz 32 | german: Német 33 | greek: Görög 34 | gujarati: Gudzsaráti 35 | haitian_creole: Haiti kreol 36 | hausa: Hausza 37 | hawaiian: Hawaii 38 | hebrew: Héber 39 | hindi: Hindu 40 | hmong: Hmong 41 | hungarian: Magyar 42 | icelandic: Izlandi 43 | igbo: Igbó 44 | indonesian: Indonéz 45 | irish: Ír 46 | italian: Olasz 47 | japanese: Japán 48 | javanese: Jávai 49 | kannada: Kannada 50 | kazakh: Kazah 51 | khmer: Khmer 52 | kinyarwanda: Kinyarvanda 53 | korean: Koreai 54 | kurdish_kurmanji: Kurd (Kurmanji) 55 | kyrgyz: Kirgiz 56 | lao: Laoszi (lao) 57 | latin: Latin 58 | latvian: Lett 59 | lithuanian: Litván 60 | luxembourgish: Luxemburgi 61 | macedonian: Macedón 62 | malagasy: Malgas 63 | malay: Maláj 64 | malayalam: Malajálam 65 | maltese: Máltai 66 | maori: Maori 67 | marathi: Maráthi 68 | mongolian: Mongol 69 | myanmar_burmese: Mianmar (Burmai) 70 | nepali: Nepáli 71 | norwegian: Norvég 72 | odia_oriya: Odia (Oriya) 73 | pashto: Pastu 74 | persian: Perzsa 75 | polish: Lengyel 76 | portuguese: Portugál 77 | punjabi: Pandzsábi 78 | romanian: Román 79 | russian: Orosz 80 | samoan: Szamoai 81 | scots_gaelic: Skót gall 82 | serbian: Szerb 83 | sesotho: Sesothói 84 | shona: Sona 85 | sindhi: Szindhi 86 | sinhala: Szingaléz 87 | slovak: Szlovák 88 | slovenian: Szlovén 89 | somali: Szomáli 90 | spanish: Spanyol 91 | sundanese: Szundanéz 92 | swahili: Szuahéli 93 | swedish: Svéd 94 | tajik: Tádzsik 95 | tamil: Tamil 96 | tatar: Tatár 97 | telugu: Telugu 98 | thai: Thaiföldi 99 | traditional_chinese: Traditional Chinese 100 | turkish: Török 101 | turkmen: Türkmén 102 | ukrainian: Ukrán 103 | urdu: Urdu 104 | uyghur: Ujgur 105 | uzbek: Üzbég 106 | vietnamese: Vietnámi 107 | welsh: Walesi 108 | xhosa: Xhosza 109 | yiddish: Jiddis 110 | yoruba: Joruba 111 | zulu: Zulu 112 | main: 113 | about: Névjegy 114 | appearance: Kinézet 115 | audio_limit: 200 karakter felett nem tud hangot lejátszani 116 | autodetect_not_supported: Az automatikus felismerés nem támogatott 117 | cancel: Mégse 118 | contribute: Közreműködés 119 | copied_to_clipboard: Vágólapra másolva 120 | dark: Sötét 121 | definitions: Meghatározások 122 | donate: Támogatás 123 | enter_text_here: Írd be a szöveget 124 | error: Hiba történt 125 | follow_system: A rendszer témája 126 | help: Segítség 127 | input_limit: A fordítási bemenet több mint 5000 128 | install: Telepítés 129 | license: Licenc 130 | light: Világos 131 | no_internet: Nincs internetkapcsolat 132 | ok: OK 133 | report_bug: Hibajelentés 134 | settings: Beállíŧások 135 | something_went_wrong: Valami rosszul sült el 136 | text_recognition: Szövegfelismerés 137 | text_to_speech: Text-To-Speech 138 | theme: Téma 139 | translate: Fordítás 140 | translation: Fordítás 141 | translations: Fordítások 142 | version: Verzió 143 | website: Weboldal 144 | -------------------------------------------------------------------------------- /lib/messages/messages_ja.i18n.yaml: -------------------------------------------------------------------------------- 1 | langs: 2 | afrikaans: アフリカーンス語 3 | albanian: アルバニア語 4 | amharic: アムハラ語 5 | arabic: アラビア語 6 | armenian: アルメニア語 7 | autodetect: 自動検出 8 | azerbaijani: アゼルバイジャン語 9 | basque: バスク語 10 | belarusian: ベラルーシ語 11 | bengali: ベンガル語 12 | bosnian: ボスニア語 13 | bulgarian: ブルガリア語 14 | catalan: カタロニア語 15 | cebuano: セブアノ語 16 | chichewa: チェワ語 17 | chinese: 中国語 18 | corsican: コルシカ語 19 | croatian: クロアチア語 20 | czech: チェコ語 21 | danish: デンマーク語 22 | dutch: オランダ語 23 | english: 英語 24 | esperanto: エスペラント語 25 | estonian: エストニア語 26 | filipino: フィリピン語 27 | finnish: フィンランド語 28 | french: フランス語 29 | frisian: フリジア語 30 | galician: ガリシア語 31 | georgian: ジョージア (グルジア) 語 32 | german: ドイツ語 33 | greek: ギリシャ語 34 | gujarati: グジャラート語 35 | haitian_creole: ハイチ語 36 | hausa: ハウサ語 37 | hawaiian: ハワイ語 38 | hebrew: ヘブライ語 39 | hindi: ヒンディー語 40 | hmong: ミャオ語 41 | hungarian: ハンガリー語 42 | icelandic: アイスランド語 43 | igbo: イボ語 44 | indonesian: インドネシア語 45 | irish: アイルランド語 46 | italian: イタリア語 47 | japanese: 日本語 48 | javanese: ジャワ語 49 | kannada: カンナダ語 50 | kazakh: カザフ語 51 | khmer: クメール語 52 | kinyarwanda: ルワンダ語 53 | korean: 韓国語 54 | kurdish_kurmanji: クルド語 (クルマンジー) 55 | kyrgyz: キルギス語 56 | lao: ラーオ語 57 | latin: ラテン語 58 | latvian: ラトビア語 59 | lithuanian: リトアニア語 60 | luxembourgish: ルクセンブルク語 61 | macedonian: マケドニア語 62 | malagasy: マダガスカル語 63 | malay: マレー語 64 | malayalam: マラヤーラム語 65 | maltese: マルタ語 66 | maori: マオリ語 67 | marathi: マラーティー語 68 | mongolian: モンゴル語 69 | myanmar_burmese: ミャンマー語 (ビルマ語) 70 | nepali: ネパール語 71 | norwegian: ノルウェー語 72 | odia_oriya: オリヤー語 73 | pashto: パシュトー語 74 | persian: ペルシャ語 75 | polish: ポーランド語 76 | portuguese: ポルトガル語 77 | punjabi: パンジャーブ語 78 | romanian: ルーマニア語 79 | russian: ロシア語 80 | samoan: サモア語 81 | scots_gaelic: スコットランド・ゲール語 82 | serbian: セルビア語 83 | sesotho: ソト語 84 | shona: ショナ語 85 | sindhi: シンド語 86 | sinhala: シンハラ語 87 | slovak: スロバキア語 88 | slovenian: スロベニア語 89 | somali: ソマリ語 90 | spanish: スペイン語 91 | sundanese: スンダ語 92 | swahili: スワヒリ語 93 | swedish: スウェーデン語 94 | tajik: タジク語 95 | tamil: タミル語 96 | tatar: タタール 97 | telugu: テルグ語 98 | thai: タイ語 99 | traditional_chinese: Traditional Chinese 100 | turkish: トルコ語 101 | turkmen: トルクメン語 102 | ukrainian: ウクライナ語 103 | urdu: ウルドゥー語 104 | uyghur: ウイグル語 105 | uzbek: ウズベク語 106 | vietnamese: ベトナム語 107 | welsh: ウェールズ語 108 | xhosa: コサ語 109 | yiddish: イディッシュ語 110 | yoruba: ヨルバ語 111 | zulu: ズールー語 112 | main: 113 | about: このアプリについて 114 | appearance: 外観 115 | audio_limit: 200 文字以上の文章は音声を取得できません 116 | autodetect_not_supported: 言語の自動検出はサポートされていません 117 | cancel: キャンセル 118 | contribute: 貢献する 119 | copied_to_clipboard: クリップボードにコピー 120 | dark: ダーク 121 | definitions: 定義 122 | donate: 寄付する 123 | enter_text_here: ここにテキストを入力してください 124 | error: エラーが発生しました 125 | follow_system: システムに従う 126 | help: ヘルプ 127 | input_limit: 文字数制限は 5000 文字です 128 | install: インストール 129 | license: ライセンス 130 | light: ライト 131 | no_internet: インターネット接続がありません 132 | ok: OK 133 | report_bug: バグを報告 134 | settings: 設定 135 | something_went_wrong: 何らかの問題が発生しました 136 | text_recognition: 文字認識 137 | text_to_speech: テキスト読み上げ 138 | theme: テーマ 139 | translate: 翻訳 140 | translation: 翻訳 141 | translations: 翻訳 142 | version: バージョン 143 | website: Web サイト 144 | -------------------------------------------------------------------------------- /lib/messages/messages_ko.i18n.yaml: -------------------------------------------------------------------------------- 1 | langs: 2 | afrikaans: 아프리카어 3 | albanian: 알바니아어 4 | amharic: 암하라어 5 | arabic: 아라비아어 6 | armenian: 아르메니아어 7 | autodetect: 자동 감지 8 | azerbaijani: 아제르바이잔어 9 | basque: 바스크어 10 | belarusian: 벨라루스어 11 | bengali: 벵갈어 12 | bosnian: 보스니아어 13 | bulgarian: 불가리아어 14 | catalan: 카탈로니아어 15 | cebuano: 세부아노 16 | chichewa: 치체와어 17 | chinese: 중국어 18 | corsican: 코르시카어 19 | croatian: 크로아티아어 20 | czech: 체코어 21 | danish: 덴마크어 22 | dutch: 네덜란드어 23 | english: 영어 24 | esperanto: 에스페란토어 25 | estonian: 에스토니아어 26 | filipino: 필리핀어 27 | finnish: 핀란드어 28 | french: 프랑스어 29 | frisian: 프리슬란드어 30 | galician: 갈리시아어 31 | georgian: 그루지야어(조지어) 32 | german: 독일어 33 | greek: 그리스어 34 | gujarati: 구자라트어 35 | haitian_creole: 아이티어 36 | hausa: 하우사어 37 | hawaiian: 하와이어 38 | hebrew: 히브리어 39 | hindi: 힌디어 40 | hmong: 몽족어 41 | hungarian: 헝가리어 42 | icelandic: 아이슬란드어 43 | igbo: 이그보어 44 | indonesian: 인도네시아어 45 | irish: 아일랜드어 46 | italian: 이탈리아어 47 | japanese: 일본어 48 | javanese: 자바어 49 | kannada: 칸나다어 50 | kazakh: 카자흐어 51 | khmer: 크메르어 52 | kinyarwanda: 키냐르완다어 53 | korean: 한국어 54 | kurdish_kurmanji: 쿠르드어 (쿠르만지) 55 | kyrgyz: 키르기스어 56 | lao: 라오어 57 | latin: 라틴어 58 | latvian: 라트비아어 59 | lithuanian: 리투아니아어 60 | luxembourgish: 룩셈부르크어 61 | macedonian: 마케도니아어 62 | malagasy: 마다가스카르어 63 | malay: 말레이시아어 64 | malayalam: 말라얄람어 65 | maltese: 몰타어 66 | maori: 마오리어 67 | marathi: 마라티어 68 | mongolian: 몽골어 69 | myanmar_burmese: 미얀마어 (버마어) 70 | nepali: 네팔어 71 | norwegian: 노르웨이어 72 | odia_oriya: 오디아 (오리야) 73 | pashto: 파슈토어 74 | persian: 페르시아어 75 | polish: 폴란드어 76 | portuguese: 포르투갈어 77 | punjabi: 펀자브어 78 | romanian: 로마어 79 | russian: 러시아어 80 | samoan: 사모아어 81 | scots_gaelic: 스코틀랜드 게일어 82 | serbian: 세르비아어 83 | sesotho: 세소토어 84 | shona: 쇼나어 85 | sindhi: 신드어 86 | sinhala: 신할라어 87 | slovak: 슬로바키아어 88 | slovenian: 슬로베니아어 89 | somali: 소말리어 90 | spanish: 스페인어 91 | sundanese: 순다어 92 | swahili: 스와힐리어 93 | swedish: 스웨덴어 94 | tajik: 타지크어 95 | tamil: 타밀어 96 | tatar: 타타르어 97 | telugu: 텔루구어 98 | thai: 태국어 99 | traditional_chinese: Traditional Chinese 100 | turkish: 터키어 101 | turkmen: 투르크멘어 102 | ukrainian: 우크라니아어 103 | urdu: 우르드어 104 | uyghur: 위구르어 105 | uzbek: 우즈베크어 106 | vietnamese: 베트남어 107 | welsh: 웨일스어 108 | xhosa: 코사어 109 | yiddish: 이디시어 110 | yoruba: 요루바어 111 | zulu: 줄루어 112 | main: 113 | about: 소개 114 | appearance: 모양 115 | audio_limit: 200자를 초과하는 오디오를 가져올 수 없습니다 116 | autodetect_not_supported: 자동 감지가 지원되지 않습니다 117 | cancel: 취소 118 | contribute: 기여하기 119 | copied_to_clipboard: 클립보드에 복사되었습니다 120 | dark: 밤 121 | definitions: 정의 122 | donate: 기부하기 123 | enter_text_here: 글자를 입력해주세요 124 | error: 오류가 발생했습니다 125 | follow_system: 시스템 따르기 126 | help: 지원 127 | input_limit: 번역 대상이 5000글자 초과입니다 128 | install: 설치하기 129 | license: 라이센스 130 | light: 낮 131 | no_internet: 인터넷 엿결 없음 132 | ok: OK 133 | report_bug: 버그 제보하기 134 | settings: 설정 135 | something_went_wrong: 무언가 잘못되었습니다 136 | text_recognition: 글자 인식 137 | text_to_speech: 글자 읽어주기 138 | theme: 테마 139 | translate: 번역하기 140 | translation: 번역 141 | translations: 번역 142 | version: 버전 143 | website: 웹사이트 144 | -------------------------------------------------------------------------------- /lib/messages/messages_zh_HK.i18n.yaml: -------------------------------------------------------------------------------- 1 | langs: 2 | afrikaans: 南非荷蘭語 3 | albanian: 阿爾巴尼亞語 4 | amharic: 阿姆哈拉語 5 | arabic: 阿拉伯語 6 | armenian: 亞美尼亞語 7 | autodetect: 自動檢測 8 | azerbaijani: 阿塞拜疆語 9 | basque: 巴斯克語 10 | belarusian: 白俄羅斯語 11 | bengali: 孟加拉語 12 | bosnian: 波斯尼亞語 13 | bulgarian: 保加利亞語 14 | catalan: 加泰羅尼亞語 15 | cebuano: 宿務語 16 | chichewa: 奇切瓦語 17 | chinese: 正體中文 18 | corsican: 科西嘉語 19 | croatian: 克羅地亞語 20 | czech: 捷克語 21 | danish: 丹麥語 22 | dutch: 荷蘭語 23 | english: 英語 24 | esperanto: 世界語 25 | estonian: 愛沙尼亞語 26 | filipino: 菲律賓語 27 | finnish: 芬蘭語 28 | french: 法語 29 | frisian: 弗里斯蘭語 30 | galician: 加利西亞語 31 | georgian: 格魯吉亞語 32 | german: 德語 33 | greek: 希臘語 34 | gujarati: 古吉拉特語 35 | haitian_creole: 海地克里奧爾語 36 | hausa: 豪薩語 37 | hawaiian: 夏威夷語 38 | hebrew: 希伯來語 39 | hindi: 印度語 40 | hmong: 苗語 41 | hungarian: 匈牙利語 42 | icelandic: 冰島語 43 | igbo: 伊博語 44 | indonesian: 印尼語 45 | irish: 愛爾蘭語 46 | italian: 意大利語 47 | japanese: 日語 48 | javanese: 爪哇語 49 | kannada: 卡納達語 50 | kazakh: 哈薩克語 51 | khmer: 高棉語 52 | kinyarwanda: 盧旺達語 53 | korean: 韓語 54 | kurdish_kurmanji: 庫爾德語 55 | kyrgyz: 吉爾吉斯語 56 | lao: 老撾語 57 | latin: 拉丁語 58 | latvian: 拉脫維亞語 59 | lithuanian: 立陶宛語 60 | luxembourgish: 盧森堡語 61 | macedonian: 馬其頓語 62 | malagasy: 馬達加斯加語 63 | malay: 馬來西亞語 64 | malayalam: 馬來亞拉姆語 65 | maltese: 馬爾他語 66 | maori: 毛利語 67 | marathi: 馬拉地語 68 | mongolian: 蒙古語 69 | myanmar_burmese: 緬甸語 70 | nepali: 尼泊爾語 71 | norwegian: 挪威語 72 | odia_oriya: 奧里亞語 73 | pashto: 普什圖語 74 | persian: 波斯語 75 | polish: 波蘭語 76 | portuguese: 葡萄牙語 77 | punjabi: 旁遮普語 78 | romanian: 羅馬尼亞語 79 | russian: 俄語 80 | samoan: 薩摩亞語 81 | scots_gaelic: 蘇格蘭蓋爾語 82 | serbian: 塞爾維亞語 83 | sesotho: 塞索托語 84 | shona: 紹納語 85 | sindhi: 信德語 86 | sinhala: 僧伽羅語 87 | slovak: 斯洛伐克語 88 | slovenian: 斯洛文尼亞語 89 | somali: 索馬里語 90 | spanish: 西班牙語 91 | sundanese: 巽他語 92 | swahili: 斯瓦希里語 93 | swedish: 瑞典語 94 | tajik: 塔吉克語 95 | tamil: 泰米爾語 96 | tatar: 韃靼語 97 | telugu: 泰盧固語 98 | thai: 泰語 99 | traditional_chinese: Traditional Chinese 100 | turkish: 土耳其語 101 | turkmen: 土庫曼語 102 | ukrainian: 烏克蘭語 103 | urdu: 烏爾都語 104 | uyghur: 維吾爾語 105 | uzbek: 烏茲別克語 106 | vietnamese: 越南語 107 | welsh: 威爾士語 108 | xhosa: 科薩語 109 | yiddish: 意第緒語 110 | yoruba: 約魯巴語 111 | zulu: 祖魯語 112 | main: 113 | about: 關於 114 | appearance: 外觀 115 | audio_limit: 無法獲取超過 200 個字符的音頻 116 | autodetect_not_supported: Autodetect not supported 117 | cancel: 取消 118 | contribute: 投稿 119 | copied_to_clipboard: 已複製到剪貼板 120 | dark: 暗 121 | definitions: Definitions 122 | donate: Donate 123 | enter_text_here: 在此處輸入文本 124 | error: 出現錯誤 125 | follow_system: 跟隨系統 126 | help: Help 127 | input_limit: 翻譯輸入超過5000個字符 128 | install: Install 129 | license: 執照 130 | light: 光 131 | no_internet: 沒有網絡連接 132 | ok: OK 133 | report_bug: Report a bug 134 | settings: 設置 135 | something_went_wrong: 出了點問題 136 | text_recognition: Text Recognition 137 | text_to_speech: Text-To-Speech 138 | theme: 主題 139 | translate: 翻譯 140 | translation: 翻譯 141 | translations: Translation 142 | version: 版本 143 | website: Website 144 | -------------------------------------------------------------------------------- /lib/screens/about/about_screen_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:simplytranslate_mobile/data.dart'; 3 | 4 | class AboutButton extends StatelessWidget { 5 | final IconData icon; 6 | final Color iconColor; 7 | final String title; 8 | final String? content; 9 | final void Function() onTap; 10 | 11 | const AboutButton({ 12 | required this.icon, 13 | required this.title, 14 | this.content, 15 | required this.onTap, 16 | required this.iconColor, 17 | Key? key, 18 | }) : super(key: key); 19 | 20 | @override 21 | Widget build(BuildContext context) { 22 | return InkWell( 23 | child: Padding( 24 | padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 20), 25 | child: Row( 26 | children: [ 27 | Icon(icon, color: iconColor, size: 45), 28 | const SizedBox(width: 10), 29 | Expanded( 30 | child: Container( 31 | width: MediaQuery.of(context).size.width - 95, 32 | child: Column( 33 | mainAxisAlignment: MainAxisAlignment.spaceAround, 34 | crossAxisAlignment: CrossAxisAlignment.start, 35 | children: [ 36 | Text(title, style: const TextStyle(fontSize: 18)), 37 | if (content != null) 38 | Text( 39 | content!, 40 | style: TextStyle( 41 | fontSize: 18, 42 | color: theme == Brightness.dark ? Colors.white54 : Colors.black54, 43 | ), 44 | ), 45 | ], 46 | ), 47 | ), 48 | ), 49 | ], 50 | ), 51 | ), 52 | onTap: onTap, 53 | ); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /lib/screens/settings/widgets/settings_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import '/data.dart'; 3 | 4 | class SettingsButton extends StatelessWidget { 5 | final void Function() onTap; 6 | final IconData icon; 7 | final Color iconColor; 8 | final String title; 9 | final String? content; 10 | final bool loading; 11 | 12 | const SettingsButton({ 13 | required this.onTap, 14 | required this.icon, 15 | required this.iconColor, 16 | required this.title, 17 | this.content, 18 | this.loading = false, 19 | Key? key, 20 | }) : super(key: key); 21 | 22 | @override 23 | Widget build(BuildContext context) { 24 | return InkWell( 25 | child: Padding( 26 | padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 20), 27 | child: Column( 28 | children: [ 29 | Row( 30 | crossAxisAlignment: CrossAxisAlignment.center, 31 | children: [ 32 | Container( 33 | child: loading 34 | ? Container( 35 | height: 45, 36 | width: 45, 37 | padding: const EdgeInsets.all(5), 38 | child: const CircularProgressIndicator(), 39 | ) 40 | : Icon(icon, color: iconColor, size: 45), 41 | ), 42 | SizedBox(width: 10), 43 | Expanded( 44 | child: Container( 45 | width: MediaQuery.of(context).size.width - 95, 46 | child: Column( 47 | mainAxisAlignment: MainAxisAlignment.spaceAround, 48 | crossAxisAlignment: CrossAxisAlignment.start, 49 | children: [ 50 | Text(title, style: TextStyle(fontSize: 18)), 51 | if (content != null) 52 | Text( 53 | content!, 54 | style: TextStyle( 55 | fontSize: 18, 56 | color: theme == Brightness.dark ? Colors.white54 : Colors.black54, 57 | ), 58 | ), 59 | ], 60 | ), 61 | ), 62 | ), 63 | ], 64 | ), 65 | ], 66 | ), 67 | ), 68 | onTap: onTap, 69 | ); 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /lib/screens/translate/translate.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:simplytranslate_mobile/screens/translate/widgets/lang_selector/lang.dart'; 3 | import 'package:simplytranslate_mobile/screens/translate/widgets/output/definitions.dart'; 4 | import 'package:simplytranslate_mobile/screens/translate/widgets/output/pronounciation.dart'; 5 | import 'package:simplytranslate_mobile/screens/translate/widgets/output/translations.dart'; 6 | import '/data.dart'; 7 | import 'widgets/input/input.dart'; 8 | import 'widgets/output/output.dart'; 9 | import 'widgets/lang_selector/switch_lang.dart'; 10 | 11 | var _scrollController = ScrollController(); 12 | 13 | class GoogleTranslate extends StatefulWidget { 14 | const GoogleTranslate({Key? key}) : super(key: key); 15 | 16 | @override 17 | State createState() => _GoogleTranslateState(); 18 | } 19 | 20 | var _isBefore = false; 21 | 22 | class _GoogleTranslateState extends State { 23 | @override 24 | void didChangeDependencies() { 25 | super.didChangeDependencies(); 26 | 27 | if (MediaQuery.of(context).orientation == Orientation.landscape) 28 | _isBefore = true; 29 | else if (MediaQuery.of(context).orientation == Orientation.portrait && _isBefore) { 30 | _scrollController.jumpTo(0); 31 | _isBefore = false; 32 | } 33 | } 34 | 35 | @override 36 | Widget build(BuildContext context) { 37 | const space = SizedBox(height: 10); 38 | return Stack( 39 | children: [ 40 | SingleChildScrollView( 41 | controller: _scrollController, 42 | child: Container( 43 | padding: const EdgeInsets.all(10), 44 | child: Center( 45 | child: Column( 46 | mainAxisAlignment: MainAxisAlignment.center, 47 | children: [ 48 | Row( 49 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 50 | children: [ 51 | GoogleLang(FromTo.from), 52 | GoogleSwitchLang(), 53 | GoogleLang(FromTo.to), 54 | ], 55 | ), 56 | space, 57 | GoogleTranslationInput(), 58 | space, 59 | GoogleTranslationOutput(), 60 | space, 61 | if (loading) 62 | Container( 63 | width: MediaQuery.of(context).size.width - 20, 64 | child: LinearProgressIndicator(), 65 | ), 66 | Pronunciation(googleOutput), 67 | Definitions(googleOutput), 68 | Translations(googleOutput), 69 | ], 70 | ), 71 | ), 72 | ), 73 | ) 74 | ], 75 | ); 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /lib/screens/translate/widgets/input/character_limit.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import '/data.dart'; 3 | 4 | class CharacterLimit extends StatelessWidget { 5 | const CharacterLimit({Key? key}) : super(key: key); 6 | 7 | @override 8 | Widget build(BuildContext context) { 9 | final textLength = googleInCtrl.text.length; 10 | final color = textLength > 5000 11 | ? Colors.red 12 | : theme == Brightness.dark 13 | ? Colors.white 14 | : greenColor; 15 | return Container( 16 | alignment: Alignment.center, 17 | padding: const EdgeInsets.symmetric(horizontal: 4, vertical: 5), 18 | child: Column( 19 | mainAxisSize: MainAxisSize.min, 20 | children: [ 21 | Text( 22 | textLength > 99999 ? '∞' : textLength.toString(), 23 | style: TextStyle(color: color), 24 | ), 25 | Container( 26 | margin: const EdgeInsets.symmetric(vertical: 3), 27 | height: 1, 28 | width: 30, 29 | color: color, 30 | ), 31 | Text( 32 | '5000', 33 | style: TextStyle(color: color), 34 | ), 35 | ], 36 | ), 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/screens/translate/widgets/input/delete_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import '/data.dart'; 3 | 4 | class DeleteTranslationInputButton extends StatelessWidget { 5 | const DeleteTranslationInputButton({Key? key}) : super(key: key); 6 | 7 | @override 8 | Widget build(BuildContext context) { 9 | return Container( 10 | alignment: Alignment.topRight, 11 | child: IconButton( 12 | splashColor: Colors.transparent, 13 | highlightColor: Colors.transparent, 14 | onPressed: googleInCtrl.text == '' 15 | ? null 16 | : () { 17 | setStateOverlord(() { 18 | loading = false; 19 | isTranslationCanceled = true; 20 | ttsInputloading = false; 21 | isTtsInCanceled = true; 22 | ttsOutloading = false; 23 | isTtsOutputCanceled = true; 24 | googleInCtrl.text = ''; 25 | googleOutput = {}; 26 | }); 27 | FocusScope.of(context).unfocus(); 28 | }, 29 | icon: Icon(Icons.close), 30 | ), 31 | ); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /lib/screens/translate/widgets/input/tts_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:audioplayers/audioplayers.dart'; 2 | import 'package:flutter/material.dart'; 3 | import '/data.dart'; 4 | import '/simplytranslate.dart' as simplytranslate; 5 | 6 | bool _listening = false; 7 | bool _isSnackBarPressed = false; 8 | 9 | AudioPlayer _audioPlayer = AudioPlayer(); 10 | 11 | class TtsInput extends StatefulWidget { 12 | const TtsInput({Key? key}) : super(key: key); 13 | 14 | @override 15 | State createState() => _TtsOutputState(); 16 | } 17 | 18 | class _TtsOutputState extends State { 19 | @override 20 | Widget build(BuildContext context) { 21 | final _input = googleInCtrl.text; 22 | stopPlayer() async { 23 | await _audioPlayer.stop(); 24 | setState(() => _listening = false); 25 | } 26 | 27 | audioLimit() { 28 | if (!_isSnackBarPressed) { 29 | ScaffoldMessenger.of(context).showSnackBar( 30 | SnackBar( 31 | duration: Duration(seconds: 2), 32 | width: 300, 33 | content: Text(i18n().main.audio_limit, textAlign: TextAlign.center), 34 | ), 35 | ); 36 | _isSnackBarPressed = true; 37 | Future.delayed(const Duration(seconds: 1)).then((_) => _isSnackBarPressed = false); 38 | } 39 | } 40 | 41 | startPlayer() async { 42 | isTtsInCanceled = false; 43 | setState(() => ttsInputloading = true); 44 | await _audioPlayer.setSourceBytes(await simplytranslate.tts(_input, fromLangVal)); 45 | if (isTtsInCanceled) return; 46 | setState(() { 47 | _listening = true; 48 | ttsInputloading = false; 49 | }); 50 | await _audioPlayer.resume(); 51 | _audioPlayer.onPlayerComplete.listen((event) { 52 | setState(() => _listening = false); 53 | }); 54 | } 55 | 56 | return ttsInputloading 57 | ? InkWell( 58 | onTap: () { 59 | setState(() { 60 | ttsInputloading = false; 61 | isTtsInCanceled = true; 62 | }); 63 | }, 64 | child: Container( 65 | height: 48, 66 | width: 48, 67 | alignment: Alignment.center, 68 | child: Container( 69 | alignment: Alignment.center, 70 | height: 24, 71 | width: 24, 72 | child: const CircularProgressIndicator(strokeWidth: 3), 73 | ), 74 | ), 75 | ) 76 | : IconButton( 77 | splashColor: Colors.transparent, 78 | highlightColor: Colors.transparent, 79 | onPressed: () { 80 | if (_input == '') { 81 | if (_listening) 82 | return stopPlayer; 83 | else 84 | return null; 85 | } else if (!_listening) { 86 | if (_input.length > 200) 87 | return audioLimit; 88 | else 89 | return startPlayer; 90 | } else 91 | return stopPlayer; 92 | }(), 93 | icon: Icon( 94 | _listening ? Icons.stop : Icons.volume_up, 95 | color: googleInCtrl.text.length > 200 && !_listening ? Colors.grey : null, 96 | ), 97 | ); 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /lib/screens/translate/widgets/lang_selector/switch_lang.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import '/data.dart'; 3 | import '/simplytranslate.dart' as simplytranslate; 4 | 5 | class GoogleSwitchLang extends StatelessWidget { 6 | const GoogleSwitchLang({Key? key}) : super(key: key); 7 | @override 8 | Widget build(BuildContext context) => Container( 9 | width: MediaQuery.of(context).size.width / 3 - 60, 10 | child: OutlinedButton( 11 | style: OutlinedButton.styleFrom( 12 | padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 5), 13 | ), 14 | onPressed: fromLangVal == 'auto' 15 | ? null 16 | : () async { 17 | setStateOverlord(() { 18 | isTtsInCanceled = true; 19 | ttsOutloading = false; 20 | isTtsOutputCanceled = true; 21 | ttsInputloading = false; 22 | }); 23 | if (googleInCtrl.text.isEmpty) { 24 | switchVals(); 25 | setStateOverlord(() {}); 26 | } else if (googleInCtrl.text.length <= 5000) { 27 | FocusScope.of(context).unfocus(); 28 | try { 29 | final transInTmp = googleInCtrl.text; 30 | final fromLangValTransTmp = fromLangVal; 31 | final toLangValTransTmp = toLangVal; 32 | switchVals(); 33 | final translatedText = await simplytranslate.translate(transInTmp, fromLangValTransTmp, toLangValTransTmp); 34 | if (!isTranslationCanceled) { 35 | final translatedText2; 36 | if (translatedText.length <= 5000) { 37 | translatedText2 = await simplytranslate.translate(translatedText['text'], fromLangVal, toLangVal); 38 | } else { 39 | ScaffoldMessenger.of(context).showSnackBar( 40 | SnackBar( 41 | duration: Duration(seconds: 2), 42 | width: 160, 43 | content: Text( 44 | i18n().main.input_limit, 45 | textAlign: TextAlign.center, 46 | ), 47 | ), 48 | ); 49 | translatedText2 = ''; 50 | } 51 | setStateOverlord(() { 52 | googleInCtrl.text = translatedText['text']; 53 | googleOutput = translatedText2; 54 | }); 55 | } 56 | } catch (error) { 57 | setStateOverlord(() => loading = false); 58 | print('translate error: $error'); 59 | } 60 | } else { 61 | switchVals(); 62 | setStateOverlord(() {}); 63 | } 64 | }, 65 | child: Text( 66 | '<-->', 67 | style: TextStyle( 68 | fontSize: 18, 69 | color: fromLangVal != 'auto' 70 | ? theme == Brightness.dark 71 | ? Colors.white 72 | : Colors.black 73 | : lightThemeGreyColor, 74 | ), 75 | ), 76 | ), 77 | ); 78 | } 79 | -------------------------------------------------------------------------------- /lib/screens/translate/widgets/output/copy_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter/services.dart'; 3 | import '/data.dart'; 4 | 5 | class CopyToClipboardButton extends StatelessWidget { 6 | final String text; 7 | const CopyToClipboardButton(this.text, {Key? key}) : super(key: key); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return IconButton( 12 | splashColor: Colors.transparent, 13 | highlightColor: Colors.transparent, 14 | onPressed: text == '' 15 | ? null 16 | : () => Clipboard.setData(ClipboardData(text: text)).then( 17 | (value) => ScaffoldMessenger.of(context).showSnackBar( 18 | SnackBar( 19 | duration: Duration(seconds: 2), 20 | width: 160, 21 | content: Text( 22 | i18n().main.copied_to_clipboard, 23 | textAlign: TextAlign.center, 24 | ), 25 | ), 26 | ), 27 | ), 28 | icon: Icon(Icons.copy), 29 | ); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /lib/screens/translate/widgets/output/output.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:intl/intl.dart' as intl; 3 | import '/data.dart'; 4 | import 'copy_button.dart'; 5 | import 'tts_button.dart'; 6 | 7 | class GoogleTranslationOutput extends StatefulWidget { 8 | const GoogleTranslationOutput({Key? key}) : super(key: key); 9 | 10 | @override 11 | _TranslationOutputState createState() => _TranslationOutputState(); 12 | } 13 | 14 | class _TranslationOutputState extends State { 15 | double _outputFontSize = 20; 16 | 17 | @override 18 | Widget build(BuildContext context) { 19 | Map translatedText = googleOutput; 20 | return Container( 21 | decoration: BoxDecoration( 22 | color: theme == Brightness.dark ? Color(0xff131618) : null, 23 | border: Border.all( 24 | color: theme == Brightness.dark ? Color(0xff495057) : Color(0xffa9a9a9), 25 | width: 1.5, 26 | style: BorderStyle.solid, 27 | ), 28 | borderRadius: BorderRadius.circular(2), 29 | ), 30 | child: Row( 31 | crossAxisAlignment: CrossAxisAlignment.start, 32 | children: [ 33 | Expanded( 34 | child: Padding( 35 | padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 10), 36 | child: Scrollbar( 37 | child: Directionality( 38 | textDirection: translatedText.containsKey('text') 39 | ? intl.Bidi.detectRtlDirectionality(translatedText['text']) 40 | ? TextDirection.rtl 41 | : TextDirection.ltr 42 | : TextDirection.rtl, 43 | child: SelectableText( 44 | translatedText.containsKey('text') ? translatedText['text'] : '', 45 | style: TextStyle(fontSize: _outputFontSize), 46 | minLines: 7, 47 | ), 48 | ), 49 | ), 50 | ), 51 | ), 52 | Column( 53 | children: [ 54 | CopyToClipboardButton(translatedText['text'] ?? ''), 55 | TtsOutput(), 56 | ], 57 | ), 58 | ], 59 | ), 60 | ); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /lib/screens/translate/widgets/output/pronounciation.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import '/data.dart'; 3 | 4 | class Pronunciation extends StatelessWidget { 5 | final Map translatedText; 6 | 7 | const Pronunciation( 8 | this.translatedText, { 9 | Key? key, 10 | }) : super(key: key); 11 | 12 | @override 13 | Widget build(BuildContext context) { 14 | return Container( 15 | width: double.infinity, 16 | child: Column( 17 | crossAxisAlignment: CrossAxisAlignment.start, 18 | children: [ 19 | if (translatedText.containsKey('pronunciation') && translatedText['pronunciation'].isNotEmpty) ...[ 20 | Text( 21 | translatedText['pronunciation'], 22 | style: TextStyle( 23 | fontSize: 18, 24 | color: theme == Brightness.dark ? Colors.white54 : Colors.black54, 25 | ), 26 | ), 27 | ] 28 | ], 29 | ), 30 | ); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/screens/translate/widgets/output/tts_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:audioplayers/audioplayers.dart'; 2 | import 'package:flutter/material.dart'; 3 | import '/data.dart'; 4 | import '/simplytranslate.dart' as simplytranslate; 5 | 6 | bool _listening = false; 7 | bool _isSnackBarPressed = false; 8 | 9 | AudioPlayer _audioPlayer = AudioPlayer(); 10 | 11 | class TtsOutput extends StatefulWidget { 12 | const TtsOutput({ 13 | Key? key, 14 | }) : super(key: key); 15 | 16 | @override 17 | State createState() => _TtsOutputState(); 18 | } 19 | 20 | class _TtsOutputState extends State { 21 | @override 22 | Widget build(BuildContext context) { 23 | final _input = googleOutput['text'] ?? ''; 24 | stopPlayer() async { 25 | await _audioPlayer.stop(); 26 | setState(() => _listening = false); 27 | } 28 | 29 | audioLimit() { 30 | if (!_isSnackBarPressed) { 31 | ScaffoldMessenger.of(context).showSnackBar( 32 | SnackBar( 33 | duration: Duration(seconds: 2), 34 | width: 300, 35 | content: Text( 36 | i18n().main.audio_limit, 37 | textAlign: TextAlign.center, 38 | ), 39 | ), 40 | ); 41 | _isSnackBarPressed = true; 42 | Future.delayed(Duration(seconds: 1)).then((_) => _isSnackBarPressed = false); 43 | } 44 | } 45 | 46 | startPlayer() async { 47 | isTtsInCanceled = false; 48 | setState(() => ttsInputloading = true); 49 | await _audioPlayer.setSourceBytes(await simplytranslate.tts(_input, toLangVal)); 50 | if (isTtsInCanceled) return; 51 | setState(() { 52 | _listening = true; 53 | ttsInputloading = false; 54 | }); 55 | await _audioPlayer.resume(); 56 | _audioPlayer.onPlayerComplete.listen((event) { 57 | setState(() => _listening = false); 58 | }); 59 | } 60 | 61 | return ttsOutloading 62 | ? InkWell( 63 | onTap: () { 64 | setState(() { 65 | ttsOutloading = false; 66 | isTtsOutputCanceled = true; 67 | }); 68 | }, 69 | child: Container( 70 | height: 48, 71 | width: 48, 72 | alignment: Alignment.center, 73 | child: Container( 74 | alignment: Alignment.center, 75 | height: 24, 76 | width: 24, 77 | child: const CircularProgressIndicator(strokeWidth: 3), 78 | ), 79 | ), 80 | ) 81 | : IconButton( 82 | splashColor: Colors.transparent, 83 | highlightColor: Colors.transparent, 84 | onPressed: () { 85 | if (_input == '') { 86 | if (_listening) 87 | return stopPlayer; 88 | else 89 | return null; 90 | } else if (!_listening) { 91 | if (_input.length > 200) 92 | return audioLimit; 93 | else 94 | return startPlayer; 95 | } else 96 | return stopPlayer; 97 | }(), 98 | icon: Icon( 99 | _listening ? Icons.stop : Icons.volume_up, 100 | color: googleOutput.length > 200 && !_listening ? Colors.grey : null, 101 | ), 102 | ); 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: simplytranslate_mobile 2 | description: An alternative frontend to Google Translate 3 | 4 | publish_to: 'none' 5 | version: 1.4.4+1 6 | 7 | environment: 8 | sdk: '>=3.0.1 <4.0.0' 9 | 10 | dependencies: 11 | flutter: 12 | sdk: flutter 13 | http: ^1.1.0 14 | get_storage: ^2.0.3 15 | audioplayers: ^5.0.0 16 | package_info_plus: ^4.0.1 17 | url_launcher: ^6.0.12 18 | intl: ^0.18.0 19 | path_provider: ^2.0.8 20 | permission_handler: ^10.2.0 21 | html: ^0.15.3 22 | i18n: ^4.0.6 23 | 24 | flutter: 25 | uses-material-design: true 26 | assets: 27 | - assets/ 28 | - assets/ca/ 29 | - assets/settings/ 30 | 31 | dev_dependencies: 32 | build_runner: any 33 | flutter_test: 34 | sdk: flutter -------------------------------------------------------------------------------- /scripts/arb_compile.sh: -------------------------------------------------------------------------------- 1 | python3 scripts/python/arb_merger.py -------------------------------------------------------------------------------- /scripts/python/arb_merger.py: -------------------------------------------------------------------------------- 1 | # This script merges the arb files in `lib/l10n/langs/` and `lib/l10n/main/` to single files in `lib/l10n/` 2 | import os 3 | import json 4 | import re 5 | import yaml 6 | 7 | langsDirList = os.listdir("lib/messages/") 8 | for item in langsDirList: 9 | mainData = None 10 | with open(f"lib/messages/{item}") as file: 11 | mainData = yaml.safe_load(file) 12 | 13 | if item != "messages.i18n.yaml": 14 | with open("lib/messages/messages.i18n.yaml") as file: 15 | engData = yaml.safe_load(file) 16 | mainData['main'] = {k: v for k, v in mainData['main'].items() if k in engData['main']} 17 | mainData['langs'] = {k: v for k, v in mainData['langs'].items() if k in engData['langs']} 18 | 19 | for k, v in engData['main'].items(): 20 | if k not in mainData['main'] or mainData['main'][k] == "": 21 | mainData['main'][k] = v 22 | 23 | for k, v in engData['langs'].items(): 24 | if k not in mainData['langs'] or mainData['langs'][k] == "": 25 | mainData['langs'][k] = v 26 | 27 | with open(f'lib/messages/{item}', 'w') as file: 28 | yaml.dump(mainData, file, allow_unicode=True) 29 | print("Wrote: lib/messages/"+item) 30 | -------------------------------------------------------------------------------- /scripts/website_compile.sh: -------------------------------------------------------------------------------- 1 | generate_pug() { 2 | lang=$1 3 | dir=$2 4 | 5 | jq -s '.[0] * {"dir": "'"${dir}"'"}' docs/strings/"${lang}".json > docs/strings/"${lang}".tmp.json 6 | 7 | pug docs/pug/*.pug -O docs/strings/"${lang}".tmp.json -o docs/"${lang}" -P 8 | 9 | if [ $lang == en ]; then 10 | pug docs/pug/*.pug -O docs/strings/"${lang}".tmp.json -o docs/ -P 11 | fi 12 | 13 | rm docs/strings/"${lang}".tmp.json 14 | } 15 | 16 | generate_pug 'en' 'ltr' 17 | # generate_pug 'ar' 'rtl' 18 | # generate_pug 'fr' 'ltr' 19 | # generate_pug 'nb_NO' 'ltr' 20 | # generate_pug 'pl' 'ltr' 21 | # generate_pug 'tr' 'ltr' 22 | 23 | sudo rm -rf /var/www/simplytranslate_mobile/simplytranslate_mobile/* 24 | sudo cp -r docs/* /var/www/simplytranslate_mobile/simplytranslate_mobile/ --------------------------------------------------------------------------------