App-level Language Setting (React Native)

Use API on JS/TS side

Call API on JS/TS side

import FireworkSDK from 'react-native-firework-sdk';

// You should pass language code to this API, such as "en", "ar" and "pt-BR".
FireworkSDK.getInstance().changeAppLanguage('ar');

Generally, the changeAppLanguage API should be called in the following cases:

  1. The App is launched(e.g. in the componentDidMount method of App component).

  2. Users change the app language manually.

  3. Other cases that change app language.

Calling sequence

Currently, FireworkSDK.getInstance().changeAppLanguage will recreate the activity on Android. Therefore, we need to follow the calling sequence.

Generally, you also have codes for switching languages, such as the codes of caching the language.

  1. Please call FireworkSDK.getInstance().changeAppLanguage before RNRestart.Restart

  2. Please call FireworkSDK.getInstance().changeAppLanguage after all your other codes for switching languages, such as the codes of caching the language.

For example:

const language = 'ar';

// Caching language should be called before changeAppLanguage API
await AsyncStorage.setItem('app-language', language);

await FireworkSDK.getInstance().changeAppLanguage(language);

// If you use RNRestart.Restart,
// RNRestart.Restart should be called after changeAppLanguage API
RNRestart.Restart();

Additional setup steps on iOS

Firework SDK widgets are based on native views. Hence, as shown in the screenshot below, you need to add the localizations you want to support to the iOS project, which is required by iOS framework.

Additional setup steps on Android

To be able to use the in-app language feature, the following configuration needs to be added to the app project.

Override the attachBaseContext method in MainActivity.

import com.fireworksdk.bridge.reactnative.FWReactNativeSDK;

public class MainActivity extends ReactActivity {  
  protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(FWReactNativeSDK.INSTANCE.updateBaseContextLocale(newBase));
  }
}

If you need to support RTL, then please add the following configuration to the AndroidManifest.xml

    <application
        ...
        android:supportsRtl="true"
    >
    ...

Use API on native sides

Generally, you should use changeAppLanguage API on JS/TS side. But we also support using this API on native sides directly.

Change app language on iOS native side

import FireworkVideoUI
AppLanguageManager.shared.changeAppLanguage("ar") // such as ar, ar-JO, en, etc.

Generally, the changeAppLanguage API should be called in the following cases:

  1. The App is launched(e.g. in the application(:, didFinishLaunchingWithOptions:) -> Bool method).

  2. Users change the app language manually.

  3. Other cases that change app language.

After calling changeAppLanguage API, we need to recreate FireworkVideo SDK components to update the UI. Such as:

  • Recreate video feed and story block

  • Stop floating player

Additional setup steps on iOS

Firework SDK widgets are based on native views. Hence, as shown in the screenshot below, you need to add the localizations you want to support to the iOS project, which is required by iOS framework.

Change app language on Android native side

Step 1: The following methods need to be prepared

  // Some code
  // change language
  fun changeLanguage(inputLocaleString: String, activity: Activity) {
     // save to sp, or save to application or your app cache system
     sharedPreferences.edit().apply {
        putString(LOCALE_KEY, inputLocaleString)
      }.commit()
     restartActivity(activity)
  }
  
  // update the base context locale
  fun updateBaseContextLocale(baseContext: Context): Context {
    // Read from sp or application. If the language/locale exists in your app, use it directly
    val currentLocaleString = sharedPreferences.getString(LOCALE_KEY, null)
    if (currentLocaleStrinotg.isNullOrBlank()) {
      return baseContext
    }
    
    val localeStrings = currentLocaleString.split("-")
    val locale = if (localeStrings.size > 1) {
      Locale(localeStrings[0], localeStrings[1])
    } else {
      Locale(currentLocaleString)
    }
    
    updateDefaultLocale(locale)
    return updateResourcesLocale(baseContext, locale)
  }
  
  // update the default locale
  private fun updateDefaultLocale(locale: Locale) {
    Locale.setDefault(locale)
  }

  // update the context locale
  private fun updateResourcesLocale(context: Context, locale: Locale): Context {
    val resources = context.resources
    val configuration = resources.configuration
    configuration.setLocale(locale)
    configuration.setLayoutDirection(locale)
    return context.createConfigurationContext(configuration)
  }
  
  // restart activity
  private fun restartActivity(activity: Activity) {
    activity.recreate()
  }

Step 2: Add the following code to all activities

// Some code
class YourActivity: Activity() {

  ...
  override fun attachBaseContext(newBase: Context) {
    super.attachBaseContext(updateBaseContextLocale(newBase))
  }
}

Step 3: Call the change language method where you need

// Some code
// You must call this for all currently live activities
changeLanguage("ar", activity) // "ar-jo", "en-US", "en"

Language support table

Last updated