Welcome!

Welcome to the official BlackBerry Support Community Forums.

This is your resource to discuss support topics with your peers, and learn from each other.

inside custom component

Native Development

Reply
Developer
jessica99327
Posts: 84
Registered: ‎04-22-2013
My Device: BB 10 Dev
My Carrier: Simulator

Multilingual implementation on bb10 apps

Hi all,

I'm a newbie in developing app in BB10.

How do I implement 2 languages into my app, based on the device language setting?

For example, by default is English, if the user choose Japanese as their OS language, when user open the app it should display Japanese labels instead of the default, English.

I totally got no idea on this, any guides or example are welcome.

Thanks in advance.

Please use plain text.
Developer
Hithredin
Posts: 404
Registered: ‎06-03-2010
My Device: Z10 Red
My Carrier: Free

Re: Multilingual implementation on bb10 apps

Please use plain text.
New Developer
ahmedalhouqani
Posts: 13
Registered: ‎08-03-2013
My Device: Blackberry Z10 - Q10 - Q5
My Carrier: UAE Du

Re: Multilingual implementation on bb10 apps

In your QML File, make sure that you are using the qsTr("Sample Text")! So your translation texts will be added automatically after you build your app to your app directory under a folder called translations. In order to see the translations files, you have to add the language to your bar-descriptor.xml under Localization tab.

 

The file you have to translate should be YourAPP_jp.ts. Open this file and translate all your texts there for example:

 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="jp_JP">
<context>
    <name>main</name>
    <message>
        <location filename="../assets/YourAPP.cpp" line="6"/>
        <source>Sample Text</source>
        <translation type="unfinished"></translation>
    </message>
</context>
</TS>

 Translated:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="jp_JP">
<context>
    <name>main</name>
    <message>
        <location filename="../assets/YourAPP.cpp" line="6"/>
        <source>Sample Text</source>
        <translation>サンプルテキスト</translation>
    </message>
</context>
</TS>

 and so on..

 

Hope this helps!

Please use plain text.
Developer
sorout2009
Posts: 104
Registered: ‎08-23-2012
My Device: Blackberry Z10
My Carrier: TATA DOCOMO

Re: Multilingual implementation on bb10 apps

do the below in your app constructor

 

translator = new QTranslator();
myLocaleHandler = new LocaleHandler(this);
connect(myLocaleHandler, SIGNAL(systemLanguageChanged()), this, SLOT(onSystemLanguageChanged()));

 

declare onSystemLanguageChanged() under slots in your hpp file.

whenever the system language will change, onSystemLanguageChanged() slot will be called.

 

void Demo::smileysurprised:nSystemLanguageChanged() {
QString locale_string = QLocale().name();    // get the local lang name

QString filename = QString( "PhoneCloneNew_%1" ).arg( locale_string );
if (translator != NULL && translator->load(filename, "app/native/qm")) {
application->installTranslator( translator );    // application is the instance of your app
}


qDebug()<<"locale_string name :"<<locale_string;
}

 

 

whatever the language you will add in your application, respected .ts file will be generated under translations folder

suppose you add support for arabic, generated file name will be like LanguageDemo_ar.ts  open that file and insert corresponding value of the string in arabic.

 

For more information, you can download the attached LanguageDemo app.

Dharmender Singh
Please use plain text.
Developer
jessica99327
Posts: 84
Registered: ‎04-22-2013
My Device: BB 10 Dev
My Carrier: Simulator

Re: Multilingual implementation on bb10 apps

[ Edited ]

Thanks for all the comments above.

That's pretty a good start for me.

 

I've tried to run the Language Demo app that you've attached.

But what should I do if I wanted to display different images for different languages, for example if English display image A else if Arabic display image B. Do I check for the locale in qml and display the respective image or are there any better ways to do it?

 

Thanks again for the help:smileyhappy:

Please use plain text.
Developer
slashkyle
Posts: 820
Registered: ‎10-16-2012
My Device: Red Z10
My Carrier: Telus

Re: Multilingual implementation on bb10 apps

use qsTr("")

Label {
    id: myLabel
    text: qsTr("translate me")
}

ImageView {
    id: myView
    imageSource: qsTr("asset:///images/englishPic.png")
}

 then use a program like qt linguist to modify the translation files, there you will be able to input what you want the imageSource of myView, or text of myLabel to be for each language.

Please use plain text.
Developer
jessica99327
Posts: 84
Registered: ‎04-22-2013
My Device: BB 10 Dev
My Carrier: Simulator

Re: Multilingual implementation on bb10 apps

[ Edited ]

I'm assuming that the translation files will autodetect whatever qstr strings in all qml files in my project but I'm not sure why it only detects those in main.qml and not other qml files?

Any idea of what I'm missing out?

 

Below is my main.cpp

#include <bb/cascades/AbstractPane>
#include <bb/cascades/Application>
#include <bb/cascades/QmlDocument>

#include <QLocale>
#include <QTranslator>
#include <bb/cascades/LocaleHandler>

//System includes
#include <bb/system/SystemCredentialsPrompt>
#include <bb/system/SystemDialog>
#include <bb/system/SystemPrompt>
#include <bb/system/SystemToast>
#include <bb/system/SystemUiButton>
#include <bb/system/SystemUiError>
#include <bb/system/SystemUiInputField>
#include <bb/system/SystemUiInputMode>
#include <bb/system/SystemUiPosition>
#include <bb/system/SystemUiResult>

//Picker includes
#include <bb/cascades/pickers/ContactPicker>
#include <bb/cascades/pickers/FilePicker>

//Carousel includes
#include "Carousel.hpp"
#include "Slider.hpp"
#include <bb/cascades/pickers/ContactPicker>
#include "ContactDet.hpp"
#include "SMSexample.hpp"
#include "user_model.h"
#include "user_item_provider.h"
#include "account_detail_model.h"
#include "account_detail_item_provider.h"
#include "SimpleARBrowser.hpp"
#include "CustomRadioGroup.h"
#include "FavouriteAccountLayout.h"
#include "SocialInvocation.hpp"
#include <background_manager.h>
#include "timer.hpp"


using namespace bb::cascades;
using namespace bb::cascades::pickers;

QTranslator *translator;

void myMessageOutput(QtMsgType type, const char* msg) {
	fprintf(stdout, "%s\n", msg);
	fflush(stdout);
}

void onSystemLanguageChanged() {
	QString locale_string = QLocale().name();
	QString filename = QString( "LanguageDemo_%1" ).arg( locale_string );
	if (translator->load(filename, "app/native/qm")) {
		QCoreApplication::instance()->installTranslator(translator);
	}
	qDebug()<<"locale_string name :"<<locale_string;
}


int main(int argc, char **argv)
{
	// We need to register the QML types in the multimedia-library,
	// otherwise we will get an error from the QML.
	//Register system type
	qmlRegisterType<bb::system::SystemUiButton>("bb.system", 1, 0, "SystemUiButton");
	qmlRegisterType<bb::system::SystemUiInputField>("bb.system", 1, 0, "SystemUiInputField");
	qmlRegisterType<bb::system::SystemToast>("bb.system", 1, 0, "SystemToast");
	qmlRegisterType<bb::system::SystemPrompt>("bb.system", 1, 0, "SystemPrompt");
	qmlRegisterType<bb::system::SystemCredentialsPrompt>("bb.system", 1, 0, "SystemCredentialsPrompt");
	qmlRegisterType<bb::system::SystemDialog>("bb.system", 1, 0, "SystemDialog");
	qmlRegisterUncreatableType<bb::system::SystemUiError>("bb.system", 1, 0, "SystemUiError", "");
	qmlRegisterUncreatableType<bb::system::SystemUiResult>("bb.system", 1, 0, "SystemUiResult", "");
	qmlRegisterUncreatableType<bb::system::SystemUiPosition>("bb.system", 1, 0, "SystemUiPosition", "");
	qmlRegisterUncreatableType<bb::system::SystemUiInputMode>("bb.system", 1, 0, "SystemUiInputMode", "");
	qmlRegisterUncreatableType<bb::system::SystemUiModality>("bb.system", 1, 0, "SystemUiModality", "");
	qRegisterMetaType<bb::system::SystemUiResult::Type>("bb::system::SystemUiResult::Type");

	qmlRegisterType<Slider>("custom.lib", 1, 0, "Slider");
	qmlRegisterType<ContactPicker>("bb.cascades.pickers", 1, 0, "ContactPicker");
	qmlRegisterType<ContactDet>("contact.lib", 1, 0, "ContactDet");
	qmlRegisterType<SMSexample>("sms.lib", 1, 0, "SMSexample");
	qmlRegisterType<UserModel>("sl.hlb", 1, 0, "UserModel");
	qmlRegisterType<UserItemProvider>("sl.hlb", 1, 0, "UserItemProvider");
	qmlRegisterType<AccountDetailModel>("adm.hlb", 1, 0, "AccountDetailModel");
	qmlRegisterType<AccountDetailItemProvider>("adm.hlb", 1, 0, "AccountDetailItemProvider");
	qmlRegisterType<CustomRadioGroup>("custom.control.lib", 1, 0, "CustomRadioGroup");
	qmlRegisterType<FavouriteAccountLayout>("custom.control.lib", 1, 0, "FavouriteAccountLayout");
	qmlRegisterType<BackgroundManager>("manager.bg", 1, 0, "BackgroundManager");
	qmlRegisterType<Timer>("CustomTimer", 1, 0, "Timer");
	//Register file picker
	qmlRegisterType<bb::cascades::pickers::FilePicker>("CustomComponent", 1, 0,"FilePicker");

	// this is where the server is started etc
	Application app(argc, argv);

	qInstallMsgHandler(myMessageOutput);

	// localization support
    QTranslator translator;
    QString locale_string = QLocale().name();
    qDebug()<<"locale_string  : "<<locale_string;
    QString filename = QString( "HLB_%1" ).arg( locale_string );
    if (translator.load(filename, "app/native/qm")) {
        app.installTranslator( &translator );
    }

	LocaleHandler *myLocaleHandler = new LocaleHandler(&app);
	QObject::connect(myLocaleHandler, SIGNAL(systemLanguageChanged()), &app, SLOT(onSystemLanguageChanged()));

	Carousel* carousel = new Carousel(&app);
	SimpleARBrowser *sarBrowser = new SimpleARBrowser(&app);
	SocialInvocation *socialInvoke = new SocialInvocation(&app);
	//sarBrowser->loadPage();


	// create scene document from main.qml asset
	// set parent to created document to ensure it exists for the whole application lifetime

	QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(&app);
	qml->setContextProperty("_carousel", carousel);
	qml->setContextProperty("_sarBrowser", sarBrowser);
	qml->setContextProperty("_socialInvocation", socialInvoke);

    // Retrieve the path to the app's working directory
    const QString workDir = QDir::currentPath();

    // Build the path, add it as a context property,
    // and expose it to QML
    QVariantMap dirPaths;
    dirPaths["camera"] = QString::fromLatin1("file://%1/shared/camera/").arg(workDir);
    dirPaths["asset"] = QString::fromLatin1("file://%1/app/native/assets/").arg(workDir);
    qml->documentContext()->setContextProperty("_dirPaths", dirPaths);

	// create root object for the UI
	AbstractPane *root = qml->createRootObject<AbstractPane>();

	// set created root object as a scene
	Application::instance()->setScene(root);

	// we complete the transaction started in the app constructor and start the client event loop here
	return Application::exec();
	// when loop is exited the Application deletes the scene which deletes all its children (per qt rules for children)
}

 my app.pro file

APP_NAME = HLB

CONFIG += qt warn_on debug_and_release cascades

include(config.pri)

LIBS += -lbbcascadespickers -lbbpim -lbbsystem
LIBS += -L../lib -lARchitectSDK -lARchitectLibrary -lcamapi -lfreetype -lmmrndclient -lscreen -lEGL -lGLESv2 -lsocket -limg -lpng -lbbdata -lcrypto -lwmm


device {
	CONFIG(release, debug|release) {
		DESTDIR = o.le-v7
		TEMPLATE = lib
        QMAKE_CXXFLAGS_RELEASE += -fvisibility=hidden -mthumb
	}
	CONFIG(debug, debug|release) {
		DESTDIR = o.le-v7-g
	}
}

simulator {
	CONFIG(release, debug|release) {
		DESTDIR = o
	}
	CONFIG(debug, debug|release) {
		DESTDIR = o-g
	}
}

OBJECTS_DIR = $${DESTDIR}/.obj
MOC_DIR = $${DESTDIR}/.moc
RCC_DIR = $${DESTDIR}/.rcc
UI_DIR = $${DESTDIR}/.ui

suredelete.target = sureclean
suredelete.commands = $(DEL_FILE) $${MOC_DIR}/*; $(DEL_FILE) $${RCC_DIR}/*; $(DEL_FILE) $${UI_DIR}/*
suredelete.depends = distclean

QMAKE_EXTRA_TARGETS += suredelete

 

config.pri

 

# Auto-generated by IDE. Any changes made by user will be lost!
BASEDIR =  $$quote($$_PRO_FILE_PWD_)

device {
    CONFIG(debug, debug|release) {
        SOURCES +=  $$quote($$BASEDIR/src/Carousel.cpp) \
                 $$quote($$BASEDIR/src/ContactDet.cpp) \
                 $$quote($$BASEDIR/src/CustomHeader.cpp) \
                 $$quote($$BASEDIR/src/CustomListItem.cpp) \
                 $$quote($$BASEDIR/src/CustomListItemAccountDetail.cpp) \
                 $$quote($$BASEDIR/src/CustomRadioGroup.cpp) \
                 $$quote($$BASEDIR/src/FavouriteAccountLayout.cpp) \
                 $$quote($$BASEDIR/src/Placemark.cpp) \
                 $$quote($$BASEDIR/src/SMSexample.cpp) \
                 $$quote($$BASEDIR/src/SimpleARBrowser.cpp) \
                 $$quote($$BASEDIR/src/Slider.cpp) \
                 $$quote($$BASEDIR/src/SocialInvocation.cpp) \
                 $$quote($$BASEDIR/src/Timer.cpp) \
                 $$quote($$BASEDIR/src/account_detail_item_provider.cpp) \
                 $$quote($$BASEDIR/src/account_detail_model.cpp) \
                 $$quote($$BASEDIR/src/background_manager.cpp) \
                 $$quote($$BASEDIR/src/customlistitem_a.cpp) \
                 $$quote($$BASEDIR/src/customlistitem_b.cpp) \
                 $$quote($$BASEDIR/src/customlistitem_c.cpp) \
                 $$quote($$BASEDIR/src/main.cpp) \
                 $$quote($$BASEDIR/src/user_item_provider.cpp) \
                 $$quote($$BASEDIR/src/user_model.cpp) \
                 $$quote($$BASEDIR/src/wallpaper_settings.cpp)

        HEADERS +=  $$quote($$BASEDIR/src/ArchitectView.h) \
                 $$quote($$BASEDIR/src/Carousel.hpp) \
                 $$quote($$BASEDIR/src/ContactDet.hpp) \
                 $$quote($$BASEDIR/src/CustomHeader.h) \
                 $$quote($$BASEDIR/src/CustomListItem.hpp) \
                 $$quote($$BASEDIR/src/CustomListItemAccountDetail.hpp) \
                 $$quote($$BASEDIR/src/CustomRadioGroup.h) \
                 $$quote($$BASEDIR/src/FavouriteAccountLayout.h) \
                 $$quote($$BASEDIR/src/Placemark.h) \
                 $$quote($$BASEDIR/src/SMSexample.hpp) \
                 $$quote($$BASEDIR/src/SimpleARBrowser.hpp) \
                 $$quote($$BASEDIR/src/Slider.hpp) \
                 $$quote($$BASEDIR/src/SocialInvocation.hpp) \
                 $$quote($$BASEDIR/src/Timer.hpp) \
                 $$quote($$BASEDIR/src/account_detail_item_provider.h) \
                 $$quote($$BASEDIR/src/account_detail_model.h) \
                 $$quote($$BASEDIR/src/background_manager.h) \
                 $$quote($$BASEDIR/src/customlistitem_a.h) \
                 $$quote($$BASEDIR/src/customlistitem_b.h) \
                 $$quote($$BASEDIR/src/customlistitem_c.h) \
                 $$quote($$BASEDIR/src/qlistextension.h) \
                 $$quote($$BASEDIR/src/user_item_provider.h) \
                 $$quote($$BASEDIR/src/user_model.h) \
                 $$quote($$BASEDIR/src/wallpaper_settings.h)
    }

    CONFIG(release, debug|release) {
        SOURCES +=  $$quote($$BASEDIR/src/Carousel.cpp) \
                 $$quote($$BASEDIR/src/ContactDet.cpp) \
                 $$quote($$BASEDIR/src/CustomHeader.cpp) \
                 $$quote($$BASEDIR/src/CustomListItem.cpp) \
                 $$quote($$BASEDIR/src/CustomListItemAccountDetail.cpp) \
                 $$quote($$BASEDIR/src/CustomRadioGroup.cpp) \
                 $$quote($$BASEDIR/src/FavouriteAccountLayout.cpp) \
                 $$quote($$BASEDIR/src/Placemark.cpp) \
                 $$quote($$BASEDIR/src/SMSexample.cpp) \
                 $$quote($$BASEDIR/src/SimpleARBrowser.cpp) \
                 $$quote($$BASEDIR/src/Slider.cpp) \
                 $$quote($$BASEDIR/src/SocialInvocation.cpp) \
                 $$quote($$BASEDIR/src/Timer.cpp) \
                 $$quote($$BASEDIR/src/account_detail_item_provider.cpp) \
                 $$quote($$BASEDIR/src/account_detail_model.cpp) \
                 $$quote($$BASEDIR/src/background_manager.cpp) \
                 $$quote($$BASEDIR/src/customlistitem_a.cpp) \
                 $$quote($$BASEDIR/src/customlistitem_b.cpp) \
                 $$quote($$BASEDIR/src/customlistitem_c.cpp) \
                 $$quote($$BASEDIR/src/main.cpp) \
                 $$quote($$BASEDIR/src/user_item_provider.cpp) \
                 $$quote($$BASEDIR/src/user_model.cpp) \
                 $$quote($$BASEDIR/src/wallpaper_settings.cpp)

        HEADERS +=  $$quote($$BASEDIR/src/ArchitectView.h) \
                 $$quote($$BASEDIR/src/Carousel.hpp) \
                 $$quote($$BASEDIR/src/ContactDet.hpp) \
                 $$quote($$BASEDIR/src/CustomHeader.h) \
                 $$quote($$BASEDIR/src/CustomListItem.hpp) \
                 $$quote($$BASEDIR/src/CustomListItemAccountDetail.hpp) \
                 $$quote($$BASEDIR/src/CustomRadioGroup.h) \
                 $$quote($$BASEDIR/src/FavouriteAccountLayout.h) \
                 $$quote($$BASEDIR/src/Placemark.h) \
                 $$quote($$BASEDIR/src/SMSexample.hpp) \
                 $$quote($$BASEDIR/src/SimpleARBrowser.hpp) \
                 $$quote($$BASEDIR/src/Slider.hpp) \
                 $$quote($$BASEDIR/src/SocialInvocation.hpp) \
                 $$quote($$BASEDIR/src/Timer.hpp) \
                 $$quote($$BASEDIR/src/account_detail_item_provider.h) \
                 $$quote($$BASEDIR/src/account_detail_model.h) \
                 $$quote($$BASEDIR/src/background_manager.h) \
                 $$quote($$BASEDIR/src/customlistitem_a.h) \
                 $$quote($$BASEDIR/src/customlistitem_b.h) \
                 $$quote($$BASEDIR/src/customlistitem_c.h) \
                 $$quote($$BASEDIR/src/qlistextension.h) \
                 $$quote($$BASEDIR/src/user_item_provider.h) \
                 $$quote($$BASEDIR/src/user_model.h) \
                 $$quote($$BASEDIR/src/wallpaper_settings.h)
    }
}

simulator {
    CONFIG(debug, debug|release) {
        SOURCES +=  $$quote($$BASEDIR/src/Carousel.cpp) \
                 $$quote($$BASEDIR/src/ContactDet.cpp) \
                 $$quote($$BASEDIR/src/CustomHeader.cpp) \
                 $$quote($$BASEDIR/src/CustomListItem.cpp) \
                 $$quote($$BASEDIR/src/CustomListItemAccountDetail.cpp) \
                 $$quote($$BASEDIR/src/CustomRadioGroup.cpp) \
                 $$quote($$BASEDIR/src/FavouriteAccountLayout.cpp) \
                 $$quote($$BASEDIR/src/Placemark.cpp) \
                 $$quote($$BASEDIR/src/SMSexample.cpp) \
                 $$quote($$BASEDIR/src/SimpleARBrowser.cpp) \
                 $$quote($$BASEDIR/src/Slider.cpp) \
                 $$quote($$BASEDIR/src/SocialInvocation.cpp) \
                 $$quote($$BASEDIR/src/Timer.cpp) \
                 $$quote($$BASEDIR/src/account_detail_item_provider.cpp) \
                 $$quote($$BASEDIR/src/account_detail_model.cpp) \
                 $$quote($$BASEDIR/src/background_manager.cpp) \
                 $$quote($$BASEDIR/src/customlistitem_a.cpp) \
                 $$quote($$BASEDIR/src/customlistitem_b.cpp) \
                 $$quote($$BASEDIR/src/customlistitem_c.cpp) \
                 $$quote($$BASEDIR/src/main.cpp) \
                 $$quote($$BASEDIR/src/user_item_provider.cpp) \
                 $$quote($$BASEDIR/src/user_model.cpp) \
                 $$quote($$BASEDIR/src/wallpaper_settings.cpp)

        HEADERS +=  $$quote($$BASEDIR/src/ArchitectView.h) \
                 $$quote($$BASEDIR/src/Carousel.hpp) \
                 $$quote($$BASEDIR/src/ContactDet.hpp) \
                 $$quote($$BASEDIR/src/CustomHeader.h) \
                 $$quote($$BASEDIR/src/CustomListItem.hpp) \
                 $$quote($$BASEDIR/src/CustomListItemAccountDetail.hpp) \
                 $$quote($$BASEDIR/src/CustomRadioGroup.h) \
                 $$quote($$BASEDIR/src/FavouriteAccountLayout.h) \
                 $$quote($$BASEDIR/src/Placemark.h) \
                 $$quote($$BASEDIR/src/SMSexample.hpp) \
                 $$quote($$BASEDIR/src/SimpleARBrowser.hpp) \
                 $$quote($$BASEDIR/src/Slider.hpp) \
                 $$quote($$BASEDIR/src/SocialInvocation.hpp) \
                 $$quote($$BASEDIR/src/Timer.hpp) \
                 $$quote($$BASEDIR/src/account_detail_item_provider.h) \
                 $$quote($$BASEDIR/src/account_detail_model.h) \
                 $$quote($$BASEDIR/src/background_manager.h) \
                 $$quote($$BASEDIR/src/customlistitem_a.h) \
                 $$quote($$BASEDIR/src/customlistitem_b.h) \
                 $$quote($$BASEDIR/src/customlistitem_c.h) \
                 $$quote($$BASEDIR/src/qlistextension.h) \
                 $$quote($$BASEDIR/src/user_item_provider.h) \
                 $$quote($$BASEDIR/src/user_model.h) \
                 $$quote($$BASEDIR/src/wallpaper_settings.h)
    }
}

INCLUDEPATH +=  $$quote($$BASEDIR/src)

CONFIG += precompile_header

PRECOMPILED_HEADER =  $$quote($$BASEDIR/precompiled.h)

lupdate_inclusion {
    SOURCES +=  $$quote($$BASEDIR/../src/*.c) \
             $$quote($$BASEDIR/../src/*.c++) \
             $$quote($$BASEDIR/../src/*.cc) \
             $$quote($$BASEDIR/../src/*.cpp) \
             $$quote($$BASEDIR/../src/*.cxx) \
             $$quote($$BASEDIR/../assets/*.qml) \
             $$quote($$BASEDIR/../assets/*.js) \
             $$quote($$BASEDIR/../assets/*.qs)

    HEADERS +=  $$quote($$BASEDIR/../src/*.h) \
             $$quote($$BASEDIR/../src/*.h++) \
             $$quote($$BASEDIR/../src/*.hh) \
             $$quote($$BASEDIR/../src/*.hpp) \
             $$quote($$BASEDIR/../src/*.hxx)
}

TRANSLATIONS =  $$quote($${TARGET}_zh_CN.ts) \
         $$quote($${TARGET}.ts)

 Thanks in advance:smileyhappy:

Please use plain text.
Developer
Hithredin
Posts: 404
Registered: ‎06-03-2010
My Device: Z10 Red
My Carrier: Free

Re: Multilingual implementation on bb10 apps

Where are your other QML files?

In the "assets/ " folder or inside a subfolder? 

Please use plain text.