Localization: Change languages in our Android PDF viewer
PSPDFKit for Android comes with many built-in languages:
-
Arabic (ar)
-
Chinese Simplified / Chinese Traditional (zh-Hans/zh-Hant)
-
Croatian (hr)
-
Czech (cs)
-
Danish (da)
-
Dutch (nl)
-
English (en)
-
English United Kingdom (en-GB)
-
Finnish (fi)
-
French (fr)
-
French Canada (fr-CA)
-
German (de)
-
Greek (el)
-
Hebrew (he)
-
Indonesian (id)
-
Italian (it)
-
Japanese (ja)
-
Korean (ko)
-
Malay (ms)
-
Norwegian Bokmål (nb-NO)
-
Polish (pl)
-
Portuguese Brazil / Portugal (pt-BR/pt-PT)
-
Russian (ru)
-
Slovak (sk)
-
Slovenian (sl)
-
Spanish (es)
-
Swedish (sv)
-
Thai (th)
-
Turkish (tr)
-
Ukrainian (uk)
-
Welsh (cy)
Adding Additional Localization to PSPDFKit
You can add additional translations by putting them into the res/strings-XX
directory of your app. Android will automatically merge all string resources at build time. You can also override PSPDFKit strings of existing languages by putting them into the respective string folders.
💡 Tip: To see a list of all available PSPDFKit string resources, take a look at the extracted library AAR file in your project’s build folder at
app/build/intermediates/incremental/mergeDebugResources/merged.dir/values
.
Forcing a Specific Language
PSPDFKit uses localized string resources so that Android can automatically select the correct Locale
based on the device’s system language and region. To force an app-wide locale different from the system’s locale, your application needs to modify Android’s resource Configuration
using a custom Application
class:
/** * Custom application using a fixed `{@link Locale}`. */ class MyApplication : Application() { /** * This example uses a hardcoded, fixed locale. Your app could also implement * a language switcher instead. */ val USED_APP_LOCALE = Locale.GERMAN override fun onCreate() { super.onCreate() // Set the locale initially when the app is launched. setAppLocale(USED_APP_LOCALE) } override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) // Reapply the locale every time the app’s configuration changes // (e.g. due to the user changing the device’s locale). setAppLocale(USED_APP_LOCALE) } /** * Sets the app-wide `{@link Locale}`. */ private fun setAppLocale(locale: Locale) { val configuration = Configuration() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { configuration.setLocale(locale) } else { configuration.locale = locale } // This will not replace the app configuration, but will merely // merge the chosen locale into the existing configuration. resources.updateConfiguration(configuration, null) } }
/** * Custom application using a fixed `{@link Locale}`. */ public class MyApplication extends Application { /** * This example uses a hardcoded, fixed locale. Your app could also implement * a language switcher instead. */ private static final Locale USED_APP_LOCALE = Locale.GERMAN; @Override public void onCreate() { super.onCreate(); // Set the locale initially when the app is launched. setAppLocale(USED_APP_LOCALE); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Reapply the locale every time the app’s configuration changes // (e.g. due to the user changing the device’s locale). setAppLocale(USED_APP_LOCALE); } /** * Sets the app-wide `{@link Locale}`. */ private void setAppLocale(Locale locale) { final Configuration configuration = new Configuration(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { configuration.setLocale(locale); } else { configuration.locale = locale; } // This will not replace the app configuration, but will merely // merge the chosen locale into the existing configuration. getResources().updateConfiguration(configuration, null); } }
To tell Android it should use your custom MyApplication
class, you need to define it within your app’s AndroidManifest.xml
:
<?xml version="1.0" encoding="utf-8"?> <manifest package="com.pspdfkit.examples.locale" xmlns:android="http://schemas.android.com/apk/res/android"> <application android:name=".MyApplication"> ... </application> </manifest>