mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-08-07 14:08:29 -04:00
qs: integrate with dank-qml-common
This commit is contained in:
+73
-12
@@ -25,6 +25,7 @@ Singleton {
|
||||
readonly property bool isRtl: _rtlLanguages.includes(_lang)
|
||||
|
||||
readonly property url translationsFolder: Qt.resolvedUrl("../translations/poexports")
|
||||
readonly property url commonTranslationsFolder: Qt.resolvedUrl("../DankCommon/translations/poexports")
|
||||
|
||||
readonly property alias folder: dir.folder
|
||||
property var presentLocales: ({
|
||||
@@ -32,8 +33,11 @@ Singleton {
|
||||
})
|
||||
property var translations: ({})
|
||||
property bool translationsLoaded: false
|
||||
property var commonTranslations: ({})
|
||||
property bool commonTranslationsLoaded: false
|
||||
|
||||
property url _selectedPath: ""
|
||||
property url _commonSelectedPath: ""
|
||||
|
||||
FolderListModel {
|
||||
id: dir
|
||||
@@ -48,6 +52,18 @@ Singleton {
|
||||
}
|
||||
}
|
||||
|
||||
FolderListModel {
|
||||
id: commonDir
|
||||
folder: root.commonTranslationsFolder
|
||||
nameFilters: ["*.json"]
|
||||
showDirs: false
|
||||
showDotAndDotDot: false
|
||||
|
||||
onStatusChanged: if (status === FolderListModel.Ready) {
|
||||
root._pickCommonTranslation();
|
||||
}
|
||||
}
|
||||
|
||||
FileView {
|
||||
id: translationLoader
|
||||
path: root._selectedPath
|
||||
@@ -69,6 +85,22 @@ Singleton {
|
||||
}
|
||||
}
|
||||
|
||||
FileView {
|
||||
id: commonTranslationLoader
|
||||
path: root._commonSelectedPath
|
||||
printErrors: false
|
||||
|
||||
onLoaded: {
|
||||
try {
|
||||
root.commonTranslations = JSON.parse(text());
|
||||
root.commonTranslationsLoaded = true;
|
||||
log.info(`I18n: Loaded DankCommon translations (${Object.keys(root.commonTranslations).length} contexts)`);
|
||||
} catch (e) {
|
||||
log.warn("I18n: Error parsing DankCommon translations:", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function locale() {
|
||||
if (SessionData.timeLocale)
|
||||
return Qt.locale(SessionData.timeLocale);
|
||||
@@ -117,29 +149,58 @@ Singleton {
|
||||
log.warn("Falling back to built-in English strings");
|
||||
}
|
||||
|
||||
function _pickCommonTranslation() {
|
||||
const present = {};
|
||||
for (let i = 0; i < commonDir.count; i++) {
|
||||
const name = commonDir.get(i, "fileName");
|
||||
if (name && name.endsWith(".json"))
|
||||
present[name.slice(0, -5)] = true;
|
||||
}
|
||||
for (let i = 0; i < _candidates.length; i++) {
|
||||
if (!present[_candidates[i]])
|
||||
continue;
|
||||
_commonSelectedPath = commonTranslationsFolder + "/" + _candidates[i] + ".json";
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
function _lookup(table, term, context) {
|
||||
if (!table)
|
||||
return "";
|
||||
if (context && table[context] && table[context][term])
|
||||
return table[context][term];
|
||||
if (table[term] && table[term][term])
|
||||
return table[term][term];
|
||||
for (const c in table) {
|
||||
if (table[c] && table[c][term])
|
||||
return table[c][term];
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
// isRealContext is consumed by translations/extract_translations.py only:
|
||||
// pass a literal `true` (same line) to give (term, context) its own POEditor
|
||||
// translation slot. Lookup ignores it -- a real context exists as a bucket
|
||||
// in the export, a comment-only context does not.
|
||||
function tr(term, context, isRealContext) {
|
||||
if (!translationsLoaded || !translations)
|
||||
return term;
|
||||
if (context && translations[context] && translations[context][term])
|
||||
return translations[context][term];
|
||||
if (translations[term] && translations[term][term])
|
||||
return translations[term][term];
|
||||
for (const c in translations) {
|
||||
if (translations[c] && translations[c][term])
|
||||
return translations[c][term];
|
||||
if (translationsLoaded) {
|
||||
const hit = _lookup(translations, term, context);
|
||||
if (hit)
|
||||
return hit;
|
||||
}
|
||||
if (commonTranslationsLoaded) {
|
||||
const hit = _lookup(commonTranslations, term, context);
|
||||
if (hit)
|
||||
return hit;
|
||||
}
|
||||
return term;
|
||||
}
|
||||
|
||||
function trContext(context, term) {
|
||||
if (!translationsLoaded || !translations)
|
||||
return term;
|
||||
if (translations[context] && translations[context][term])
|
||||
if (translationsLoaded && translations[context] && translations[context][term])
|
||||
return translations[context][term];
|
||||
if (commonTranslationsLoaded && commonTranslations[context] && commonTranslations[context][term])
|
||||
return commonTranslations[context][term];
|
||||
return term;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user