Bernhard
04/11/2025, 4:30 PMpackage com.i18next
import com.handlebarsjs.Handlebars
@JsModule("handlebars-i18next")
@JsNonModule
external fun registerI18nHelper(
handlebars: Handlebars,
i18Next: I18Next,
helperName: String? = definedExternally
)
but that produces handlebars_i18next__WEBPACK_IMPORTED_MODULE_12__ is not a function with or without the @JsNonModule annotationBernhard
04/11/2025, 4:30 PMBernhard
04/11/2025, 4:30 PM(function (global, factory) {
if (typeof define === "function" && define.amd) {
define(["exports"], factory);
} else if (typeof exports !== "undefined") {
factory(exports);
} else {
var mod = {
exports: {}
};
factory(mod.exports);
global.handlebarsI18next = mod.exports;
}
})(this, function (_exports) {
"use strict";
Object.defineProperty(_exports, "__esModule", {
value: true
});
_exports["default"] = _default;
// These are options to i18n.t that may take array or object values.
var jsonKeys = ['lngs', 'fallbackLng', 'ns', 'postProcess', 'interpolation']; // Quick polyfill for Object.assign, because IE11 doesn't have that method.
function extend(target) {
for (var _len = arguments.length, sources = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
sources[_key - 1] = arguments[_key];
}
sources.forEach(function (source) {
if (source) for (var key in source) {
target[key] = source[key];
}
});
return target;
}
function _default(Handlebars, i18next) {
var name = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'i18n';
Handlebars.registerHelper(name, function (key, _ref) {
var hash = _ref.hash,
data = _ref.data,
fn = _ref.fn;
var parsed = {};
jsonKeys.forEach(function (key) {
if (hash[key]) {
// Everything in jsonKeys is known not to belong in options.replace.
// Everything in hash ends up in options.replace, so we limit
// interpolation replacement polution by transferring these keys
// to parsed.
parsed[key] = JSON.parse(hash[key]);
delete hash[key];
}
});
var options = extend({}, data.root.i18next, hash, parsed, {
returnObjects: false
});
var replace = options.replace = extend({}, this, options.replace, hash);
delete replace.i18next; // may creep in if this === data.root
if (fn) options.defaultValue = fn(replace);
return new Handlebars.SafeString(i18next.t(key, options));
});
}
;
});
//# sourceMappingURL=handlebars-i18next.js.map
turansky
04/11/2025, 6:16 PM@file:JsModule("handlebars-i18next")
package handlebarsjs.i18next
import com.handlebarsjs.Handlebars
@JsName("default")
external fun registerI18nHelper(
handlebars: Handlebars,
i18Next: I18Next,
helperName: String? = definedExternally
)
Bernhard
04/11/2025, 6:36 PMturansky
04/11/2025, 6:37 PMBernhard
04/11/2025, 6:38 PMturansky
04/11/2025, 6:38 PMtarget = "es2015"
Bernhard
04/11/2025, 6:39 PMBernhard
04/11/2025, 6:39 PMBernhard
04/11/2025, 6:40 PMturansky
04/11/2025, 6:40 PMes2015
- meta propertyBernhard
04/11/2025, 6:40 PMkotlin {
js {
useEsModules()
compilerOptions {
freeCompilerArgs.addAll(
"-opt-in=kotlin.io.encoding.ExperimentalEncodingApi",
"-opt-in=kotlinx.serialization.ExperimentalSerializationApi",
"-opt-in=kotlin.contracts.ExperimentalContracts",
"-opt-in=kotlin.ExperimentalStdlibApi",
"-opt-in=kotlin.js.ExperimentalJsExport",
"-opt-in=kotlin.js.ExperimentalJsStatic",
"-Xwhen-guards",
)
moduleKind = JsModuleKind.MODULE_ES
useEsClasses = true
}
browser {
@OptIn(ExperimentalDistributionDsl::class)
distribution {
outputDirectory = file( "dist")
}
webpackTask {
mainOutputFileName = "main.js"
}
testTask {
useKarma {
useFirefoxHeadless()
}
}
}
binaries.executable() // create a js file
}
sourceSets {
val commonMain by getting {
resources.srcDirs(
tasks.named("processTranslations"),
tasks.named("combineJsonFiles"),
)
dependencies {
implementation(libs.kotlinx.serialization.core)
implementation(libs.kotlinx.serialization.json)
implementation(libs.kotlinx.datetime)
implementation(libs.kotlinx.coroutines)
}
}
val commonTest by getting {
dependencies {
implementation(libs.kotlin.test)
}
}
// define a jsMain module
val jsMain by getting {
dependencies {
implementation(project.dependencies.enforcedPlatform(libs.kotlin.wrappers))
implementation(libs.kotlin.wrappers.js)
implementation(libs.kotlin.plain.objects)
implementation(libs.kotlinx.html)
implementation(libs.kotlinx.coroutines.js)
implementation(libs.jsonschemavalidator.js)
implementation(npm("uuid", "11.1.0"))
implementation(npm("i18next", "24.2.3"))
implementation(npm("i18next-http-backend", "3.0.2"))
implementation(npm("i18next-icu", "2.3.0"))
implementation(npm("intl-messageformat", "10.7.16"))
implementation(npm("handlebars-i18next", "1.0.3"))
api(libs.jquery)
}
}
val jsTest by getting {
dependencies {
implementation(libs.kotlin.test.js)
}
}
}
}
turansky
04/11/2025, 6:41 PMes2015
- meta property = ES classes + ES module + ES generatorsBernhard
04/11/2025, 6:42 PMBernhard
04/11/2025, 6:42 PMturansky
04/11/2025, 6:43 PMkotlin {
js {
compilerOptions {
target = "es2015"
}
}
}
Bernhard
04/11/2025, 6:52 PMBernhard
04/11/2025, 6:54 PMBernhard
04/11/2025, 6:54 PM/* harmony import */ var handlebars_i18next__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! handlebars-i18next */ "../../node_modules/handlebars-i18next/handlebars-i18next.js");
Bernhard
04/11/2025, 6:54 PMhandlebars_i18next__WEBPACK_IMPORTED_MODULE_0__(tmp$ret$8, i18next__WEBPACK_IMPORTED_MODULE_10__["default"], 't');
turansky
04/11/2025, 6:56 PM@file:JsModule("handlebars-i18next")
package handlebarsjs.i18next
import com.handlebarsjs.Handlebars
@JsName("default")
external val registerI18nHelper: Any
+
fun main() {
console.log(registerI18nHelper)
}
Please check following.
What you have in console?Bernhard
04/11/2025, 6:59 PMBernhard
04/11/2025, 6:59 PMBernhard
04/11/2025, 6:59 PMturansky
04/11/2025, 6:59 PMBernhard
04/11/2025, 7:00 PMturansky
04/11/2025, 7:00 PMBernhard
04/11/2025, 7:01 PMturansky
04/11/2025, 7:03 PMpackage handlebarsjs.i18next
import com.handlebarsjs.Handlebars
@JsModule("handlebars-i18next")
external val registerI18nHelper: Any
+
fun main() {
console.log(registerI18nHelper)
}
Bernhard
04/11/2025, 7:04 PMBernhard
04/11/2025, 7:07 PMBernhard
04/11/2025, 7:07 PMpackage handlebarsjs.i18next
@JsModule("handlebars-i18next")
external val registerI18nHelper: dynamic
Bernhard
04/11/2025, 7:07 PMregisterI18nHelper(window.Handlebars, i18next)
Bernhard
04/11/2025, 7:08 PMBernhard
04/11/2025, 7:08 PMBernhard
04/11/2025, 7:09 PMBernhard
04/11/2025, 7:12 PMturansky
04/11/2025, 7:23 PMturansky
04/11/2025, 7:23 PM@file:JsModule("handlebars-i18next")
package handlebarsjs.i18next
import com.handlebarsjs.Handlebars
@JsName("default")
external fun registerI18nHelper(
handlebars: Handlebars,
i18Next: I18Next,
helperName: String? = definedExternally
)
is what you needturansky
04/11/2025, 7:23 PMturansky
04/11/2025, 7:24 PMBernhard
04/11/2025, 7:24 PMBernhard
04/11/2025, 7:57 PMturansky
04/11/2025, 8:20 PMturansky
04/11/2025, 8:38 PMpackage handlebarsjs.i18next
import com.handlebarsjs.Handlebars
@JsModule("handlebars-i18next")
external object registerI18nHelper {
@JsName("default")
operator fun invoke(
handlebars: Handlebars,
i18Next: I18Next,
helperName: String? = definedExternally,
)
)
turansky
04/11/2025, 8:39 PMturansky
04/12/2025, 8:44 PMBernhard
04/12/2025, 9:17 PMBernhard
04/12/2025, 9:18 PMBernhard
04/18/2025, 8:09 PMturansky
04/19/2025, 8:44 AMturansky
04/19/2025, 8:44 AMBernhard
04/19/2025, 8:45 AMBernhard
04/19/2025, 8:45 AMBernhard
04/19/2025, 8:46 AMBernhard
04/19/2025, 8:46 AMBernhard
04/19/2025, 8:46 AMturansky
04/19/2025, 8:46 AMBernhard
04/19/2025, 8:46 AMturansky
04/19/2025, 8:47 AMBernhard
04/19/2025, 8:47 AMBernhard
04/19/2025, 8:47 AMBernhard
04/19/2025, 8:48 AM