App UI Customization

Integration Options

Localization

The UI can be configured in the following languages:

LanguageLocaleFormality
English (default)eninformal
Bulgarianbgformal
Croatianhrinformal
Danishdaformal
Dutchnlinformal
Estonianetformal
Finnishfiinformal
Frenchfrformal
Germandeformal
Greekelformal
Italianitinformal
Polishplinformal
Portugueseptformal
Maltesemtformal
Norwegian (Bokmål)nbformal
Romanianroformal
Spanishesinformal
Turkishtrformal

If the client's device language:

  • Is supported: It is used automatically or you can override it with flavor.localization.fixedLanguage.
  • Is not supported: Specify a fallback with flavor.localization.baseLanguage.

Android & iOS (quick reference)

Android quick reference
TopicAPI / PathExample / Notes
Set fallback languageOrcaFlavor(localization = OrcaLocalization(baseLanguage = OrcaLocalization.LanguageType.NL))Dutch (NL) fallback when device language isn’t supported.
Force specific languageOrcaLocalization(fixedLanguage = OrcaLocalization.LanguageType.ES)Always Spanish (ES).
Apply flavor to product[Product]CustomizationConfig(flavor = customFlavor)Replace [Product]/[product] with your module (e.g., KycCustomizationConfig).
Usage (builder)Orca.[product](context).customize(config = customizationConfig)Add .customize(...) in your builder chain.
iOS quick reference
TopicAPI / PathExample / Notes
Force specific languageflavor.localization.fixedLanguage = .esAlways Spanish (ES).
Set fallback languageflavor.localization.baseLanguage = .nlUses Dutch (NL) when device language isn’t supported.
Apply flavor to productlet customization = KycCustomizationConfig(flavor: flavor)Use the corresponding customization config for your flow.
Usage (builder)Orca.kyc.configure(...).customize(with: customization).present { ... }Add .customize(with:) in your builder chain.
Plugins quick reference
SDKJSON key pathExample JSON
Sharedflavor.localization{ "baseLanguage": "fr", "fixedLanguage": "en" }
CordovaFourthline.startKyc(config)See code tabs below.
Flutter_fourthlinePlugin.startKyc(config)See code tabs below.
React NativeNativeModules.Fourthline.startKyc(config)See code tabs below.

Copyable code (Android / iOS tabs)

import com.fourthline.orca.core.flavor.OrcaFlavor
import com.fourthline.orca.core.flavor.OrcaLocalization
// Optional: import com.fourthline.orca.Orca
// Optional: import com.fourthline.orca.[product].[Product]CustomizationConfig

val customFlavor = OrcaFlavor(
    localization = OrcaLocalization(
        baseLanguage = OrcaLocalization.LanguageType.NL
        // fixedLanguage = OrcaLocalization.LanguageType.ES
    )
)

// Usage (replace [product]/[Product] with your integration)
val customizationConfig = [Product]CustomizationConfig(flavor = customFlavor)

Orca.[product](context)
  // ...
  .customize(config = customizationConfig)
  // ...
var flavor = OrcaFlavor()

// Force a specific language:
flavor.localization.fixedLanguage = .es
// Or only set a fallback:
// flavor.localization.baseLanguage = .nl

let configuration = KycConfig(supportedCountries: localDataSource.supportedCountries)
let customization = KycCustomizationConfig(flavor: flavor)

Orca.kyc
  .configure(with: configuration)
  .customize(with: customization)
  .present { result in
    switch result {
    case .success(let kycInfo):
      print("Finished Orca with kyc info: \(kycInfo)")
    case let .failure(kycError):
      print("Finished Orca with error: \(kycError)")
    }
  }

Plugin code

const orcaLocalization = `{
  "baseLanguage": "fr",
  "fixedLanguage": "en"
}`;

const config = `{
  "flowType": "defaultFlow",
  "configuration": {
    "flavor": {
      "localization": ${orcaLocalization}
    }
  }
}`;

Fourthline.startKyc(
  config,
  function (kycJson) {
    const jsonResult = JSON.parse(kycJson);
  },
  function (error) {
    const jsonError = JSON.parse(error);
  }
);
import 'package:flutter/services.dart';

final Fourthline _fourthlinePlugin = Fourthline();

final String orcaLocalization = '{"baseLanguage": "fr", "fixedLanguage": "en"}';
final String config = """
{
  "flowType": "customFlow",
  "configuration": {
    "flowSteps": ["selfieFlow", "addressFlow"],
    "flavor": {
      "localization": $orcaLocalization
    }
  }
}
""";

try {
  final String result =
      await _fourthlinePlugin.startKyc(config) ?? "Could not start KYC";
  print('The success response is: $result');
} on PlatformException catch (e) {
  final String error = e.toString();
}
import { NativeModules } from 'react-native';

const orcaLocalization = `{
  "baseLanguage": "fr",
  "fixedLanguage": "en"
}`;
const config = `{
  "flowType": "defaultFlow",
  "configuration": {
    "flavor": {
      "localization": ${orcaLocalization}
    }
  }
}`;

NativeModules.Fourthline.startKyc(config)
  .then((kycJson) => {
    const jsonResult = JSON.parse(kycJson);
  })
  .catch((error) => {
    const jsonError = JSON.parse(error.message);
  });