Skip to content
language-transferPublic

About

React Native application for Language Transfer

Topics

Resources

Stars

361 stars

Watchers

10 watching

Forks

Repository files navigation

LT logo

Language Transfer

Language Transfer is a project by Mihalis Eleftheriou, building audio courses for learning languages, completely free. At the moment, the following courses are available:

  • Complete Spanish
  • Complete Greek
  • Complete Swahili
  • Complete German (unfinished)
  • Introduction to Arabic
  • Introduction to Turkish
  • Introduction to Italian
  • Introduction to French
  • Inglés Completo (para hispanohablantes); the previous introduction is available on Language Transfer's YouTube channel
  • Introduction to Music Theory

You can find them on the Language Transfer website.

LT App

App screenshot: home page App screenshot: listen page App screenshot: language home page

This app is developed in React Native, and is designed to work with both iOS & Android platforms.

Development environment

The Nix flake provides development shells for Linux, Apple Silicon macOS, and Intel macOS. On a Mac, install Xcode from Apple first, launch it once to finish installing its components, and select it for command-line builds:

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -license accept

Then enter the default shell and install the JavaScript dependencies:

nix develop
npm ci

On macOS the default shell includes Node.js, Watchman, CocoaPods, and Maestro; Xcode and the iOS SDK continue to come from the host system. Generate the ignored native iOS project and launch it in the simulator with:

npm run ios

Use npm run ios -- --device to select a connected iPhone. The named nix develop .#ios shell is equivalent to the default shell on macOS. Android build tooling remains available separately on both Linux and macOS with nix develop .#android; the Linux default shell remains the Android shell.

The native player has a persistent patch for extensionless lesson files; see iOS audio format handling for rebuild instructions and the iOS 17 requirement for the MIME-type override.

iOS builds also prepare selected offline lessons and course metadata from the public CAS. The preparation fails if a required object is unavailable; Android builds do not include that content.

iOS release policy

The Expo rewrite's iOS release workflow still needs validation on a Mac. Before archiving, regenerate the native project so the preloaded-content Xcode phase is present. The tracked withNixXcodeEnvironment plugin writes the ignored ios/.xcode.env during prebuild; Xcode's script phases source it and run under the current .#ios flake environment at build time. Nix supplies a compatible Bash as well as Node and CocoaPods. Xcode does not need to be launched from nix develop. To supply Node and CocoaPods during prebuild itself, run nix develop .#ios -c npx expo prebuild --platform ios. Then verify first-lesson playback on a fresh install with networking disabled. The bundle check guards against including that content on Android.

Android release builds

Android release builds use the upload-key settings MYAPP_UPLOAD_STORE_FILE, MYAPP_UPLOAD_KEY_ALIAS, MYAPP_UPLOAD_STORE_PASSWORD, and MYAPP_UPLOAD_KEY_PASSWORD from the developer's Gradle properties (normally ~/.gradle/gradle.properties). Keep the credentials and keystore out of Git.

The tracked withAndroidReleaseSigning Expo config plugin restores the release signing configuration whenever the ignored native Android project is generated. Place the keystore named by MYAPP_UPLOAD_STORE_FILE in android/app/; this file is ignored by Git. Generate and build the Play Store bundle locally with:

npx expo prebuild --platform android
cd android
./gradlew bundleRelease

The bundle is written to android/app/build/outputs/bundle/release/app-release.aab. Verify its signing certificate before uploading it to Google Play:

keytool -printcert -jarfile android/app/build/outputs/bundle/release/app-release.aab

Android rapid-Back regression

npm run test:android:rapid-back is disabled pending an upstream react-native-screens update. The known crash, upstream commits, and upgrade / re-enable checklist are in Android rapid-Back regression.

Goals

The Language Transfer app should be:

  • 100% free, like the Language Transfer courses
  • Accessible and easy to use for the visually impaired
  • Considerate of users in areas with poor network quality, expensive Internet access, or low-end devices
  • Free of distractions and annoyances, like advertisements or superfluous notifications
  • Self-sustaining: maintainable and easy to build even in the absence of the original maintainers
  • Private by design, sharing only anonymous usage statistics

Contributions

This app is largely in maintenance mode, so contributions are welcome but may not be addressed quickly by the maintainers. If you want to contribute, be sure to read the contributing guidelines and the code of conduct before engaging with the project.

License

The code for the Language Transfer app is provided under the GPLv2 license.

Support

Please consider supporting Language Transfer's Patreon campaign. This money directly funds Mihalis and the development of future language courses as well as other materials.

Become a Patron

About

React Native application for Language Transfer

Topics

Resources

Stars

361 stars

Watchers

10 watching

Forks

Releases

Packages

Used by

Contributors

Languages