Мне нужно поддерживать несколько языков в моем приложении XPages.Большинство документов хранят некоторую форму истории, используя образец: Автор - Глагол - Предмет - Дата, например, «Майкл Майерс купил нож 25/10/1978».
Для моей языковой поддержки я хотел бы настроить переводмеханизм и перевод глагола и предмета.Я думаю о сохранении строк в файле свойств.
Поэтому я хочу сохранить историю, как указано в моем поле истории: Майкл Майерс # купил # @a knife @ 25 октября 1978 года.
Это поле является многозначным полем, поэтому выходные данные будут векторными, но я преобразую его в массив с помощью функции xsnippet $ U.toArray (), чтобы использовать его для отображения в целях отображения.
Я хочу отобразить историю с помощью повторного управления.Вот как это выглядит:
<xp:repeat id="rptHistory" rows="1000" var="obj" indexVar="idx">
<xp:this.value><![CDATA[#{javascript:var $U = {
/*
/* function that always returns an array for the input value
*/
toArray : function(input) {
try {
if (typeof input === "undefined" || input === null) {
//return empty array
return [];
}
if (typeof input === "string") {
//convert string to array (or empty array)
return ( input.length > 0 ? [input] : [] );
}
if (typeof input === "java.util.Vector") {
//Normally we would use toArray here, but this returns an Object array.
//If you try to use that in a doc.replaceItemValue call, it fails.
//sample code:
//var v = getComponent("input1").getValue(); //returns a Vector if the component contains multiple values
//v = $U.toArray(v) //returns an array of Objects
//doc.replaceItemValue("someOtherField", v); //fails
//the solution I used here is to create a JS array and copy the all the Vector's values
var a = [];
var it = input.iterator();
while (it.hasNext() ) {
a.push( it.next() );
}
return a;
}
if (typeof input.toArray !== "undefined") {
return input.toArray();
}
if ( input.constructor === Array ) {
//return input if it's already an array
return input;
}
//return input as an array
return [ input ];
} catch(e) {
print("$U.toArray: " + e.toString());
}
}
}
var coll = compositeData.log;
if(compositeData.sort == "descending"){
var result = $U.toArray(coll);
uidArray = result;
uidArray.reverse();
uidReversed = uidArray;
return uidReversed;
}else{
return coll;
}
}]]></xp:this.value>
<xp:panel tagName="div">
<small>
<xp:text escape="true"
value="#{javascript:obj}" />
</small>
</xp:panel>
</xp:repeat>
В элементе управления вычисляемым текстом мне нужно предоставить перевод.
У кого-нибудь есть догадки, как найти искомые строки?
Я пытался настроить регулярное выражение, но я не уверен, как мне это сделать, например
<xp:text escape="true">
<xp:this.value><![CDATA[#{javascript:var str = obj;
var regexp = new RegExp("^#.*#$");
return regexp.replace(str, "---")}]]></xp:this.value>
</xp:text>