Advance Wayland and KDE package bring-up
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -0,0 +1,225 @@
|
||||
// kdelibs4.js of Japanese KDE translation
|
||||
// Maintained by Chusslove Illich <caslav.ilic@gmx.net>
|
||||
|
||||
// +++ Global dictionary of states.
|
||||
// _states_[state], if defined, is set to some value for the state.
|
||||
var _states_ = {};
|
||||
|
||||
// *** Set global states to values.
|
||||
// : setStates(state1 value1 state2 value2 ...)
|
||||
// Returns empty string.
|
||||
function setStates (/*...*/) {
|
||||
var f = "setStates: ";
|
||||
if (arguments.length % 2 != 0) {
|
||||
throw Error(f + "must have even number of arguments");
|
||||
}
|
||||
for (var i = 0; i < arguments.length; i += 2) {
|
||||
var state = arguments[i];
|
||||
var val = arguments[i + 1];
|
||||
_states_[state] = val;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
// *** Get global state value; empty string if not defined.
|
||||
function getState (state) {
|
||||
if (state in _states_) {
|
||||
return _states_[state];
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
// *** Set properties to the phrase given by current msgstrf.
|
||||
// : setMsgstrProperties(prop1 value1 prop2 value2...)
|
||||
// Returns empty string.
|
||||
function setMsgstrProperties (/*...*/) {
|
||||
var f = "setMsgstrProperties: ";
|
||||
if (arguments.length % 2 != 0) {
|
||||
throw Error(f + "must have even number of arguments");
|
||||
}
|
||||
|
||||
var phrase = Ts.msgstrf();
|
||||
for (var i = 0; i < arguments.length; i += 2) {
|
||||
var property = arguments[i];
|
||||
var val = arguments[i + 1];
|
||||
Ts.setProp(phrase, property, val);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
// *** Get property value of the given phrase; empty string if not defined.
|
||||
function getProperty (phrase, property) {
|
||||
var val = Ts.getProp(phrase, property);
|
||||
if (!val) {
|
||||
return "";
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
// *** Get form of the given phrase.
|
||||
// A "form" is taken to be a special type of property which defaults to the
|
||||
// phrase itself when not defined. Hence, if the requested form has not been
|
||||
// defined, phrase is returned as is.
|
||||
function getFormProperty (phrase, formm) {
|
||||
var val = Ts.getProp(phrase, formm);
|
||||
if (!val) {
|
||||
return phrase;
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
// *** Select one of the strings according to the test value.
|
||||
// : selectByValue(testvalue value1 str1 value2 str2 ... defaultstr)
|
||||
// Select the string to the first value equal to the test value,
|
||||
// or returns default string if there is no match.
|
||||
function selectByValue (/*...*/) {
|
||||
var f = "selectByValue: ";
|
||||
if (arguments.length % 2 != 0) {
|
||||
throw Error(f + "must have even number of arguments.");
|
||||
}
|
||||
if (arguments.length < 2)
|
||||
throw Error(f + "must have at least two arguments.");
|
||||
|
||||
var testval = arguments[0];
|
||||
for (var i = 1; i < arguments.length - 1; i += 2) {
|
||||
var val = arguments[i];
|
||||
var str = arguments[i + 1];
|
||||
if (testval == val) {
|
||||
return str;
|
||||
}
|
||||
}
|
||||
// Return the default choice if no other returned before.
|
||||
return arguments[arguments.length - 1];
|
||||
}
|
||||
|
||||
// *** Return first non-empty string among the arguments, or empty if all empty.
|
||||
// : firstNonEmpty(str1 str2 ...)
|
||||
function firstNonEmpty (/*...*/) {
|
||||
for (var i = 0; i < arguments.length; ++i) {
|
||||
if (arguments[i].length > 0) {
|
||||
return arguments[i];
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
// *** Return the finalized ordinary msgstr.
|
||||
function theMsgstr () {
|
||||
return Ts.msgstrf();
|
||||
}
|
||||
|
||||
// *** If the first character in the phrase is non-Japanese, return
|
||||
// the phrase with space added to the start, otherwise return as is.
|
||||
function spaceOnDemandLeft (phrase) {
|
||||
if (phrase.length == 0) {
|
||||
return phrase;
|
||||
}
|
||||
var firstChar = phrase.charAt(0);
|
||||
if (firstChar != " " && firstChar < "\u2E00") {
|
||||
return " " + phrase;
|
||||
}
|
||||
return phrase;
|
||||
}
|
||||
|
||||
// *** If the last character in the phrase is non-Japanese, return
|
||||
// the phrase with space added to the end, otherwise return as is.
|
||||
function spaceOnDemandRight (phrase) {
|
||||
if (phrase.length == 0) {
|
||||
return phrase;
|
||||
}
|
||||
var lastChar = phrase.charAt(phrase.length - 1);
|
||||
if (lastChar != " " && lastChar < "\u2E00") {
|
||||
return phrase + " ";
|
||||
}
|
||||
return phrase;
|
||||
}
|
||||
|
||||
// *** Combination of spaceOnDemandLeft and spaceOnDemandRight: both first
|
||||
// and last characters are checked, and spaces added where needed.
|
||||
function spaceOnDemandBoth (phrase) {
|
||||
return spaceOnDemandLeft(spaceOnDemandRight(phrase));
|
||||
}
|
||||
|
||||
// *** Strip the accelerator marker, composed of an ASCII alphanumeric
|
||||
// within parenthesis (with or without an ampersand in front).
|
||||
stripAccRx = /\((&|&)?[a-zA-Z0-9]\)/;
|
||||
function stripAccelerator (phrase) {
|
||||
return phrase.replace(stripAccRx, "");
|
||||
}
|
||||
|
||||
// ==> Exports to PO calls
|
||||
Ts.setcall("~set", setStates);
|
||||
Ts.setcall("~get", getState);
|
||||
Ts.setcall("~setProps", setMsgstrProperties);
|
||||
Ts.setcall("~getProp", getProperty);
|
||||
Ts.setcall("~getForm", getFormProperty);
|
||||
Ts.setcall("~case", selectByValue);
|
||||
Ts.setcall("~first", firstNonEmpty);
|
||||
Ts.setcall("~this", theMsgstr);
|
||||
Ts.setcall("~spacerL", spaceOnDemandLeft);
|
||||
Ts.setcall("~spacerR", spaceOnDemandRight);
|
||||
Ts.setcall("~spacerB", spaceOnDemandBoth);
|
||||
Ts.setcall("~stripAccel", stripAccelerator);
|
||||
|
||||
|
||||
// ------------------------------
|
||||
// When verbs such as "Configure" are used as the positive answer in question
|
||||
// dialogs, "設定する", as opposed to "設定しない (Do Not Configure)", would
|
||||
// be more appropriate than "設定". However, it would sound funny if the same
|
||||
// translation is used in other contexts (e.g. @title:window), so we cannot
|
||||
// do it safely.
|
||||
// Instead, attach the proper answers to the message caption/text in the PO,
|
||||
// and then retrieve them in filtering messages for message dialog buttons
|
||||
// in kdelibs4.po (those with context "@action:button filter-...").
|
||||
|
||||
// Dictionary of answers.
|
||||
var _answers_ = {};
|
||||
|
||||
// Set answers as key-value pairs, as many as needed.
|
||||
// The call always signals fallback.
|
||||
function setAnswers (/*...*/)
|
||||
{
|
||||
if (arguments.length % 2 != 0)
|
||||
throw Error("Answers setter given odd number of arguments.");
|
||||
|
||||
for (var i = 0; i < arguments.length; i += 2) {
|
||||
var akey = arguments[i];
|
||||
var answer = arguments[i + 1];
|
||||
_answers_[akey] = answer;
|
||||
}
|
||||
|
||||
throw Ts.fallback();
|
||||
}
|
||||
Ts.setcall("set-answers", setAnswers);
|
||||
// msgid "... Would you like to configure it now?"
|
||||
// msgstr ""
|
||||
// "... 今設定しますか?"
|
||||
// "|/|"
|
||||
// "$[set-answers yes '設定する(&Y)' no '設定しない(&N)']"
|
||||
|
||||
// Get an answer by key.
|
||||
// Signals fallback if the answer with the given key is not set.
|
||||
// Deletes the answer from the dictionary, so that it doesn't happen
|
||||
// that it gets retrieved in a later, unrelated question.
|
||||
function getAnswer (akey)
|
||||
{
|
||||
answer = _answers_[akey];
|
||||
if (!answer) throw Ts.fallback();
|
||||
delete _answers_[akey];
|
||||
return answer;
|
||||
}
|
||||
Ts.setcall("get-answer", getAnswer);
|
||||
// msgctxt "@action:button filter-yes"
|
||||
// msgid "%1"
|
||||
// msgstr "%1|/|$[get-answer yes]"
|
||||
|
||||
// Reset all answers, so that they don't get used for the wrong question.
|
||||
// Always signals fallback.
|
||||
function resetAnswers ()
|
||||
{
|
||||
_answers_ = {};
|
||||
}
|
||||
Ts.setcall("reset-answers", resetAnswers);
|
||||
// msgctxt "@action:button post-filter"
|
||||
// msgid "."
|
||||
// msgstr ".|/|$[reset-answers]"
|
||||
Reference in New Issue
Block a user