Modified: ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/stats/ServerHitBin.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/stats/ServerHitBin.java?rev=1621696&r1=1621695&r2=1621696&view=diff ============================================================================== --- ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/stats/ServerHitBin.java (original) +++ ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/stats/ServerHitBin.java Mon Sep 1 07:29:23 2014 @@ -19,14 +19,13 @@ package org.ofbiz.webapp.stats; import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.Deque; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedDeque; +import java.util.concurrent.ConcurrentMap; import javax.servlet.http.HttpServletRequest; -import javolution.util.FastList; -import javolution.util.FastMap; - import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.UtilHttp; import org.ofbiz.base.util.UtilMisc; @@ -58,18 +57,18 @@ public class ServerHitBin { private static final String[] typeIds = {"", "REQUEST", "EVENT", "VIEW", "ENTITY", "SERVICE"}; // these Maps contain Lists of ServerHitBin objects by id, the most recent is first in the list - public static Map<String, List<ServerHitBin>> requestHistory = FastMap.newInstance(); - public static Map<String, List<ServerHitBin>> eventHistory = FastMap.newInstance(); - public static Map<String, List<ServerHitBin>> viewHistory = FastMap.newInstance(); - public static Map<String, List<ServerHitBin>> entityHistory = FastMap.newInstance(); - public static Map<String, List<ServerHitBin>> serviceHistory = FastMap.newInstance(); + public static final ConcurrentMap<String, Deque<ServerHitBin>> requestHistory = new ConcurrentHashMap<String, Deque<ServerHitBin>>(); + public static final ConcurrentMap<String, Deque<ServerHitBin>> eventHistory = new ConcurrentHashMap<String, Deque<ServerHitBin>>(); + public static final ConcurrentMap<String, Deque<ServerHitBin>> viewHistory = new ConcurrentHashMap<String, Deque<ServerHitBin>>(); + public static final ConcurrentMap<String, Deque<ServerHitBin>> entityHistory = new ConcurrentHashMap<String, Deque<ServerHitBin>>(); + public static final ConcurrentMap<String, Deque<ServerHitBin>> serviceHistory = new ConcurrentHashMap<String, Deque<ServerHitBin>>(); // these Maps contain ServerHitBin objects by id - public static Map<String, ServerHitBin> requestSinceStarted = FastMap.newInstance(); - public static Map<String, ServerHitBin> eventSinceStarted = FastMap.newInstance(); - public static Map<String, ServerHitBin> viewSinceStarted = FastMap.newInstance(); - public static Map<String, ServerHitBin> entitySinceStarted = FastMap.newInstance(); - public static Map<String, ServerHitBin> serviceSinceStarted = FastMap.newInstance(); + public static final ConcurrentMap<String, ServerHitBin> requestSinceStarted = new ConcurrentHashMap<String, ServerHitBin>(); + public static final ConcurrentMap<String, ServerHitBin> eventSinceStarted = new ConcurrentHashMap<String, ServerHitBin>(); + public static final ConcurrentMap<String, ServerHitBin> viewSinceStarted = new ConcurrentHashMap<String, ServerHitBin>(); + public static final ConcurrentMap<String, ServerHitBin> entitySinceStarted = new ConcurrentHashMap<String, ServerHitBin>(); + public static final ConcurrentMap<String, ServerHitBin> serviceSinceStarted = new ConcurrentHashMap<String, ServerHitBin>(); public static void countRequest(String id, HttpServletRequest request, long startTime, long runningTime, GenericValue userLogin) { countHit(id, REQUEST, request, startTime, runningTime, userLogin); @@ -105,6 +104,35 @@ public class ServerHitBin { } } + private static long getNewBinLength() { + long binLength = (long) UtilProperties.getPropertyNumber("serverstats", "stats.bin.length.millis"); + + // if no or 0 binLength specified, set to 30 minutes + if (binLength <= 0) binLength = 1800000; + // if binLength is more than an hour, set it to one hour + if (binLength > 3600000) binLength = 3600000; + return binLength; + } + + private static long getEvenStartingTime(long binLength) { + // binLengths should be a divisable evenly into 1 hour + long curTime = System.currentTimeMillis(); + + // find the first previous millis that are even on the hour + Calendar cal = Calendar.getInstance(); + + cal.setTime(new Date(curTime)); + cal.set(Calendar.MINUTE, 0); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + + while (cal.getTime().getTime() < (curTime - binLength)) { + cal.add(Calendar.MILLISECOND, (int) binLength); + } + + return cal.getTime().getTime(); + } + private static void countHit(String baseId, int type, HttpServletRequest request, long startTime, long runningTime, GenericValue userLogin, boolean isOriginal) { Delegator delegator = (Delegator) request.getAttribute("delegator"); if (delegator == null) { @@ -118,7 +146,7 @@ public class ServerHitBin { String id = makeIdTenantAware(baseId, delegator); ServerHitBin bin = null; - List<ServerHitBin> binList = null; + Deque<ServerHitBin> binList = null; switch (type) { case REQUEST: @@ -143,76 +171,77 @@ public class ServerHitBin { } if (binList == null) { - synchronized (ServerHitBin.class) { - switch (type) { - case REQUEST: - binList = requestHistory.get(id); - break; - - case EVENT: - binList = eventHistory.get(id); - break; - - case VIEW: - binList = viewHistory.get(id); - break; - - case ENTITY: - binList = entityHistory.get(id); - break; - - case SERVICE: - binList = serviceHistory.get(id); - break; - } - if (binList == null) { - binList = FastList.newInstance(); - switch (type) { - case REQUEST: - requestHistory.put(id, binList); - break; - - case EVENT: - eventHistory.put(id, binList); - break; - - case VIEW: - viewHistory.put(id, binList); - break; - - case ENTITY: - entityHistory.put(id, binList); - break; - - case SERVICE: - serviceHistory.put(id, binList); - break; - } - } + binList = new ConcurrentLinkedDeque<ServerHitBin>(); + Deque<ServerHitBin> listFromMap = null; + switch (type) { + case REQUEST: + listFromMap = requestHistory.putIfAbsent(id, binList); + break; + + case EVENT: + listFromMap = eventHistory.putIfAbsent(id, binList); + break; + + case VIEW: + listFromMap = viewHistory.putIfAbsent(id, binList); + break; + + case ENTITY: + listFromMap = entityHistory.putIfAbsent(id, binList); + break; + + case SERVICE: + listFromMap = serviceHistory.putIfAbsent(id, binList); + break; } + binList = listFromMap != null ? listFromMap : binList; } - if (binList.size() > 0) { - bin = binList.get(0); - } - if (bin == null) { - synchronized (ServerHitBin.class) { - if (binList.size() > 0) { - bin = binList.get(0); - } - if (bin == null) { - bin = new ServerHitBin(id, type, true, delegator); - if (binList.size() > 0) { - binList.add(0, bin); - } else { - binList.add(bin); + do { + bin = binList.peek(); + if (bin == null) { + binList.addFirst(new ServerHitBin(id, type, true, delegator)); + } + } while (bin == null); + + long toTime = startTime + runningTime; + // advance the bin + // first check to see if the bin has expired, if so save and recycle it + while (bin.limitLength && toTime > bin.endTime) { + // the first in the list will be this object, remove and copy it, + // put the copy at the first of the list, then put this object back on + if (bin.getNumberHits() > 0) { + // persist each bin when time ends if option turned on + if (UtilProperties.propertyValueEqualsIgnoreCase("serverstats", "stats.persist." + ServerHitBin.typeIds[type] + ".bin", "true")) { + GenericValue serverHitBin = delegator.makeValue("ServerHitBin"); + serverHitBin.set("contentId", bin.id); + serverHitBin.set("hitTypeId", ServerHitBin.typeIds[bin.type]); + serverHitBin.set("binStartDateTime", new java.sql.Timestamp(bin.startTime)); + serverHitBin.set("binEndDateTime", new java.sql.Timestamp(bin.endTime)); + serverHitBin.set("numberHits", Long.valueOf(bin.getNumberHits())); + serverHitBin.set("totalTimeMillis", Long.valueOf(bin.getTotalRunningTime())); + serverHitBin.set("minTimeMillis", Long.valueOf(bin.getMinTime())); + serverHitBin.set("maxTimeMillis", Long.valueOf(bin.getMaxTime())); + // get localhost ip address and hostname to store + if (VisitHandler.address != null) { + serverHitBin.set("serverIpAddress", VisitHandler.address.getHostAddress()); + serverHitBin.set("serverHostName", VisitHandler.address.getHostName()); + } + try { + delegator.createSetNextSeqId(serverHitBin); + } catch (GenericEntityException e) { + Debug.logError(e, "Could not save ServerHitBin:", module); } } + } else { + binList.pollFirst(); } + bin = new ServerHitBin(bin, bin.endTime + 1); + binList.addFirst(bin); } - bin.addHit(startTime, runningTime); - if (isOriginal && !id.startsWith("GLOBAL")) { + bin.addHit(runningTime); + if (isOriginal) { try { bin.saveHit(request, startTime, runningTime, userLogin); } catch (GenericEntityException e) { @@ -221,25 +250,26 @@ public class ServerHitBin { } // count since start global and per id hits - if (!id.startsWith("GLOBAL")) - countHitSinceStart(id, type, startTime, runningTime, isOriginal, delegator); + if (!id.startsWith("GLOBAL")) { + countHitSinceStart(id, type, runningTime, delegator); + if (isOriginal) { + countHitSinceStart(makeIdTenantAware("GLOBAL", delegator), type, runningTime, delegator); + } + } // also count hits up the hierarchy if the id contains a '.' if (id.indexOf('.') > 0) { countHit(id.substring(0, id.lastIndexOf('.')), type, request, startTime, runningTime, userLogin, false); } - if (isOriginal && !id.startsWith("GLOBAL")) - countHit("GLOBAL", type, request, startTime, runningTime, userLogin, true); + if (isOriginal) { + countHit("GLOBAL", type, request, startTime, runningTime, userLogin, false); + } } - private static void countHitSinceStart(String baseId, int type, long startTime, long runningTime, boolean isOriginal, Delegator delegator) { - - String id = makeIdTenantAware(baseId, delegator); - + private static void countHitSinceStart(String id, int type, long runningTime, Delegator delegator) { ServerHitBin bin = null; - // save in global, and try to get bin by id switch (type) { case REQUEST: bin = requestSinceStarted.get(id); @@ -263,60 +293,32 @@ public class ServerHitBin { } if (bin == null) { - synchronized (ServerHitBin.class) { - switch (type) { - case REQUEST: - bin = requestSinceStarted.get(id); - break; - - case EVENT: - bin = eventSinceStarted.get(id); - break; - - case VIEW: - bin = viewSinceStarted.get(id); - break; - - case ENTITY: - bin = entitySinceStarted.get(id); - break; - - case SERVICE: - bin = serviceSinceStarted.get(id); - break; - } + bin = new ServerHitBin(id, type, false, delegator); + ServerHitBin binFromMap = null; + switch (type) { + case REQUEST: + binFromMap = requestSinceStarted.putIfAbsent(id, bin); + break; - if (bin == null) { - bin = new ServerHitBin(id, type, false, delegator); - switch (type) { - case REQUEST: - requestSinceStarted.put(id, bin); - break; - - case EVENT: - eventSinceStarted.put(id, bin); - break; - - case VIEW: - viewSinceStarted.put(id, bin); - break; - - case ENTITY: - entitySinceStarted.put(id, bin); - break; - - case SERVICE: - serviceSinceStarted.put(id, bin); - break; - } - } - } - } + case EVENT: + binFromMap = eventSinceStarted.putIfAbsent(id, bin); + break; - bin.addHit(startTime, runningTime); + case VIEW: + binFromMap = viewSinceStarted.putIfAbsent(id, bin); + break; + + case ENTITY: + binFromMap = entitySinceStarted.putIfAbsent(id, bin); + break; - if (isOriginal) - countHitSinceStart("GLOBAL", type, startTime, runningTime, false, delegator); + case SERVICE: + binFromMap = serviceSinceStarted.putIfAbsent(id, bin); + break; + } + bin = binFromMap != null ? binFromMap : bin; + } + bin.addHit(runningTime); } private final Delegator delegator; @@ -324,8 +326,9 @@ public class ServerHitBin { private final int type; private final boolean limitLength; private final long binLength; - private long startTime; - private long endTime; + private final long startTime; + private final long endTime; + private long numberHits; private long totalRunningTime; private long minTime; @@ -337,21 +340,37 @@ public class ServerHitBin { this.limitLength = limitLength; this.delegator = delegator; this.binLength = getNewBinLength(); - reset(getEvenStartingTime()); + this.startTime = getEvenStartingTime(this.binLength); + if (this.limitLength) { + // subtract 1 millisecond to keep bin starting times even + this.endTime = this.startTime + this.binLength - 1; + } else { + this.endTime = 0; + } + this.numberHits = 0; + this.totalRunningTime = 0; + this.minTime = Long.MAX_VALUE; + this.maxTime = 0; } - private ServerHitBin(ServerHitBin oldBin) { + private ServerHitBin(ServerHitBin oldBin, long startTime) { this.id = oldBin.id; this.type = oldBin.type; this.limitLength = oldBin.limitLength; this.delegator = oldBin.delegator; this.binLength = oldBin.binLength; - this.startTime = oldBin.startTime; - this.endTime = oldBin.endTime; - this.numberHits = oldBin.numberHits; - this.totalRunningTime = oldBin.totalRunningTime; - this.minTime = oldBin.minTime; - this.maxTime = oldBin.maxTime; + + this.startTime = startTime; + if (limitLength) { + // subtract 1 millisecond to keep bin starting times even + this.endTime = this.startTime + this.binLength - 1; + } else { + this.endTime = 0; + } + this.numberHits = 0; + this.totalRunningTime = 0; + this.minTime = Long.MAX_VALUE; + this.maxTime = 0; } public Delegator getDelegator() { @@ -397,77 +416,44 @@ public class ServerHitBin { return (this.getBinLength()) / 60000.0; } - public long getNumberHits() { + public synchronized long getNumberHits() { return this.numberHits; } - public double getMinTimeSeconds() { - return (this.minTime) / 1000.0; + public synchronized long getMinTime() { + return this.minTime; } - public double getMaxTimeSeconds() { - return (this.maxTime) / 1000.0; + public synchronized long getMaxTime() { + return this.maxTime; } - public double getAvgTime() { - return ((double) this.totalRunningTime) / ((double) this.numberHits); + public synchronized long getTotalRunningTime() { + return this.totalRunningTime; } - public double getAvgTimeSeconds() { - return this.getAvgTime() / 1000.0; + public double getMinTimeSeconds() { + return (this.getMinTime()) / 1000.0; } - /** return the hits per minute using the entire length of the bin as returned by getBinLengthMinutes() */ - public double getHitsPerMinute() { - return (this.numberHits) / this.getBinLengthMinutes(); + public double getMaxTimeSeconds() { + return (this.getMaxTime()) / 1000.0; } - private long getNewBinLength() { - long binLength = (long) UtilProperties.getPropertyNumber("serverstats", "stats.bin.length.millis"); - - // if no or 0 binLength specified, set to 30 minutes - if (binLength <= 0) binLength = 1800000; - // if binLength is more than an hour, set it to one hour - if (binLength > 3600000) binLength = 3600000; - return binLength; + public synchronized double getAvgTime() { + return ((double) this.getTotalRunningTime()) / ((double) this.getNumberHits()); } - private long getEvenStartingTime() { - // binLengths should be a divisable evenly into 1 hour - long curTime = System.currentTimeMillis(); - - // find the first previous millis that are even on the hour - Calendar cal = Calendar.getInstance(); - - cal.setTime(new Date(curTime)); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - cal.set(Calendar.MILLISECOND, 0); - - while (cal.getTime().getTime() < (curTime - this.binLength)) { - cal.add(Calendar.MILLISECOND, (int) this.binLength); - } - - return cal.getTime().getTime(); + public double getAvgTimeSeconds() { + return this.getAvgTime() / 1000.0; } - private void reset(long startTime) { - this.startTime = startTime; - if (limitLength) { - // subtract 1 millisecond to keep bin starting times even - this.endTime = startTime + this.binLength - 1; - } else { - this.endTime = 0; - } - this.numberHits = 0; - this.totalRunningTime = 0; - this.minTime = Long.MAX_VALUE; - this.maxTime = 0; + /** return the hits per minute using the entire length of the bin as returned by getBinLengthMinutes() */ + public double getHitsPerMinute() { + return this.getNumberHits() / this.getBinLengthMinutes(); } - private synchronized void addHit(long startTime, long runningTime) { - advanceBin(startTime + runningTime); - + private synchronized void addHit(long runningTime) { this.numberHits++; this.totalRunningTime += runningTime; if (runningTime < this.minTime) @@ -476,67 +462,6 @@ public class ServerHitBin { this.maxTime = runningTime; } - private synchronized void advanceBin(long toTime) { - // first check to see if this bin has expired, if so save and recycle it - while (limitLength && toTime > this.endTime) { - List<ServerHitBin> binList = null; - - switch (type) { - case REQUEST: - binList = requestHistory.get(id); - break; - - case EVENT: - binList = eventHistory.get(id); - break; - - case VIEW: - binList = viewHistory.get(id); - break; - - case ENTITY: - binList = entityHistory.get(id); - break; - - case SERVICE: - binList = serviceHistory.get(id); - break; - } - - // the first in the list will be this object, remove and copy it, - // put the copy at the first of the list, then put this object back on - binList.remove(0); - if (this.numberHits > 0) { - binList.add(0, new ServerHitBin(this)); - - // persist each bin when time ends if option turned on - if (UtilProperties.propertyValueEqualsIgnoreCase("serverstats", "stats.persist." + ServerHitBin.typeIds[type] + ".bin", "true")) { - GenericValue serverHitBin = delegator.makeValue("ServerHitBin"); - serverHitBin.set("contentId", this.id); - serverHitBin.set("hitTypeId", ServerHitBin.typeIds[this.type]); - serverHitBin.set("binStartDateTime", new java.sql.Timestamp(this.startTime)); - serverHitBin.set("binEndDateTime", new java.sql.Timestamp(this.endTime)); - serverHitBin.set("numberHits", Long.valueOf(this.numberHits)); - serverHitBin.set("totalTimeMillis", Long.valueOf(this.totalRunningTime)); - serverHitBin.set("minTimeMillis", Long.valueOf(this.minTime)); - serverHitBin.set("maxTimeMillis", Long.valueOf(this.maxTime)); - // get localhost ip address and hostname to store - if (VisitHandler.address != null) { - serverHitBin.set("serverIpAddress", VisitHandler.address.getHostAddress()); - serverHitBin.set("serverHostName", VisitHandler.address.getHostName()); - } - try { - delegator.createSetNextSeqId(serverHitBin); - } catch (GenericEntityException e) { - Debug.logError(e, "Could not save ServerHitBin:", module); - } - } - } - this.reset(this.endTime + 1); - binList.add(0, this); - } - } - private void saveHit(HttpServletRequest request, long startTime, long runningTime, GenericValue userLogin) throws GenericEntityException { // persist record of hit in ServerHit entity if option turned on if (UtilProperties.propertyValueEqualsIgnoreCase("serverstats", "stats.persist." + ServerHitBin.typeIds[type] + ".hit", "true")) { @@ -572,26 +497,6 @@ public class ServerHitBin { Debug.logInfo("Visit delegatorName=" + visit.getDelegator().getDelegatorName() + ", ServerHitBin delegatorName=" + this.delegator.getDelegatorName(), module); - /* this isn't needed, the problem was better solved elsewhere, and without adding another query; leaving it here because it might be useful for something in the future - * else { - try { - // see if the error was caused by a bad visitId, and if so create a new visit and try again - GenericValue freshVisit = delegator.findOne("Visit", false, "visitId", visitId); - if (freshVisit == null) { - Debug.logInfo("Visit with ID [" + visitId + "] does not exist in the database, removing from session and making a new one", module); - // something happened, have a bad visit in the session so remove it and try again - request.getSession().removeAttribute("visit"); - visitId = VisitHandler.getVisitId(request.getSession()); - Debug.logInfo("After making new Visit the ID is [" + visitId + "]", module); - } - } catch (GenericEntityException e) { - // this is an error on the retry and not part of the main flow, so log it and let it go - Debug.logWarning(e, "Error retrying ServerHit: " + e.toString(), module); - } - - } - */ - GenericValue serverHit = delegator.makeValue("ServerHit"); serverHit.set("visitId", visitId); Modified: ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webtools/config/WebtoolsErrorUiLabels.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webtools/config/WebtoolsErrorUiLabels.xml?rev=1621696&r1=1621695&r2=1621696&view=diff ============================================================================== --- ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webtools/config/WebtoolsErrorUiLabels.xml (original) +++ ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webtools/config/WebtoolsErrorUiLabels.xml Mon Sep 1 07:29:23 2014 @@ -74,7 +74,7 @@ <value xml:lang="ro">Creatie ${entityName} falita pentru entitatea</value> <value xml:lang="th">à¸à¸²à¸£à¸ªà¸£à¹à¸²à¸à¸à¸à¸${entityName} ลà¹à¸¡à¹à¸«à¸¥à¸§à¸ªà¸³à¸«à¸£à¸±à¸à¹à¸à¸à¸à¸´à¸à¸µ</value> <value xml:lang="zh">æ æ³ä¸ºå®ä½å建${entityName}</value> - <value xml:lang="zh_TW">ç¡æ³çºå¯¦é«åµå»º${entityName}</value> + <value xml:lang="zh_TW">ç¡æ³çºå¯¦é«æ°å»º${entityName}</value> </property> <property key="genericWebEvent.delegator_object_not_found"> <value xml:lang="en">The delegator object was not found in the request, please check the control servlet init</value> @@ -258,7 +258,7 @@ <value xml:lang="ro">Toate cache-urile au fost curatate</value> <value xml:lang="th">à¹à¸à¸¥à¸µà¸¢à¸£à¹à¸«à¸à¹à¸§à¸¢à¸à¸§à¸²à¸¡à¸à¸³à¸à¸±à¹à¸à¸«à¸¡à¸</value> <value xml:lang="zh">å·²æ¸ é¤å ¨é¨ç¼å</value> - <value xml:lang="zh_TW">å·²æ¸ é¤å ¨é¨ç·©å</value> + <value xml:lang="zh_TW">å·²æ¸ é¤å ¨é¨å¿«å</value> </property> <property key="utilCache.clearAllExpiredElements"> <value xml:lang="en">Cleared all expired elements from all caches</value> @@ -269,7 +269,7 @@ <value xml:lang="ro">Au fost Curatate toate elementele expirate din toate cach-urile</value> <value xml:lang="th">à¹à¸à¸¥à¸µà¸¢à¸£à¹à¸ªà¸´à¹à¸à¹à¸¥à¹à¸à¸à¹à¸à¸¢à¸«à¸¡à¸à¸à¸²à¸¢à¸¸à¸à¸±à¹à¸à¸«à¸¡à¸à¸à¸²à¸à¸«à¸à¹à¸§à¸¢à¸à¸§à¸²à¸¡à¸à¸³à¸à¸±à¹à¸à¸«à¸¡à¸</value> <value xml:lang="zh">ä»å ¨é¨ç¼å䏿¸ é¤äºå ¨é¨è¿æå ç´ </value> - <value xml:lang="zh_TW">å¾å ¨é¨ç·©å䏿¸ é¤äºå ¨é¨éæå ç´ </value> + <value xml:lang="zh_TW">å¾å ¨é¨å¿«å䏿¸ é¤äºå ¨é¨éæå ç´ </value> </property> <property key="utilCache.clearCache"> <value xml:lang="en">Cleared cache with name: ${name}</value> @@ -280,7 +280,7 @@ <value xml:lang="ro">Curatire cache cu nume: ${name}</value> <value xml:lang="th">à¹à¸à¸¥à¸µà¸¢à¸£à¹à¸«à¸à¹à¸§à¸¢à¸à¸§à¸²à¸¡à¸à¸³à¸à¹à¸§à¸¢à¸à¸·à¹à¸: ${name}</value> <value xml:lang="zh">å·²æ¸ é¤ç¼åï¼${name}</value> - <value xml:lang="zh_TW">å·²æ¸ é¤ç·©åï¼${name}</value> + <value xml:lang="zh_TW">å·²æ¸ é¤å¿«åï¼${name}</value> </property> <property key="utilCache.couldNotClearCache"> <value xml:lang="en">Could not clear cache, no name specified</value> @@ -291,7 +291,7 @@ <value xml:lang="ro">Nu este posibila curatarea cach-ului, nici-un nume specificat</value> <value xml:lang="th">à¹à¸¡à¹à¸ªà¸²à¸¡à¸²à¸£à¸à¹à¸à¸¥à¸µà¸¢à¸£à¹à¸«à¸à¹à¸§à¸¢à¸à¸§à¸²à¸¡à¸à¸³ , à¹à¸¡à¹à¸£à¸°à¸à¸¸à¸à¸·à¹à¸</value> <value xml:lang="zh">æ æ³æ¸ é¤ç¼åï¼æ²¡ææå®åç§°</value> - <value xml:lang="zh_TW">ç¡æ³æ¸ é¤ç·©åï¼æ²ææå®å稱</value> + <value xml:lang="zh_TW">ç¡æ³æ¸ é¤å¿«åï¼æ²ææå®å稱</value> </property> <property key="utilCache.couldNotClearCacheNotFoundName"> <value xml:lang="en">Could not clear cache, cache not found with name: ${name}</value> @@ -302,7 +302,7 @@ <value xml:lang="ro">Nu este posibila curatirea cache,nu gaseste nume cache: ${name}</value> <value xml:lang="th">à¹à¸¡à¹à¸ªà¸²à¸¡à¸²à¸£à¸à¹à¸à¸¥à¸µà¸¢à¸£à¹à¸«à¸à¹à¸§à¸¢à¸à¸§à¸²à¸¡à¸à¸³ , à¹à¸¡à¹à¸à¸à¸«à¸à¹à¸§à¸¢à¸à¸§à¸²à¸¡à¸à¸³à¸à¹à¸§à¸¢à¸à¸·à¹à¸: ${name}</value> <value xml:lang="zh">æ æ³æ¸ é¤ç¼åï¼æ²¡ææ¾å°ç¼åï¼${name}</value> - <value xml:lang="zh_TW">ç¡æ³æ¸ é¤ç·©åï¼æ²ææ¾å°ç·©åï¼${name}</value> + <value xml:lang="zh_TW">ç¡æ³æ¸ é¤å¿«åï¼æ²ææ¾å°å¿«åï¼${name}</value> </property> <property key="utilCache.couldNotRemoveElement"> <value xml:lang="en">Could not remove cache element, cache not found with name: ${name}</value> @@ -313,7 +313,7 @@ <value xml:lang="ro">Nu este posibila stergerea elementului din chash, nu gaseste chash cu nume: ${name}</value> <value xml:lang="th">à¹à¸¡à¹à¸ªà¸²à¸¡à¸²à¸£à¸à¸¢à¹à¸²à¸¢à¸à¸à¸à¹à¸à¸£à¸°à¸à¸à¸à¸à¸²à¸à¸«à¸à¹à¸§à¸¢à¸à¸§à¸²à¸¡à¸à¸³, à¹à¸¡à¹à¸à¸à¸«à¸à¹à¸§à¸¢à¸à¸§à¸²à¸¡à¸à¸³à¸à¹à¸§à¸¢à¸à¸·à¹à¸: ${name}</value> <value xml:lang="zh">æ æ³å é¤ç¼åå ç´ ï¼æ²¡ææ¾å°å称为 ${name} çç¼å</value> - <value xml:lang="zh_TW">ç¡æ³åªé¤ç·©åå ç´ ï¼æ²ææ¾å°åç¨±çº ${name} çç·©å</value> + <value xml:lang="zh_TW">ç¡æ³åªé¤å¿«åå ç´ ï¼æ²ææ¾å°åç¨±çº ${name} çå¿«å</value> </property> <property key="utilCache.couldNotRemoveElementNumber"> <value xml:lang="en">Could not remove cache element, element not found with cache name: ${name} , element number: ${numString}</value> @@ -324,7 +324,7 @@ <value xml:lang="ro">Nu este possibila stergerea elementului din chesh-ul, nu gaseste elementul cu numele cache: ${name} , element numar: ${numString}</value> <value xml:lang="th">à¹à¸¡à¹à¸ªà¸²à¸¡à¸²à¸£à¸à¸¢à¹à¸²à¸¢à¸à¸à¸à¹à¸à¸£à¸°à¸à¸à¸à¸à¸²à¸à¸«à¸à¹à¸§à¸¢à¸à¸§à¸²à¸¡à¸à¸³, à¹à¸¡à¹à¸à¸à¸à¸à¸à¹à¸à¸£à¸°à¸à¸à¸à¸à¹à¸§à¸¢à¸à¸·à¹à¸à¸«à¸à¹à¸§à¸¢à¸à¸§à¸²à¸¡à¸à¸³: ${name} , หมายà¹à¸¥à¸à¸à¸à¸à¹à¸à¸£à¸°à¸à¸à¸: ${numString}</value> <value xml:lang="zh">æ æ³å é¤ç¼åå ç´ ï¼ç¬¦åæ¡ä»¶çå ç´ æ²¡ææ¾å°ï¼ç¼ååç§°ï¼${name}ï¼å ç´ ç¼å·ï¼${numString}</value> - <value xml:lang="zh_TW">ç¡æ³åªé¤ç·©åå ç´ ï¼ç¬¦åæ¢ä»¶çå ç´ æ²ææ¾å°ï¼ç·©åå稱ï¼${name}ï¼å ç´ ç·¨èï¼${numString}</value> + <value xml:lang="zh_TW">ç¡æ³åªé¤å¿«åå ç´ ï¼ç¬¦åæ¢ä»¶çå ç´ æ²ææ¾å°ï¼å¿«åå稱ï¼${name}ï¼å ç´ ç·¨èï¼${numString}</value> </property> <property key="utilCache.couldNotUpdateCacheSetting"> <value xml:lang="en">Could not update cache settings, no name specified</value> @@ -335,7 +335,7 @@ <value xml:lang="ro">Nu e posibila actualizarea setarilor cache, nici un nume specificat</value> <value xml:lang="th">à¹à¸¡à¹à¸ªà¸²à¸¡à¸²à¸£à¸à¸à¸±à¸à¹à¸à¸à¸à¸²à¸£à¸à¸±à¹à¸à¸à¹à¸²à¸«à¸à¹à¸§à¸¢à¸à¸§à¸²à¸¡à¸à¸³, à¹à¸¡à¹à¸£à¸°à¸à¸¸à¸à¸·à¹à¸</value> <value xml:lang="zh">æ æ³æ´æ°ç¼åè®¾ç½®ï¼æ²¡ææå®åç§°</value> - <value xml:lang="zh_TW">ç¡æ³æ´æ°ç·©åè¨ç½®ï¼æ²ææå®å稱</value> + <value xml:lang="zh_TW">ç¡æ³æ´æ°å¿«åè¨ç½®ï¼æ²ææå®å稱</value> </property> <property key="utilCache.removeElementWithKey"> <value xml:lang="en">Removed element from cache with key: ${key}</value> @@ -346,7 +346,7 @@ <value xml:lang="ro">A fost sters elementul din chash-ul cu cheia: ${key}</value> <value xml:lang="th">ยà¹à¸²à¸¢à¸à¸à¸à¹à¸à¸£à¸°à¸à¸à¸à¸à¸²à¸à¸«à¸à¹à¸§à¸¢à¸à¸§à¸²à¸¡à¸à¸³à¸à¹à¸§à¸¢à¸à¸µà¸¢à¹: ${key}</value> <value xml:lang="zh">ä»ç¼åä¸å é¤äºå ç´ ï¼é®ï¼${key}</value> - <value xml:lang="zh_TW">å¾ç·©åä¸åªé¤äºå ç´ ï¼éµï¼${key}</value> + <value xml:lang="zh_TW">å¾å¿«åä¸åªé¤äºå ç´ ï¼éµï¼${key}</value> </property> <property key="utilCacheEvents.noCacheNameSpecified"> <value xml:lang="en">Could not remove cache line/element, no cache name specified</value> @@ -357,7 +357,7 @@ <value xml:lang="ro">Nu este posibila stergerea linieri/element, nici-un nume de chash specificata</value> <value xml:lang="th">à¹à¸¡à¹à¸ªà¸²à¸¡à¸²à¸£à¸à¸¥à¸à¸«à¸à¹à¸§à¸¢à¸à¸§à¸²à¸¡à¸à¸³/à¸à¸à¸à¹à¸à¸£à¸°à¸à¸à¸, à¹à¸¡à¹à¸£à¸°à¸à¸¸à¸à¸·à¹à¸à¸«à¸à¹à¸§à¸¢à¸à¸§à¸²à¸¡à¸à¸³</value> <value xml:lang="zh">æ æ³å é¤ç¼åè¡/å ç´ ï¼æ²¡ææå®ç¼ååç§°</value> - <value xml:lang="zh_TW">ç¡æ³åªé¤ç·©åè¡/å ç´ ï¼æ²ææå®ç·©åå稱</value> + <value xml:lang="zh_TW">ç¡æ³åªé¤å¿«åè¡/å ç´ ï¼æ²ææå®å¿«åå稱</value> </property> <property key="utilCacheEvents.noElementNumberSpecified"> <value xml:lang="en">Could not remove cache line/element, no element number specified</value> @@ -368,7 +368,7 @@ <value xml:lang="ro">Nu este posibila stergerea liniei/element, nici-un numar de elemente specificate</value> <value xml:lang="th">à¹à¸¡à¹à¸ªà¸²à¸¡à¸²à¸£à¸à¸¥à¸à¸«à¸à¹à¸§à¸¢à¸à¸§à¸²à¸¡à¸à¸³/à¸à¸à¸à¹à¸à¸£à¸°à¸à¸à¸, à¹à¸¡à¹à¸£à¸°à¸à¸¸à¸«à¸¡à¸²à¸¢à¹à¸¥à¸à¸«à¸à¹à¸§à¸¢à¸à¸§à¸²à¸¡à¸à¸³</value> <value xml:lang="zh">æ æ³å é¤ç¼åè¡/å ç´ ï¼æ²¡ææå®å ç´ ç¼å·</value> - <value xml:lang="zh_TW">ç¡æ³åªé¤ç·©åè¡/å ç´ ï¼æ²ææå®å ç´ ç·¨è</value> + <value xml:lang="zh_TW">ç¡æ³åªé¤å¿«åè¡/å ç´ ï¼æ²ææå®å ç´ ç·¨è</value> </property> <property key="utilCacheEvents.permissionEdit"> <value xml:lang="en">You do not have permission to perform this operation, UTIL_CACHE_EDIT required</value> |
Free forum by Nabble | Edit this page |