mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-12-16 13:30:23 +01:00
Compare commits
43 Commits
v3.0.0-rc.
...
ajaxify-cr
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bc29c3a49b | ||
|
|
3883199be0 | ||
|
|
7cb2e02cd7 | ||
|
|
491487a1a2 | ||
|
|
188ec62f9a | ||
|
|
48c1c7594d | ||
|
|
69f24ed92a | ||
|
|
830f142b7a | ||
|
|
1aff9cad91 | ||
|
|
37b48b82a4 | ||
|
|
a83734fb2b | ||
|
|
68db271dfd | ||
|
|
2c5a5bf366 | ||
|
|
2a9b3ee464 | ||
|
|
3f8344804a | ||
|
|
8906002772 | ||
|
|
415da6c2ed | ||
|
|
9c0996e40a | ||
|
|
b17ab944e6 | ||
|
|
4ab60c888c | ||
|
|
e753603e6a | ||
|
|
b4292cf517 | ||
|
|
33ad5a724a | ||
|
|
6947e60b47 | ||
|
|
034666b4c1 | ||
|
|
7b7f473e14 | ||
|
|
6b89884dd5 | ||
|
|
ae5d4025b2 | ||
|
|
400a7abf55 | ||
|
|
5d2900e95d | ||
|
|
96305e12c9 | ||
|
|
5a7104f13f | ||
|
|
1c0808d779 | ||
|
|
1a07b77f88 | ||
|
|
361441bd02 | ||
|
|
04652ceb95 | ||
|
|
661a6e0473 | ||
|
|
97f081353f | ||
|
|
98b58bcc3e | ||
|
|
8c07a8d7e0 | ||
|
|
69a7bfbe71 | ||
|
|
7f54709da7 | ||
|
|
03e05b5154 |
48
CHANGELOG.md
48
CHANGELOG.md
@@ -1,3 +1,51 @@
|
||||
#### v2.8.10 (2023-03-27)
|
||||
|
||||
##### Chores
|
||||
|
||||
* up composer-default (e9a8e195)
|
||||
* incrementing version number - v2.8.9 (57f14e41)
|
||||
* update changelog for v2.8.9 (18b2150e)
|
||||
* incrementing version number - v2.8.8 (b331b942)
|
||||
* incrementing version number - v2.8.7 (3f8248d6)
|
||||
* incrementing version number - v2.8.6 (af6ce447)
|
||||
* incrementing version number - v2.8.5 (bff5ce2d)
|
||||
* incrementing version number - v2.8.4 (a46b2bbc)
|
||||
* incrementing version number - v2.8.3 (c20b20a7)
|
||||
* incrementing version number - v2.8.2 (050e43f8)
|
||||
* incrementing version number - v2.8.1 (727f879e)
|
||||
* incrementing version number - v2.8.0 (8e77673d)
|
||||
* incrementing version number - v2.7.0 (96cc0617)
|
||||
* incrementing version number - v2.6.1 (7e52a7a5)
|
||||
* incrementing version number - v2.6.0 (e7fcf482)
|
||||
* incrementing version number - v2.5.8 (dec0e7de)
|
||||
* incrementing version number - v2.5.7 (5836bf4a)
|
||||
* incrementing version number - v2.5.6 (c7bd7dbf)
|
||||
* incrementing version number - v2.5.5 (3509ed94)
|
||||
* incrementing version number - v2.5.4 (e83260ca)
|
||||
* incrementing version number - v2.5.3 (7e922936)
|
||||
* incrementing version number - v2.5.2 (babcd17e)
|
||||
* incrementing version number - v2.5.1 (ce3aa950)
|
||||
* incrementing version number - v2.5.0 (01d276cb)
|
||||
* incrementing version number - v2.4.5 (dd3e1a28)
|
||||
* incrementing version number - v2.4.4 (d5525c87)
|
||||
* incrementing version number - v2.4.3 (9c647c6c)
|
||||
* incrementing version number - v2.4.2 (3aa7b855)
|
||||
* incrementing version number - v2.4.1 (60cbd148)
|
||||
* incrementing version number - v2.4.0 (4834cde3)
|
||||
* incrementing version number - v2.3.1 (d2425942)
|
||||
* incrementing version number - v2.3.0 (046ea120)
|
||||
|
||||
##### Bug Fixes
|
||||
|
||||
* #11403, remove loader.js crash counter logic (830f142b)
|
||||
* don't crash if event name is not a string (37b48b82)
|
||||
* closes #11173, move cache clear code (c2961ad4)
|
||||
|
||||
##### Other Changes
|
||||
|
||||
* fix arrow (1aff9cad)
|
||||
* whitespace (894f392b)
|
||||
|
||||
#### v2.8.9 (2023-03-19)
|
||||
|
||||
##### Chores
|
||||
|
||||
@@ -29,8 +29,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@adactive/bootstrap-tagsinput": "0.8.2",
|
||||
"@isaacs/ttlcache": "1.2.1",
|
||||
"@popperjs/core": "2.11.6",
|
||||
"@isaacs/ttlcache": "1.2.2",
|
||||
"@popperjs/core": "2.11.7",
|
||||
"ace-builds": "1.16.0",
|
||||
"archiver": "5.3.1",
|
||||
"async": "3.2.4",
|
||||
@@ -57,18 +57,18 @@
|
||||
"cookie-parser": "1.4.6",
|
||||
"cron": "2.3.0",
|
||||
"cropperjs": "1.5.13",
|
||||
"csrf-sync": "4.0.0",
|
||||
"csrf-sync": "4.0.1",
|
||||
"daemon": "1.1.0",
|
||||
"diff": "5.1.0",
|
||||
"esbuild": "0.17.12",
|
||||
"esbuild": "0.17.14",
|
||||
"express": "4.18.2",
|
||||
"express-session": "1.17.3",
|
||||
"express-useragent": "1.0.15",
|
||||
"file-loader": "6.2.0",
|
||||
"fs-extra": "11.1.1",
|
||||
"graceful-fs": "4.2.11",
|
||||
"helmet": "5.1.1",
|
||||
"html-to-text": "9.0.4",
|
||||
"helmet": "6.0.1",
|
||||
"html-to-text": "9.0.5",
|
||||
"ipaddr.js": "2.0.1",
|
||||
"jquery": "3.6.4",
|
||||
"jquery-deserialize": "2.0.0",
|
||||
@@ -84,7 +84,7 @@
|
||||
"lru-cache": "8.0.4",
|
||||
"material-design-lite": "1.3.0",
|
||||
"mime": "3.0.0",
|
||||
"mkdirp": "2.1.5",
|
||||
"mkdirp": "2.1.6",
|
||||
"mongodb": "5.1.0",
|
||||
"morgan": "1.10.0",
|
||||
"mousetrap": "1.6.5",
|
||||
@@ -100,11 +100,11 @@
|
||||
"nodebb-plugin-ntfy": "1.0.15",
|
||||
"nodebb-plugin-spam-be-gone": "2.0.6",
|
||||
"nodebb-rewards-essentials": "0.2.2",
|
||||
"nodebb-theme-harmony": "1.0.0-beta.81",
|
||||
"nodebb-theme-harmony": "1.0.0-beta.84",
|
||||
"nodebb-theme-lavender": "7.0.9",
|
||||
"nodebb-theme-peace": "2.0.19",
|
||||
"nodebb-theme-persona": "13.0.51",
|
||||
"nodebb-widget-essentials": "7.0.6",
|
||||
"nodebb-theme-persona": "13.0.53",
|
||||
"nodebb-widget-essentials": "7.0.7",
|
||||
"nodemailer": "6.9.1",
|
||||
"nprogress": "0.2.0",
|
||||
"passport": "0.6.0",
|
||||
@@ -119,14 +119,14 @@
|
||||
"ioredis": "5.3.1",
|
||||
"request": "2.88.2",
|
||||
"request-promise-native": "1.0.9",
|
||||
"rimraf": "4.4.0",
|
||||
"rimraf": "4.4.1",
|
||||
"rss": "1.2.2",
|
||||
"rtlcss": "4.0.0",
|
||||
"sanitize-html": "2.10.0",
|
||||
"sass": "1.59.3",
|
||||
"sass": "1.60.0",
|
||||
"semver": "7.3.8",
|
||||
"serve-favicon": "2.5.0",
|
||||
"sharp": "0.31.3",
|
||||
"sharp": "0.32.0",
|
||||
"sitemap": "7.1.1",
|
||||
"slideout": "1.0.1",
|
||||
"socket.io": "4.6.1",
|
||||
@@ -142,7 +142,7 @@
|
||||
"tinycon": "0.6.8",
|
||||
"toobusy-js": "0.5.1",
|
||||
"validator": "13.9.0",
|
||||
"webpack": "5.76.2",
|
||||
"webpack": "5.76.3",
|
||||
"webpack-merge": "5.8.0",
|
||||
"winston": "3.8.2",
|
||||
"xml": "1.0.1",
|
||||
@@ -152,7 +152,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@apidevtools/swagger-parser": "10.1.0",
|
||||
"@commitlint/cli": "17.4.4",
|
||||
"@commitlint/cli": "17.5.0",
|
||||
"@commitlint/config-angular": "17.4.4",
|
||||
"coveralls": "3.1.1",
|
||||
"eslint": "8.36.0",
|
||||
@@ -170,7 +170,7 @@
|
||||
"smtp-server": "3.11.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"sass-embedded": "1.59.3"
|
||||
"sass-embedded": "1.60.0"
|
||||
},
|
||||
"resolutions": {
|
||||
"*/jquery": "3.6.4"
|
||||
|
||||
19
loader.js
19
loader.js
@@ -30,9 +30,7 @@ const output = logrotate({ file: outputLogFilePath, size: '1m', keep: 3, compres
|
||||
const silent = nconf.get('silent') === 'false' ? false : nconf.get('silent') !== false;
|
||||
let numProcs;
|
||||
const workers = [];
|
||||
const Loader = {
|
||||
timesStarted: 0,
|
||||
};
|
||||
const Loader = {};
|
||||
const appPath = path.join(__dirname, 'app.js');
|
||||
|
||||
Loader.init = function () {
|
||||
@@ -57,21 +55,6 @@ Loader.displayStartupMessages = function () {
|
||||
|
||||
Loader.addWorkerEvents = function (worker) {
|
||||
worker.on('exit', (code, signal) => {
|
||||
if (code !== 0) {
|
||||
if (Loader.timesStarted < numProcs * 3) {
|
||||
Loader.timesStarted += 1;
|
||||
if (Loader.crashTimer) {
|
||||
clearTimeout(Loader.crashTimer);
|
||||
}
|
||||
Loader.crashTimer = setTimeout(() => {
|
||||
Loader.timesStarted = 0;
|
||||
}, 10000);
|
||||
} else {
|
||||
console.log(`${numProcs * 3} restarts in 10 seconds, most likely an error on startup. Halting.`);
|
||||
process.exit();
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`[cluster] Child Process (${worker.pid}) has exited (code: ${code}, signal: ${signal})`);
|
||||
if (!(worker.suicide || code === 0)) {
|
||||
console.log('[cluster] Spinning up another process...');
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copy IP",
|
||||
"ban-ip": "Ban IP",
|
||||
"view-history": "Edit History",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"enabling-help": "За да включите тази функционалност, идете в <a href=\"%1\">Настройки → Публикуване → Опашка за публикации</a> и включете <strong>Опашката за публикации</strong>.",
|
||||
"back-to-list": "Назад към Опашката за публикации",
|
||||
"user": "Потребител",
|
||||
"when": "When",
|
||||
"when": "Кога",
|
||||
"category": "Категория",
|
||||
"title": "Заглавие",
|
||||
"content": "Съдържание",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Копиране на IP адреса",
|
||||
"ban-ip": "Блокиране на IP адреса",
|
||||
"view-history": "История на редакциите",
|
||||
"wrote-ago": "писа <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "писа на <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "отговори на <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "отговори на <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> на <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "писа <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "писа на <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "отговори на <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "отговори на <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> на <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 заключи тази тема %2",
|
||||
"user-locked-topic-on": "%1 заключи тази тема на %2",
|
||||
"user-unlocked-topic-ago": "%1 отключи тази тема %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copy IP",
|
||||
"ban-ip": "Ban IP",
|
||||
"view-history": "Edit History",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Kopírovat IP",
|
||||
"ban-ip": "Zakázat IP",
|
||||
"view-history": "Upravit historii",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copy IP",
|
||||
"ban-ip": "Ban IP",
|
||||
"view-history": "Edit History",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "IP-Adresse Kopieren",
|
||||
"ban-ip": "IP-Adresse bannen",
|
||||
"view-history": "Verlauf bearbeiten",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copy IP",
|
||||
"ban-ip": "Ban IP",
|
||||
"view-history": "Edit History",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -43,10 +43,10 @@
|
||||
"ban-ip": "Ban IP",
|
||||
"view-history": "Edit History",
|
||||
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copy IP",
|
||||
"ban-ip": "Ban IP",
|
||||
"view-history": "Edit History",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copy IP",
|
||||
"ban-ip": "Ban IP",
|
||||
"view-history": "Edit History",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copiar IP",
|
||||
"ban-ip": "Banear IP",
|
||||
"view-history": "Editar Historial",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copy IP",
|
||||
"ban-ip": "Ban IP",
|
||||
"view-history": "Edit History",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "کپی IP",
|
||||
"ban-ip": "مسدود کردن IP",
|
||||
"view-history": "تاریخچه ویرایش",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Kopioi IP",
|
||||
"ban-ip": "Ban IP",
|
||||
"view-history": "Muokkaa historiaa",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copier l'IP",
|
||||
"ban-ip": "Bannir l'IP",
|
||||
"view-history": "Éditer l'historique",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copy IP",
|
||||
"ban-ip": "Ban IP",
|
||||
"view-history": "Edit History",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "העתקת IP",
|
||||
"ban-ip": "הרחקת IP",
|
||||
"view-history": "עריכת היסטוריה",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copy IP",
|
||||
"ban-ip": "Ban IP",
|
||||
"view-history": "Edit History",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "IP-cím másolása",
|
||||
"ban-ip": "IP-cím kitiltása",
|
||||
"view-history": "Előzmények szerkesztése",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Պատճենել IP",
|
||||
"ban-ip": "Արգելել IP-ն",
|
||||
"view-history": "Խմբագրել պատմությունը",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copy IP",
|
||||
"ban-ip": "Ban IP",
|
||||
"view-history": "Edit History",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copia indirizzo IP",
|
||||
"ban-ip": "Banna indirizzo IP",
|
||||
"view-history": "Modifica storico",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "IPをコピー",
|
||||
"ban-ip": "IPをBan",
|
||||
"view-history": "履歴を編集",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "IP 복사",
|
||||
"ban-ip": "IP 차단",
|
||||
"view-history": "편집 기록",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copy IP",
|
||||
"ban-ip": "Blokuoti IP",
|
||||
"view-history": "Edit History",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Kopēt IP adresi",
|
||||
"ban-ip": "Bloķēt IP adresi",
|
||||
"view-history": "Rediģēšanas vēsture",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copy IP",
|
||||
"ban-ip": "Ban IP",
|
||||
"view-history": "Edit History",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Kopier IP",
|
||||
"ban-ip": "Forby IP",
|
||||
"view-history": "Redigere historie",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Kopieer IP",
|
||||
"ban-ip": "Verban IP",
|
||||
"view-history": "Revisie geschiedenis",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Kopiuj IP",
|
||||
"ban-ip": "Blokuj IP",
|
||||
"view-history": "Historia edycji",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copiar IP",
|
||||
"ban-ip": "Banir IP",
|
||||
"view-history": "Histórico de Edição",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copiar IP",
|
||||
"ban-ip": "Banir IP",
|
||||
"view-history": "Histórico de Edição",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copy IP",
|
||||
"ban-ip": "Ban IP",
|
||||
"view-history": "Edit History",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Копировать IP",
|
||||
"ban-ip": "Забанить IP",
|
||||
"view-history": "История правок",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copy IP",
|
||||
"ban-ip": "Ban IP",
|
||||
"view-history": "Edit History",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Copy IP",
|
||||
"ban-ip": "Ban IP",
|
||||
"view-history": "Edit History",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Kopírovať IP adresu",
|
||||
"ban-ip": "Zablokovať IP adresu",
|
||||
"view-history": "Upraviť históriu",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Kopiraj IP",
|
||||
"ban-ip": "Prepovej IP",
|
||||
"view-history": "Uredi zgodovino",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Kopjoni IP-në",
|
||||
"ban-ip": "Pezulloni IP-në",
|
||||
"view-history": "Ndrysho historinë",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"enabling-help": "За омогућавање ове функције, идите у <a href=\"%1\">Подешавања → Објава → Објаве на чекању</a> и омогућите <strong>Објаве на чекању</strong>.",
|
||||
"back-to-list": "Назад на објаве на чекању",
|
||||
"user": "Корисник",
|
||||
"when": "When",
|
||||
"when": "Када",
|
||||
"category": "Категорија",
|
||||
"title": "Наслов",
|
||||
"content": "Садржај",
|
||||
@@ -23,7 +23,7 @@
|
||||
"notify": "Обавештење",
|
||||
"notify-user": "Обавести корисника",
|
||||
"confirm-reject": "Да ли желите да одбаците ову објаву?",
|
||||
"confirm-remove": "Do you want to remove this post?",
|
||||
"confirm-remove": "Да ли желите да уклоните ову објаву?",
|
||||
"bulk-actions": "Масовне радње",
|
||||
"accept-all": "Прихвати све",
|
||||
"accept-selected": "Прихвати изабрано",
|
||||
@@ -31,10 +31,10 @@
|
||||
"reject-all-confirm": "Да ли желите да одбаците све објаве?",
|
||||
"reject-selected": "Одбаци изабрано",
|
||||
"reject-selected-confirm": "Да ли желите да одбаците изабране објаве (укупно %1)?",
|
||||
"remove-all": "Remove all",
|
||||
"remove-all-confirm": "Do you want to remove all posts?",
|
||||
"remove-selected": "Remove Selected",
|
||||
"remove-selected-confirm": "Do you want to remove %1 selected posts?",
|
||||
"remove-all": "Уклони све",
|
||||
"remove-all-confirm": "Да ли желите да уклоните све објаве?",
|
||||
"remove-selected": "Уклони изабрано",
|
||||
"remove-selected-confirm": "Да ли желите да уклоните изабране објаве (%1)?",
|
||||
"bulk-accept-success": "Прихваћених објава: %1",
|
||||
"bulk-reject-success": "Одбачених објава: %1"
|
||||
}
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Копирај IP",
|
||||
"ban-ip": "Бануј IP",
|
||||
"view-history": "Уреди историју",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Kopiera IP",
|
||||
"ban-ip": "Banna IP",
|
||||
"view-history": "Redigera historik",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "คัดลอก IP",
|
||||
"ban-ip": "แบน IP",
|
||||
"view-history": "แก้ไขประวัติ",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "IP Kopyala",
|
||||
"ban-ip": "IP Yasakla",
|
||||
"view-history": "Geçmişi Düzenle",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Копіювати IP",
|
||||
"ban-ip": "Заблокувати IP",
|
||||
"view-history": "Редагувати історію",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"custom-css": "Custom CSS/SASS",
|
||||
"custom-css.description": "Enter your own CSS/SASS declarations here, which will be applied after all other styles.",
|
||||
"custom-css.enable": "Enable Custom CSS/SASS",
|
||||
"custom-css": "CSS/SASS Tùy Chỉnh",
|
||||
"custom-css.description": "Nhập các khai báo CSS/SASS của riêng bạn tại đây, sẽ được áp dụng sau tất cả các kiểu khác.",
|
||||
"custom-css.enable": "Bật CSS/SASS Tùy Chỉnh",
|
||||
|
||||
"custom-js": "Javascript tùy chỉnh",
|
||||
"custom-js.description": "Nhập javascript của riêng bạn ở đây. Nó sẽ được thực hiện sau khi trang được tải hoàn toàn.",
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
"description": "Mô tả",
|
||||
"last-seen-ago": "Last used <span class=\"timeago\" title=\"%1\"></span>.",
|
||||
"last-seen-on": "Last used on <span class=\"timeago\" title=\"%1\"></span>.",
|
||||
"last-seen-never": "This key has never been used.",
|
||||
"last-seen-never": "Khóa này chưa bao giờ được dùng.",
|
||||
"no-description": "Không có mô tả cụ thể.",
|
||||
"token-on-save": "Mã truy cập sẽ được tạo sau khi biểu mẫu được lưu"
|
||||
}
|
||||
@@ -58,7 +58,7 @@
|
||||
"users": "Người dùng",
|
||||
"topics": "Chủ Đề",
|
||||
"posts": "Bài Viết",
|
||||
"x-posts": "<span class=\"formatted-number\">%1</span> posts",
|
||||
"x-posts": "<span class=\"formatted-number\">%1</span> bài đăng",
|
||||
"x-topics": "<span class=\"formatted-number\">%1</span> topics",
|
||||
"best": "Tốt",
|
||||
"controversial": "Gây tranh cãi",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"chat.chatting_with": "Trò chuyện với",
|
||||
"chat.placeholder": "Nhập tin nhắn trò chuyện tại đây, kéo và thả hình ảnh, nhấn enter để gửi",
|
||||
"chat.placeholder.mobile": "Type chat message here",
|
||||
"chat.placeholder.mobile": "Nhập tin nhắn trò chuyện tại đây",
|
||||
"chat.scroll-up-alert": "Bạn đang xem các tin nhắn cũ hơn, nhấp vào đây để chuyển đến tin nhắn gần đây nhất.",
|
||||
"chat.usernames-and-x-others": "%1 & %2 others",
|
||||
"chat.chat-with-usernames": "Chat with %1",
|
||||
@@ -46,7 +46,7 @@
|
||||
"composer.compose": "Soạn thảo",
|
||||
"composer.show_preview": "Hiện Xem trước",
|
||||
"composer.hide_preview": "Ẩn Xem trước",
|
||||
"composer.help": "Help",
|
||||
"composer.help": "Trợ giúp",
|
||||
"composer.user_said_in": "%1 đã nói trong %2:",
|
||||
"composer.user_said": "%1 đã nói:",
|
||||
"composer.discard": "Bạn có chắc chắn hủy bỏ bài viết này?",
|
||||
@@ -70,9 +70,9 @@
|
||||
"composer.schedule-time": "Thời gian",
|
||||
"composer.cancel-scheduling": "Hủy Lập Lịch",
|
||||
"composer.set-schedule-date": "Đặt Ngày",
|
||||
"composer.discard-all-drafts": "Discard all drafts",
|
||||
"composer.no-drafts": "You have no drafts",
|
||||
"composer.discard-draft-confirm": "Do you want to discard this draft?",
|
||||
"composer.discard-all-drafts": "Hủy tất cả bản nháp",
|
||||
"composer.no-drafts": "Bạn không có bản nháp nào",
|
||||
"composer.discard-draft-confirm": "Bạn có muốn hủy bản nháp này không?",
|
||||
"bootbox.ok": "Đồng ý",
|
||||
"bootbox.cancel": "Huỷ bỏ",
|
||||
"bootbox.confirm": "Xác nhận",
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"notify": "Thông báo",
|
||||
"notify-user": "Thông Báo Người Dùng",
|
||||
"confirm-reject": "Bạn có muốn từ chối bài viết này không?",
|
||||
"confirm-remove": "Do you want to remove this post?",
|
||||
"confirm-remove": "Bạn có muốn xóa bài đăng này không?",
|
||||
"bulk-actions": "Hành động số lượng lớn",
|
||||
"accept-all": "Chấp nhận tất cả",
|
||||
"accept-selected": "Chấp nhận đã chọn",
|
||||
@@ -32,9 +32,9 @@
|
||||
"reject-selected": "Từ chối đã chọn",
|
||||
"reject-selected-confirm": "Bạn có muốn từ chối %1 bài viết đã chọn không?",
|
||||
"remove-all": "Remove all",
|
||||
"remove-all-confirm": "Do you want to remove all posts?",
|
||||
"remove-all-confirm": "Bạn có muốn xóa tất cả bài đăng không?",
|
||||
"remove-selected": "Remove Selected",
|
||||
"remove-selected-confirm": "Do you want to remove %1 selected posts?",
|
||||
"remove-selected-confirm": "Bạn có muốn xóa %1 bài đăng đã chọn không?",
|
||||
"bulk-accept-success": "%1 bài đăng được chấp nhận",
|
||||
"bulk-reject-success": "%1 bài đăng bị từ chối"
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"type-to-search": "Type to search",
|
||||
"type-to-search": "Nhập để tìm kiếm",
|
||||
"results_matching": "%1 kết quả khớp với \"%2\", (%3 giây)",
|
||||
"no-matches": "Không tìm thấy kết quả phù hợp",
|
||||
"advanced-search": "Tìm kiếm nâng cao",
|
||||
@@ -10,22 +10,22 @@
|
||||
"in-categories": "In categories",
|
||||
"in-users": "In users",
|
||||
"in-tags": "In tags",
|
||||
"categories": "Categories",
|
||||
"all-categories": "All categories",
|
||||
"categories-x": "Categories: %1",
|
||||
"categories": "Danh mục",
|
||||
"all-categories": "Tất cả danh mục",
|
||||
"categories-x": "Danh mục: %1",
|
||||
"categories-watched-categories": "Categories: Watched categories",
|
||||
"type-a-category": "Type a category",
|
||||
"tags": "Tags",
|
||||
"type-a-category": "Nhập một danh mục",
|
||||
"tags": "Thẻ",
|
||||
"tags-x": "Tags: %1",
|
||||
"type-a-tag": "Type a tag",
|
||||
"type-a-tag": "Nhập một thẻ",
|
||||
"match-words": "Khớp các từ",
|
||||
"match-all-words": "Match all words",
|
||||
"match-any-word": "Match any word",
|
||||
"all": "Tất cả",
|
||||
"any": "Bất kì",
|
||||
"posted-by": "Đăng bởi",
|
||||
"posted-by-usernames": "Posted by: %1",
|
||||
"type-a-username": "Type a username",
|
||||
"posted-by-usernames": "Đăng bởi: %1",
|
||||
"type-a-username": "Nhập tên người dùng",
|
||||
"search-child-categories": "Tìm kiếm chuyên mục con",
|
||||
"has-tags": "Có thẻ bên trong",
|
||||
"reply-count": "Số lượt trả lời",
|
||||
@@ -35,7 +35,7 @@
|
||||
"at-least": "Tối thiểu",
|
||||
"at-most": "Tối đa",
|
||||
"relevance": "Mức độ liên quan",
|
||||
"time": "Time",
|
||||
"time": "Thời gian",
|
||||
"post-time": "Thời gian đăng bài",
|
||||
"votes": "Phiếu bầu",
|
||||
"newer-than": "Mới hơn",
|
||||
@@ -48,22 +48,22 @@
|
||||
"three-months": "Ba tháng",
|
||||
"six-months": "Sáu tháng",
|
||||
"one-year": "Một năm",
|
||||
"time-newer-than-86400": "Time: Newer than yesterday",
|
||||
"time-older-than-86400": "Time: Older than yesterday",
|
||||
"time-newer-than-604800": "Time: Newer than one week",
|
||||
"time-older-than-604800": "Time: Older than one week",
|
||||
"time-newer-than-1209600": "Time: Newer than two weeks",
|
||||
"time-older-than-1209600": "Time: Older than two weeks",
|
||||
"time-newer-than-2592000": "Time: Newer than one month",
|
||||
"time-older-than-2592000": "Time: Older than one month",
|
||||
"time-newer-than-7776000": "Time: Newer than three months",
|
||||
"time-older-than-7776000": "Time: Older than three months",
|
||||
"time-newer-than-15552000": "Time: Newer than six months",
|
||||
"time-older-than-15552000": "Time: Older than six months",
|
||||
"time-newer-than-31104000": "Time: Newer than one year",
|
||||
"time-older-than-31104000": "Time: Older than one year",
|
||||
"time-newer-than-86400": "Thời gian: Mới hơn hôm qua",
|
||||
"time-older-than-86400": "Thời gian: Cũ hơn hôm qua",
|
||||
"time-newer-than-604800": "Thời gian: Mới hơn một tuần",
|
||||
"time-older-than-604800": "Thời gian: Cũ hơn một tuần",
|
||||
"time-newer-than-1209600": "Thời gian: Mới hơn hai tuần",
|
||||
"time-older-than-1209600": "Thời gian: Cũ hơn hai tuần",
|
||||
"time-newer-than-2592000": "Thời gian: Mới hơn một tháng",
|
||||
"time-older-than-2592000": "Thời gian: Cũ hơn một tháng",
|
||||
"time-newer-than-7776000": "Thời gian: Mới hơn ba tháng",
|
||||
"time-older-than-7776000": "Thời gian: Cũ hơn ba tháng",
|
||||
"time-newer-than-15552000": "Thời gian: Mới hơn sáu tháng",
|
||||
"time-older-than-15552000": "Thời gian: Cũ hơn sáu tháng",
|
||||
"time-newer-than-31104000": "Thời gian: Mới hơn một năm",
|
||||
"time-older-than-31104000": "Thời gian: Cũ hơn một năm",
|
||||
"sort-by": "Sắp xếp theo",
|
||||
"sort": "Sort",
|
||||
"sort": "Sắp xếp",
|
||||
"last-reply-time": "Thời điểm trả lời lần cuối",
|
||||
"topic-title": "Tiêu đề chủ đề",
|
||||
"topic-votes": "Phiếu bầu chủ đề",
|
||||
@@ -74,36 +74,36 @@
|
||||
"category": "Chuyên mục ",
|
||||
"descending": "Theo thứ tự giảm dần",
|
||||
"ascending": "Theo thứ tự tăng dần",
|
||||
"sort-by-relevance-desc": "Sort by: Relevance in descending order",
|
||||
"sort-by-relevance-asc": "Sort by: Relevance in ascending order",
|
||||
"sort-by-timestamp-desc": "Sort by: Post time in descending order",
|
||||
"sort-by-timestamp-asc": "Sort by: Post time in ascending order",
|
||||
"sort-by-votes-desc": "Sort by: Votes in descending order",
|
||||
"sort-by-votes-asc": "Sort by: Votes in ascending order",
|
||||
"sort-by-topic.lastposttime-desc": "Sort by: Last reply time in descending order",
|
||||
"sort-by-topic.lastposttime-asc": "Sort by: Last reply time in ascending order",
|
||||
"sort-by-topic.title-desc": "Sort by: Topic title in descending order",
|
||||
"sort-by-topic.title-asc": "Sort by: Topic title in ascending order",
|
||||
"sort-by-topic.postcount-desc": "Sort by: Number of replies in descending order",
|
||||
"sort-by-topic.postcount-asc": "Sort by: Number of replies in ascending order",
|
||||
"sort-by-topic.viewcount-desc": "Sort by: Number of views in descending order",
|
||||
"sort-by-topic.viewcount-asc": "Sort by: Number of views in ascending order",
|
||||
"sort-by-topic.votes-desc": "Sort by: Topic votes in descending order",
|
||||
"sort-by-topic.votes-asc": "Sort by: Topic votes in ascending order",
|
||||
"sort-by-topic.timestamp-desc": "Sort by: Topic start date in descending order",
|
||||
"sort-by-topic.timestamp-asc": "Sort by: Topic start date in ascending order",
|
||||
"sort-by-user.username-desc": "Sort by: Username in descending order",
|
||||
"sort-by-user.username-asc": "Sort by: Username in ascending order",
|
||||
"sort-by-category.name-desc": "Sort by: Category in descending order",
|
||||
"sort-by-category.name-asc": "Sort by: Category in ascending order",
|
||||
"save": "Save",
|
||||
"sort-by-relevance-desc": "Sắp xếp theo: Mức độ liên quan giảm dần",
|
||||
"sort-by-relevance-asc": "Sắp xếp theo: Mức độ liên quan tăng dần",
|
||||
"sort-by-timestamp-desc": "Sắp xếp theo: Thời gian đăng giảm dần",
|
||||
"sort-by-timestamp-asc": "Sắp xếp theo: Thời gian đăng tăng dần",
|
||||
"sort-by-votes-desc": "Sắp xếp theo: Lượt bình chọn giảm dần",
|
||||
"sort-by-votes-asc": "Sắp xếp theo: Lượt bình chọn tăng dần",
|
||||
"sort-by-topic.lastposttime-desc": "Sắp xếp theo: Thời gian trả lời cuối cùng giảm dần",
|
||||
"sort-by-topic.lastposttime-asc": "Sắp xếp theo: Thời gian trả lời cuối cùng tăng dần",
|
||||
"sort-by-topic.title-desc": "Sắp xếp theo: Tên chủ đề giảm dần",
|
||||
"sort-by-topic.title-asc": "Sắp xếp theo: Tên chủ đề tăng dần",
|
||||
"sort-by-topic.postcount-desc": "Sắp xếp theo: Số phản hồi giảm dần",
|
||||
"sort-by-topic.postcount-asc": "Sắp xếp theo: Số phản hồi tăng dần",
|
||||
"sort-by-topic.viewcount-desc": "Sắp xếp theo: Số lượt xem giảm dần",
|
||||
"sort-by-topic.viewcount-asc": "Sắp xếp theo: Số lượt xem tăng dần",
|
||||
"sort-by-topic.votes-desc": "Sắp xếp theo: Bình chọn chủ đề giảm dần",
|
||||
"sort-by-topic.votes-asc": "Sắp xếp theo: Bình chọn chủ đề tăng dần",
|
||||
"sort-by-topic.timestamp-desc": "Sắp xếp theo: Ngày bắt đầu chủ đề giảm dần",
|
||||
"sort-by-topic.timestamp-asc": "Sắp xếp theo: Ngày bắt đầu chủ đề tăng dần",
|
||||
"sort-by-user.username-desc": "Sắp xếp theo: Tên đăng nhập giảm dần",
|
||||
"sort-by-user.username-asc": "Sắp xếp theo: Tên đăng nhập tăng dần",
|
||||
"sort-by-category.name-desc": "Sắp xếp theo: Danh mục giảm dần",
|
||||
"sort-by-category.name-asc": "Sắp xếp theo: Danh mục tăng dần",
|
||||
"save": "Lưu",
|
||||
"save-preferences": "Lưu tuỳ chọn",
|
||||
"clear-preferences": "Xoá tuỳ chọn",
|
||||
"search-preferences-saved": "Tìm kiếm tuỳ chọn đã lưu",
|
||||
"search-preferences-cleared": "Tìm kiếm tuỳ chọn đã xoá",
|
||||
"show-results-as": "Hiện thị kết quả theo",
|
||||
"show-results-as-topics": "Show results as topics",
|
||||
"show-results-as-posts": "Show results as posts",
|
||||
"show-results-as-topics": "Hiển thị kết quả dưới dạng chủ đề",
|
||||
"show-results-as-posts": "Hiển thị kết quả dưới dạng bài viết",
|
||||
"see-more-results": "Xem thêm kết quả (%1)",
|
||||
"search-in-category": "Tìm kiếm ở \"%1\""
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"all-tags": "All tags",
|
||||
"all-tags": "Tất cả các thẻ",
|
||||
"no_tag_topics": "Không có bài viết nào với thẻ này.",
|
||||
"no-tags-found": "No tags found",
|
||||
"no-tags-found": "Không tìm thấy thẻ nào",
|
||||
"tags": "Thẻ",
|
||||
"enter_tags_here": "Nhập thẻ ở đây, mỗi thẻ phải có từ %1 tới %2 ký tự.",
|
||||
"enter_tags_here_short": "Nhập thẻ...",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "Sao chép IP",
|
||||
"ban-ip": "Cấm IP",
|
||||
"view-history": "Lịch sử chỉnh sửa",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
@@ -109,7 +109,7 @@
|
||||
"thread_tools.purge": "Xóa hẳn chủ đề",
|
||||
"thread_tools.purge_confirm": "Bạn có muốn xóa hẳn chủ đề này?",
|
||||
"thread_tools.merge_topics": "Gộp chủ đề",
|
||||
"thread_tools.merge": "Merge Topic",
|
||||
"thread_tools.merge": "Gộp Chủ Đề",
|
||||
"topic_move_success": "Chủ đề này sẽ sớm được chuyển đến \"%1\". Nhấn vào đây để hoàn tác.",
|
||||
"topic_move_multiple_success": "Các chủ đề này sẽ sớm được chuyển đến \"%1\". Nhấn vào đây để hoàn tác.",
|
||||
"topic_move_all_success": "Tất cả các chủ đề sẽ sớm được chuyển đến \"%1\". Nhấn vào đây để hoàn tác.",
|
||||
@@ -135,7 +135,7 @@
|
||||
"post_moved": "Đã chuyển bài gửi!",
|
||||
"fork_topic": "Tạo bản sao chủ đề",
|
||||
"enter-new-topic-title": "Nhập tiêu đề chủ đề mới",
|
||||
"fork_topic_instruction": "Click the posts you want to fork, enter a title for the new topic and click fork topic",
|
||||
"fork_topic_instruction": "Nhấp vào bài đăng bạn muốn rẽ nhánh, nhập tiêu đề cho chủ đề mới và nhấp vào chủ đề rẽ nhánh",
|
||||
"fork_no_pids": "Chưa chọn bài gửi nào!",
|
||||
"no-posts-selected": "Không bài viết nào được chọn!",
|
||||
"x-posts-selected": "%1 bài viết được chọn",
|
||||
@@ -150,11 +150,11 @@
|
||||
"merge-new-title-for-topic": "Tiêu đề mới cho chủ đề",
|
||||
"topic-id": "ID Chủ Đề",
|
||||
"move_posts_instruction": "Chọn bài đăng bạn muốn di chuyển, sau đó nhập ID chủ đề hoặc đi đến chủ đề mong muốn",
|
||||
"move_topic_instruction": "Select the target category and then click move",
|
||||
"move_topic_instruction": "Chọn danh mục nhắm đến và sau đó nhấp vào di chuyển",
|
||||
"change_owner_instruction": "Bấm vào bài viết bạn muốn chỉ định cho người dùng khác",
|
||||
"composer.title_placeholder": "Nhập tiêu đề chủ đề của bạn tại đây...",
|
||||
"composer.handle_placeholder": "Nhập tên/xử lý của bạn ở đây",
|
||||
"composer.hide": "Hide",
|
||||
"composer.hide": "Ẩn",
|
||||
"composer.discard": "Huỷ bỏ",
|
||||
"composer.submit": "Gửi",
|
||||
"composer.additional-options": "Tùy chọn bổ sung",
|
||||
@@ -200,7 +200,7 @@
|
||||
"last-post": "Bài viết cuối cùng",
|
||||
"go-to-my-next-post": "Đi tới bài kế tiếp của tôi",
|
||||
"no-more-next-post": "Bạn không có bài viết nào khác trong chủ đề này",
|
||||
"post-quick-reply": "Quick reply",
|
||||
"post-quick-reply": "Trả lời nhanh",
|
||||
"navigator.index": "Post %1 of %2",
|
||||
"navigator.unread": "%1 unread"
|
||||
"navigator.unread": "%1 chưa đọc"
|
||||
}
|
||||
@@ -43,7 +43,7 @@
|
||||
"followers": "Người theo dõi",
|
||||
"following": "Đang theo dõi",
|
||||
"blocks": "Khóa",
|
||||
"blocked-users": "Blocked users",
|
||||
"blocked-users": "Người dùng bị chặn",
|
||||
"block_toggle": "Chuyển đổi khối",
|
||||
"block_user": "Khóa Người Dùng",
|
||||
"unblock_user": "Mở Khóa Người Dùng",
|
||||
@@ -69,7 +69,7 @@
|
||||
"upload_new_picture": "Tải lên ảnh mới",
|
||||
"upload_new_picture_from_url": "Tải Lên Ảnh Mới Từ URL",
|
||||
"current_password": "Mật khẩu hiện tại",
|
||||
"new_password": "New Password",
|
||||
"new_password": "Mật Khẩu Mới",
|
||||
"change_password": "Đổi Mật Khẩu",
|
||||
"change_password_error": "Mật khẩu không hợp lệ!",
|
||||
"change_password_error_wrong_current": "Mật khẩu hiện tại của bạn không đúng",
|
||||
@@ -172,7 +172,7 @@
|
||||
"info.moderation-note.success": "Đã lưu ghi chú quản lý",
|
||||
"info.moderation-note.add": "Thêm ghi chú",
|
||||
"sessions.description": "Trang này cho phép bạn xem bất kỳ phiên hoạt động nào trên diễn đàn này và thu hồi chúng nếu cần thiết. Bạn có thể thu hồi phiên của riêng mình bằng cách đăng xuất khỏi tài khoản của bạn.",
|
||||
"revoke-session": "Revoke Session",
|
||||
"revoke-session": "Thu Hồi Phiên",
|
||||
"browser-version-on-platform": "%1 %2 on %3",
|
||||
"consent.title": "Quyền của bạn & Bằng lòng",
|
||||
"consent.lead": "Diễn đàn cộng đồng này thu thập và xử lý thông tin cá nhân của bạn.",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "复制IP",
|
||||
"ban-ip": "封禁 IP",
|
||||
"view-history": "编辑历史",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
"copy-ip": "複製IP",
|
||||
"ban-ip": "禁用IP",
|
||||
"view-history": "編輯歷史",
|
||||
"wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
|
||||
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
const hooks = require('./modules/hooks');
|
||||
const { render } = require('./widgets');
|
||||
const transitions = require('./modules/transitions');
|
||||
|
||||
window.ajaxify = window.ajaxify || {};
|
||||
ajaxify.widgets = { render: render };
|
||||
@@ -50,7 +51,7 @@ ajaxify.widgets = { render: render };
|
||||
|
||||
ajaxify.cleanup(url, ajaxify.data.template.name);
|
||||
|
||||
if ($('#content').hasClass('ajaxifying') && apiXHR) {
|
||||
if (transitions.isActive() && apiXHR) {
|
||||
apiXHR.abort();
|
||||
}
|
||||
|
||||
@@ -67,7 +68,6 @@ ajaxify.widgets = { render: render };
|
||||
}
|
||||
|
||||
previousBodyClass = ajaxify.data.bodyClass;
|
||||
$('#footer, #content').removeClass('hide').addClass('ajaxifying');
|
||||
|
||||
ajaxify.loadData(url, function (err, data) {
|
||||
if (!err || (
|
||||
@@ -83,8 +83,12 @@ ajaxify.widgets = { render: render };
|
||||
}
|
||||
|
||||
retry = true;
|
||||
|
||||
renderTemplate(url, data.templateToRender || data.template.name, data, callback);
|
||||
transitions.start(async () => {
|
||||
await renderTemplate(url, data.templateToRender || data.template.name, data);
|
||||
if (typeof callback === 'function') {
|
||||
callback();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
return true;
|
||||
@@ -157,8 +161,12 @@ ajaxify.widgets = { render: render };
|
||||
data.responseJSON.config = config;
|
||||
}
|
||||
|
||||
$('#footer, #content').removeClass('hide').addClass('ajaxifying');
|
||||
return renderTemplate(url, status.toString(), data.responseJSON || {}, callback);
|
||||
transitions.start(async () => {
|
||||
await renderTemplate(url, status.toString(), data.responseJSON || {});
|
||||
if (typeof callback === 'function') {
|
||||
callback();
|
||||
}
|
||||
});
|
||||
} else if (status === 401) {
|
||||
require(['alerts'], function (alerts) {
|
||||
alerts.error('[[global:please_log_in]]');
|
||||
@@ -186,29 +194,24 @@ ajaxify.widgets = { render: render };
|
||||
}
|
||||
}
|
||||
|
||||
function renderTemplate(url, tpl_url, data, callback) {
|
||||
async function renderTemplate(url, tpl_url, data) {
|
||||
hooks.fire('action:ajaxify.loadingTemplates', {});
|
||||
require(['translator', 'benchpress'], function (translator, Benchpress) {
|
||||
Benchpress.render(tpl_url, data)
|
||||
.then(rendered => translator.translate(rendered))
|
||||
.then(function (translated) {
|
||||
translated = translator.unescape(translated);
|
||||
$('body').removeClass(previousBodyClass).addClass(data.bodyClass);
|
||||
$('#content').html(translated);
|
||||
const [translator, Benchpress] = await app.require(['translator', 'benchpressjs']);
|
||||
return Benchpress.render(tpl_url, data)
|
||||
.then(rendered => translator.translate(rendered))
|
||||
.then(function (translated) {
|
||||
console.log('got here');
|
||||
translated = translator.unescape(translated);
|
||||
$('body').removeClass(previousBodyClass).addClass(data.bodyClass);
|
||||
$('#content').html(translated);
|
||||
|
||||
ajaxify.end(url, tpl_url);
|
||||
ajaxify.end(url, tpl_url);
|
||||
transitions.end();
|
||||
|
||||
if (typeof callback === 'function') {
|
||||
callback();
|
||||
}
|
||||
|
||||
$('#content, #footer').removeClass('ajaxifying');
|
||||
|
||||
// Only executed on ajaxify. Otherwise these'd be in ajaxify.end()
|
||||
updateTitle(data.title);
|
||||
updateTags();
|
||||
});
|
||||
});
|
||||
// Only executed on ajaxify. Otherwise these'd be in ajaxify.end()
|
||||
updateTitle(data.title);
|
||||
updateTags();
|
||||
});
|
||||
}
|
||||
|
||||
function updateTitle(title) {
|
||||
|
||||
@@ -30,7 +30,7 @@ define('forum/header', [
|
||||
.removeClass('away online dnd offline')
|
||||
.addClass(status);
|
||||
$('[component="header/usercontrol"] [data-status]').each(function () {
|
||||
$(this).find('span').toggleClass('fw-bold', $(this).attr('data-status') === status);
|
||||
$(this).toggleClass('selected', $(this).attr('data-status') === status);
|
||||
});
|
||||
app.user.status = status;
|
||||
});
|
||||
|
||||
@@ -19,38 +19,13 @@ define('forum/post-queue', [
|
||||
|
||||
handleActions();
|
||||
handleBulkActions();
|
||||
handleContentEdit('.post-content', '.post-content-editable', 'textarea');
|
||||
handleContentEdit('.topic-title', '.topic-title-editable', 'input');
|
||||
handleContentEdit('[data-action="editContent"]', '.post-content-editable', 'textarea', '.post-content');
|
||||
handleContentEdit('[data-action="editTitle"]', '.topic-title-editable', 'input', '.topic-title');
|
||||
|
||||
$('.posts-list').on('click', '.topic-category[data-editable]', function () {
|
||||
const $this = $(this);
|
||||
const id = $this.parents('[data-id]').attr('data-id');
|
||||
categorySelector.modal({
|
||||
onSubmit: function (selectedCategory) {
|
||||
Promise.all([
|
||||
api.get(`/categories/${selectedCategory.cid}`, {}),
|
||||
socket.emit('posts.editQueuedContent', {
|
||||
id: id,
|
||||
cid: selectedCategory.cid,
|
||||
}),
|
||||
]).then(function (result) {
|
||||
const category = result[0];
|
||||
app.parseAndTranslate('post-queue', 'posts', {
|
||||
posts: [{
|
||||
category: category,
|
||||
}],
|
||||
}, function (html) {
|
||||
if ($this.find('.category-text').length) {
|
||||
$this.find('.category-text').text(html.find('.topic-category .category-text').text());
|
||||
} else {
|
||||
// for backwards compatibility, remove in 1.16.0
|
||||
$this.replaceWith(html.find('.topic-category'));
|
||||
}
|
||||
});
|
||||
}).catch(alerts.error);
|
||||
},
|
||||
});
|
||||
return false;
|
||||
$('.posts-list').on('click', '.topic-category[data-editable]', function (e) {
|
||||
handleCategoryChange(this);
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
$('[component="post/content"] img:not(.not-responsive)').addClass('img-fluid');
|
||||
@@ -62,12 +37,13 @@ define('forum/post-queue', [
|
||||
});
|
||||
}
|
||||
|
||||
function handleContentEdit(displayClass, editableClass, inputSelector) {
|
||||
$('.posts-list').on('click', displayClass, function () {
|
||||
function handleContentEdit(triggerClass, editableClass, inputSelector, displayClass) {
|
||||
$('.posts-list').on('click', triggerClass, function () {
|
||||
const el = $(this);
|
||||
const inputEl = el.parent().find(editableClass);
|
||||
const inputEl = el.parents('[data-id]').find(editableClass);
|
||||
const displayEl = el.parents('[data-id]').find(displayClass);
|
||||
if (inputEl.length) {
|
||||
el.addClass('hidden');
|
||||
displayEl.addClass('hidden');
|
||||
inputEl.removeClass('hidden').find(inputSelector).focus();
|
||||
}
|
||||
});
|
||||
@@ -76,7 +52,7 @@ define('forum/post-queue', [
|
||||
const textarea = $(this);
|
||||
const preview = textarea.parent().parent().find(displayClass);
|
||||
const id = textarea.parents('[data-id]').attr('data-id');
|
||||
const titleEdit = displayClass === '.topic-title';
|
||||
const titleEdit = triggerClass === '[data-action="editTitle"]';
|
||||
|
||||
socket.emit('posts.editQueuedContent', {
|
||||
id: id,
|
||||
@@ -87,12 +63,7 @@ define('forum/post-queue', [
|
||||
return alerts.error(err);
|
||||
}
|
||||
if (titleEdit) {
|
||||
if (preview.find('.title-text').length) {
|
||||
preview.find('.title-text').text(data.postData.title);
|
||||
} else {
|
||||
// for backwards compatibility, remove in 1.16.0
|
||||
preview.html(data.postData.title);
|
||||
}
|
||||
preview.find('.title-text').text(data.postData.title);
|
||||
} else {
|
||||
preview.html(data.postData.content);
|
||||
}
|
||||
@@ -103,6 +74,37 @@ define('forum/post-queue', [
|
||||
});
|
||||
}
|
||||
|
||||
function handleCategoryChange(categoryEl) {
|
||||
const $this = $(categoryEl);
|
||||
const id = $this.parents('[data-id]').attr('data-id');
|
||||
categorySelector.modal({
|
||||
onSubmit: function (selectedCategory) {
|
||||
Promise.all([
|
||||
api.get(`/categories/${selectedCategory.cid}`, {}),
|
||||
socket.emit('posts.editQueuedContent', {
|
||||
id: id,
|
||||
cid: selectedCategory.cid,
|
||||
}),
|
||||
]).then(function (result) {
|
||||
const category = result[0];
|
||||
app.parseAndTranslate('post-queue', 'posts', {
|
||||
posts: [{
|
||||
category: category,
|
||||
}],
|
||||
}, function (html) {
|
||||
if ($this.find('.category-text').length) {
|
||||
$this.find('.category-text').text(html.find('.topic-category .category-text').text());
|
||||
} else {
|
||||
// for backwards compatibility, remove in 1.16.0
|
||||
$this.replaceWith(html.find('.topic-category'));
|
||||
}
|
||||
});
|
||||
}).catch(alerts.error);
|
||||
},
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
function handleActions() {
|
||||
const listEl = document.querySelector('.posts-list');
|
||||
if (listEl) {
|
||||
@@ -113,6 +115,12 @@ define('forum/post-queue', [
|
||||
const uid = subselector.closest('[data-uid]').getAttribute('data-uid');
|
||||
|
||||
switch (action) {
|
||||
case 'editCategory': {
|
||||
const categoryEl = e.target.closest('[data-id]').querySelector('.topic-category');
|
||||
handleCategoryChange(categoryEl);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'ban':
|
||||
AccountModerate.banAccount(uid, ajaxify.refresh);
|
||||
break;
|
||||
@@ -151,6 +159,7 @@ define('forum/post-queue', [
|
||||
}
|
||||
|
||||
async function handleQueueActions() {
|
||||
// accept, reject, notify
|
||||
function getMessage() {
|
||||
return new Promise((resolve) => {
|
||||
const modal = bootbox.dialog({
|
||||
|
||||
@@ -328,13 +328,13 @@ module.exports = function (utils, Benchpress, relative_path) {
|
||||
post.parent.username : '[[global:guest]]';
|
||||
const isBeforeCutoff = post.timestamp < (Date.now() - (timeagoCutoff * oneDayInMs));
|
||||
const langSuffix = isBeforeCutoff ? 'on' : 'ago';
|
||||
return `[[topic:replied-to-user-${langSuffix}, ${post.toPid}, ${relative_path}/post/${post.toPid}, ${username}, ${post.timestampISO}]]`;
|
||||
return `[[topic:replied-to-user-${langSuffix}, ${post.toPid}, ${relative_path}/post/${post.toPid}, ${username}, ${relative_path}/post/${post.pid}, ${post.timestampISO}]]`;
|
||||
}
|
||||
|
||||
function generateWrote(post, timeagoCutoff) {
|
||||
const isBeforeCutoff = post.timestamp < (Date.now() - (timeagoCutoff * oneDayInMs));
|
||||
const langSuffix = isBeforeCutoff ? 'on' : 'ago';
|
||||
return `[[topic:wrote-${langSuffix}, ${post.timestampISO}]]`;
|
||||
return `[[topic:wrote-${langSuffix}, ${relative_path}/post/${post.pid}, ${post.timestampISO}]]`;
|
||||
}
|
||||
|
||||
function register() {
|
||||
|
||||
@@ -27,12 +27,17 @@ define('tagFilter', ['hooks', 'alerts', 'bootstrap'], function (hooks, alerts, b
|
||||
}
|
||||
initialTags = selectedTags.slice();
|
||||
|
||||
const toggleSearchVisibilty = searchEl.parent('[component="tag/filter"]').length &&
|
||||
app.user.privileges['search:tags'];
|
||||
|
||||
el.on('show.bs.dropdown', function () {
|
||||
el.find('.dropdown-toggle').css({ visibility: 'hidden' });
|
||||
searchEl.removeClass('hidden');
|
||||
searchEl.css({
|
||||
'z-index': el.find('.dropdown-toggle').css('z-index') + 1,
|
||||
});
|
||||
if (toggleSearchVisibilty) {
|
||||
el.find('.dropdown-toggle').css({ visibility: 'hidden' });
|
||||
searchEl.removeClass('hidden');
|
||||
searchEl.css({
|
||||
'z-index': el.find('.dropdown-toggle').css('z-index') + 1,
|
||||
});
|
||||
}
|
||||
|
||||
function doSearch() {
|
||||
const val = searchEl.find('input').val();
|
||||
@@ -61,8 +66,11 @@ define('tagFilter', ['hooks', 'alerts', 'bootstrap'], function (hooks, alerts, b
|
||||
});
|
||||
|
||||
el.on('hidden.bs.dropdown', function () {
|
||||
el.find('.dropdown-toggle').css({ visibility: 'inherit' });
|
||||
searchEl.addClass('hidden');
|
||||
if (toggleSearchVisibilty) {
|
||||
el.find('.dropdown-toggle').css({ visibility: 'inherit' });
|
||||
searchEl.addClass('hidden');
|
||||
}
|
||||
|
||||
searchEl.off('click');
|
||||
searchEl.find('input').off('keyup');
|
||||
|
||||
|
||||
@@ -35,6 +35,15 @@ define('topicSelect', ['components'], function (components) {
|
||||
select.toggleClass('fa-check-square-o', isSelected);
|
||||
select.toggleClass('fa-square-o', !isSelected);
|
||||
select.parents('[component="category/topic"]').toggleClass('selected', isSelected);
|
||||
updateSelectedBadgeCount();
|
||||
}
|
||||
|
||||
function updateSelectedBadgeCount() {
|
||||
const badge = $('[component="topic/selected/badge"]');
|
||||
if (badge.length) {
|
||||
const count = topicsContainer.find('[component="category/topic"].selected').length;
|
||||
badge.text(count > 0 ? count : '');
|
||||
}
|
||||
}
|
||||
|
||||
TopicSelect.getSelectedTids = function () {
|
||||
|
||||
33
public/src/modules/transitions.js
Normal file
33
public/src/modules/transitions.js
Normal file
@@ -0,0 +1,33 @@
|
||||
let active = false;
|
||||
|
||||
export async function start(process) {
|
||||
if (active) {
|
||||
return;
|
||||
}
|
||||
|
||||
active = true;
|
||||
|
||||
if (!document.startViewTransition) {
|
||||
$('#footer, #content').removeClass('hide').addClass('ajaxifying');
|
||||
await process();
|
||||
return;
|
||||
}
|
||||
|
||||
document.startViewTransition(process);
|
||||
}
|
||||
|
||||
export function end() {
|
||||
if (!active) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!document.startViewTransition) {
|
||||
$('#content, #footer').removeClass('ajaxifying');
|
||||
}
|
||||
|
||||
active = false;
|
||||
}
|
||||
|
||||
export function isActive() {
|
||||
return active;
|
||||
}
|
||||
@@ -397,6 +397,9 @@ authenticationController.onSuccessfulLogin = async function (req, uid) {
|
||||
}
|
||||
};
|
||||
|
||||
const destroyAsync = util.promisify((req, callback) => req.session.destroy(callback));
|
||||
const logoutAsync = util.promisify((req, callback) => req.logout(callback));
|
||||
|
||||
authenticationController.localLogin = async function (req, username, password, next) {
|
||||
if (!username) {
|
||||
return next(new Error('[[error:invalid-username]]'));
|
||||
@@ -431,9 +434,17 @@ authenticationController.localLogin = async function (req, username, password, n
|
||||
return next(new Error('[[error:local-login-disabled]]'));
|
||||
}
|
||||
|
||||
const passwordMatch = await user.isPasswordCorrect(uid, password, req.ip);
|
||||
if (!passwordMatch) {
|
||||
return next(new Error('[[error:invalid-login-credentials]]'));
|
||||
try {
|
||||
const passwordMatch = await user.isPasswordCorrect(uid, password, req.ip);
|
||||
if (!passwordMatch) {
|
||||
return next(new Error('[[error:invalid-login-credentials]]'));
|
||||
}
|
||||
} catch (e) {
|
||||
if (req.loggedIn) {
|
||||
await logoutAsync(req);
|
||||
await destroyAsync(req);
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
|
||||
next(null, userData, '[[success:authentication-successful]]');
|
||||
@@ -442,9 +453,6 @@ authenticationController.localLogin = async function (req, username, password, n
|
||||
}
|
||||
};
|
||||
|
||||
const destroyAsync = util.promisify((req, callback) => req.session.destroy(callback));
|
||||
const logoutAsync = util.promisify((req, callback) => req.logout(callback));
|
||||
|
||||
authenticationController.logout = async function (req, res, next) {
|
||||
if (!req.loggedIn || !req.sessionID) {
|
||||
res.clearCookie(nconf.get('sessionKey'), meta.configs.cookie.get());
|
||||
@@ -456,7 +464,6 @@ authenticationController.logout = async function (req, res, next) {
|
||||
try {
|
||||
await user.auth.revokeSession(sessionID, uid);
|
||||
await logoutAsync(req);
|
||||
|
||||
await destroyAsync(req);
|
||||
res.clearCookie(nconf.get('sessionKey'), meta.configs.cookie.get());
|
||||
|
||||
|
||||
@@ -57,9 +57,10 @@ module.exports = function (Messaging) {
|
||||
};
|
||||
|
||||
async function sendNotifications(fromuid, uids, roomId, messageObj) {
|
||||
const isOnline = await user.isOnline(uids);
|
||||
uids = uids.filter((uid, index) => !isOnline[index] && parseInt(fromuid, 10) !== parseInt(uid, 10));
|
||||
const hasRead = await Messaging.hasRead(uids, roomId);
|
||||
uids = uids.filter((uid, index) => !hasRead[index] && parseInt(fromuid, 10) !== parseInt(uid, 10));
|
||||
if (!uids.length) {
|
||||
delete Messaging.notifyQueue[`${fromuid}:${roomId}`];
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,14 @@ module.exports = function (Messaging) {
|
||||
await db.sortedSetRemove(`uid:${uid}:chat:rooms:unread`, roomId);
|
||||
};
|
||||
|
||||
Messaging.hasRead = async (uids, roomId) => {
|
||||
const isMembers = await db.isMemberOfSortedSets(
|
||||
uids.map(uid => `uid:${uid}:chat:rooms:unread`),
|
||||
roomId
|
||||
);
|
||||
return uids.map((uid, index) => !isMembers[index]);
|
||||
};
|
||||
|
||||
Messaging.markAllRead = async (uid) => {
|
||||
await db.delete(`uid:${uid}:chat:rooms:unread`);
|
||||
};
|
||||
|
||||
@@ -70,7 +70,7 @@ async function beforeBuild(targets) {
|
||||
await plugins.prepareForBuild(targets);
|
||||
await mkdirp(path.join(__dirname, '../../build/public'));
|
||||
} catch (err) {
|
||||
winston.error(`[build] Encountered error preparing for build\n${err.stack}`);
|
||||
winston.error(`[build] Encountered error preparing for build`);
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
@@ -197,7 +197,7 @@ exports.build = async function (targets, options) {
|
||||
await cacheBuster.write();
|
||||
winston.info(`[build] Asset compilation successful. Completed in ${totalTime}sec.`);
|
||||
} catch (err) {
|
||||
winston.error(`[build] Encountered error during build step\n${err.stack ? err.stack : err}`);
|
||||
winston.error(`[build] Encountered error during build step`);
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -65,7 +65,6 @@ async function getTemplateDirs(activePlugins) {
|
||||
theme = themeConfig.baseTheme;
|
||||
}
|
||||
|
||||
themeTemplates.push(nconf.get('base_templates_path'));
|
||||
themeTemplates = _.uniq(themeTemplates.reverse());
|
||||
|
||||
const coreTemplatesPath = nconf.get('core_templates_path');
|
||||
|
||||
@@ -159,7 +159,7 @@ Themes.setupPaths = async () => {
|
||||
const themeObj = data.themesData.find(themeObj => themeObj.id === themeId);
|
||||
|
||||
if (!themeObj) {
|
||||
throw new Error('[[error:theme-not-found]]');
|
||||
throw new Error('theme-not-found');
|
||||
}
|
||||
|
||||
Themes.setPath(themeObj);
|
||||
@@ -167,13 +167,16 @@ Themes.setupPaths = async () => {
|
||||
|
||||
Themes.setPath = function (themeObj) {
|
||||
// Theme's templates path
|
||||
let themePath = nconf.get('base_templates_path');
|
||||
let themePath;
|
||||
const fallback = path.join(nconf.get('themes_path'), themeObj.id, 'templates');
|
||||
|
||||
if (themeObj.templates) {
|
||||
themePath = path.join(nconf.get('themes_path'), themeObj.id, themeObj.templates);
|
||||
} else if (file.existsSync(fallback)) {
|
||||
themePath = fallback;
|
||||
} else {
|
||||
winston.error('[themes] Unable to resolve this theme\'s templates. Expected to be at "templates/" or defined in the "templates" property of "theme.json"');
|
||||
throw new Error('theme-missing-templates');
|
||||
}
|
||||
|
||||
nconf.set('theme_templates_path', themePath);
|
||||
|
||||
@@ -75,7 +75,6 @@ function loadConfig(configFile) {
|
||||
// Ensure themes_path is a full filepath
|
||||
nconf.set('themes_path', path.resolve(paths.baseDir, nconf.get('themes_path')));
|
||||
nconf.set('core_templates_path', path.join(paths.baseDir, 'src/views'));
|
||||
nconf.set('base_templates_path', path.join(nconf.get('themes_path'), 'nodebb-theme-harmony/templates'));
|
||||
|
||||
nconf.set('upload_path', path.resolve(nconf.get('base_dir'), nconf.get('upload_path')));
|
||||
nconf.set('upload_url', '/assets/uploads');
|
||||
|
||||
@@ -120,7 +120,12 @@ async function onMessage(socket, payload) {
|
||||
return winston.warn('[socket.io] Empty method name');
|
||||
}
|
||||
|
||||
const parts = eventName.toString().split('.');
|
||||
if (typeof eventName !== 'string') {
|
||||
const escapedName = validator.escape(String(eventName));
|
||||
return callback({ message: `[[error:invalid-event, ${escapedName}]]` });
|
||||
}
|
||||
|
||||
const parts = eventName.split('.');
|
||||
const namespace = parts[0];
|
||||
const methodToCall = parts.reduce((prev, cur) => {
|
||||
if (prev !== null && prev[cur] && (!prev.hasOwnProperty || prev.hasOwnProperty(cur))) {
|
||||
|
||||
@@ -73,11 +73,6 @@ module.exports = function (SocketTopics) {
|
||||
|
||||
// used by tag filter search
|
||||
SocketTopics.tagFilterSearch = async function (socket, data) {
|
||||
const allowed = await privileges.global.can('search:tags', socket.uid);
|
||||
if (!allowed) {
|
||||
throw new Error('[[error:no-privileges]]');
|
||||
}
|
||||
|
||||
let cids = [];
|
||||
if (Array.isArray(data.cids)) {
|
||||
cids = await privileges.categories.filterCids('topics:read', data.cids, socket.uid);
|
||||
@@ -87,6 +82,10 @@ module.exports = function (SocketTopics) {
|
||||
|
||||
let tags = [];
|
||||
if (data.query) {
|
||||
const allowed = await privileges.global.can('search:tags', socket.uid);
|
||||
if (!allowed) {
|
||||
throw new Error('[[error:no-privileges]]');
|
||||
}
|
||||
tags = await topics.searchTags({
|
||||
query: data.query,
|
||||
cid: cids.length === 1 ? cids[0] : null,
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<span component="category-selector-selected">[[topic:thread_tools.select_category]]</span> <span class="caret"></span>
|
||||
</button>
|
||||
<div component="category-selector-search" class="hidden position-absolute">
|
||||
<input type="text" class="form-control" autocomplete="off">
|
||||
<input type="text" class="form-control" placeholder="[[search:type-to-search]]" autocomplete="off">
|
||||
</div>
|
||||
<ul component="category/list" class="dropdown-menu category-dropdown-menu" role="menu">
|
||||
<li component="category/no-matches" role="presentation" class="category hidden">
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
{{{ end }}}</span> <span class="caret"></span>
|
||||
</button>
|
||||
<div component="category-selector-search" class="hidden position-absolute">
|
||||
<input type="text" class="form-control" autocomplete="off">
|
||||
<input type="text" class="form-control" placeholder="[[search:type-to-search]]" autocomplete="off">
|
||||
</div>
|
||||
<ul component="category/list" class="dropdown-menu category-dropdown-menu" role="menu">
|
||||
<li component="category/no-matches" role="presentation" class="category hidden">
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<span>[[admin/manage/groups:privileges]]</span> <span class="caret"></span>
|
||||
</button>
|
||||
<div component="category-selector-search" class="hidden position-absolute">
|
||||
<input type="text" class="form-control" autocomplete="off">
|
||||
<input type="text" class="form-control" placeholder="[[search:type-to-search]]" autocomplete="off">
|
||||
</div>
|
||||
<ul component="category/list" class="dropdown-menu category-dropdown-menu dropdown-menu-end" role="menu">
|
||||
<li component="category/no-matches" role="presentation" class="category hidden">
|
||||
|
||||
@@ -107,6 +107,15 @@ describe('socket.io', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should return error for invalid eventName type', (done) => {
|
||||
const eventName = ['topics.loadMoreTags'];
|
||||
io.emit(eventName, (err) => {
|
||||
const eventAsString = String(eventName);
|
||||
assert.strictEqual(err.message, `[[error:invalid-event, ${eventAsString}]]`);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should get installed themes', (done) => {
|
||||
const themes = ['nodebb-theme-persona'];
|
||||
io.emit('admin.themes.getInstalled', (err, data) => {
|
||||
|
||||
Reference in New Issue
Block a user