diff --git a/scriptengines/javascript/simplejavascriptapplet.cpp b/scriptengines/javascript/simplejavascriptapplet.cpp index 0220ccbeb..5adee88b2 100644 --- a/scriptengines/javascript/simplejavascriptapplet.cpp +++ b/scriptengines/javascript/simplejavascriptapplet.cpp @@ -432,7 +432,9 @@ void SimpleJavaScriptApplet::setupObjects() m_engine->setDefaultPrototype(qMetaTypeId(), m_engine->newQObject(new ServiceJob(QString(), QString(), QMap()))); global.setProperty("i18n", m_engine->newFunction(SimpleJavaScriptApplet::jsi18n)); + global.setProperty("i18nc", m_engine->newFunction(SimpleJavaScriptApplet::jsi18nc)); global.setProperty("i18np", m_engine->newFunction(SimpleJavaScriptApplet::jsi18np)); + global.setProperty("i18ncp", m_engine->newFunction(SimpleJavaScriptApplet::jsi18ncp)); global.setProperty("dataEngine", m_engine->newFunction(SimpleJavaScriptApplet::dataEngine)); global.setProperty("service", m_engine->newFunction(SimpleJavaScriptApplet::service)); qScriptRegisterMetaType(m_engine, qScriptValueFromData, 0, QScriptValue()); @@ -526,6 +528,23 @@ QScriptValue SimpleJavaScriptApplet::jsi18n(QScriptContext *context, QScriptEngi return engine->newVariant(message.toString().toLocal8Bit()); } +QScriptValue SimpleJavaScriptApplet::jsi18nc(QScriptContext *context, QScriptEngine *engine) +{ + if (context->argumentCount() < 2) { + return context->throwError(i18n("i18n takes at least two arguments")); + } + + KLocalizedString message = ki18nc(context->argument(0).toString().toLocal8Bit(), + context->argument(1).toString().toLocal8Bit()); + + int numArgs = context->argumentCount(); + for (int i = 2; i < numArgs; ++i) { + message.subs(context->argument(i).toString()); + } + + return engine->newVariant(message.toString().toLocal8Bit()); +} + QScriptValue SimpleJavaScriptApplet::jsi18np(QScriptContext *context, QScriptEngine *engine) { if (context->argumentCount() < 2) { @@ -536,7 +555,25 @@ QScriptValue SimpleJavaScriptApplet::jsi18np(QScriptContext *context, QScriptEng context->argument(1).toString().toLocal8Bit()); int numArgs = context->argumentCount(); - for (int i = 1; i < numArgs; ++i) { + for (int i = 2; i < numArgs; ++i) { + message.subs(context->argument(i).toString()); + } + + return engine->newVariant(message.toString().toLocal8Bit()); +} + +QScriptValue SimpleJavaScriptApplet::jsi18ncp(QScriptContext *context, QScriptEngine *engine) +{ + if (context->argumentCount() < 3) { + return context->throwError(i18n("i18n takes at least three arguments")); + } + + KLocalizedString message = ki18ncp(context->argument(0).toString().toLocal8Bit(), + context->argument(1).toString().toLocal8Bit(), + context->argument(2).toString().toLocal8Bit()); + + int numArgs = context->argumentCount(); + for (int i = 3; i < numArgs; ++i) { message.subs(context->argument(i).toString()); } diff --git a/scriptengines/javascript/simplejavascriptapplet.h b/scriptengines/javascript/simplejavascriptapplet.h index f9fd368ae..57afb91d0 100644 --- a/scriptengines/javascript/simplejavascriptapplet.h +++ b/scriptengines/javascript/simplejavascriptapplet.h @@ -63,7 +63,9 @@ private: static QString findSvg(QScriptEngine *engine, const QString &file); static QScriptValue jsi18n(QScriptContext *context, QScriptEngine *engine); + static QScriptValue jsi18nc(QScriptContext *context, QScriptEngine *engine); static QScriptValue jsi18np(QScriptContext *context, QScriptEngine *engine); + static QScriptValue jsi18ncp(QScriptContext *context, QScriptEngine *engine); static QScriptValue dataEngine(QScriptContext *context, QScriptEngine *engine); static QScriptValue service(QScriptContext *context, QScriptEngine *engine); static QScriptValue loadui(QScriptContext *context, QScriptEngine *engine);