diff --git a/CHANGELOG.md b/CHANGELOG.md
index aeca12a4f..a3f3e0ccd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -84,6 +84,11 @@ Otherwise, to update from 4.1.0 to 4.2.0:
* add support for strict mode
* supports undo/redo
* [#195](https://github.com/xwiki-labs/cryptpad/issues/195)
+* fix kanban import
+* file upload
+ * warn before attempting to upload a file that is too large
+ * [#682](https://github.com/xwiki-labs/cryptpad/issues/682)
+ * disallow upload outside of the documents section of drives
# 4.1.0 (B)
diff --git a/customize.dist/loading.js b/customize.dist/loading.js
index 59cba470c..ff26ad6c6 100644
--- a/customize.dist/loading.js
+++ b/customize.dist/loading.js
@@ -25,7 +25,7 @@ define([
].join('');
var built = false;
- var types = ['less', 'drive', 'migrate', 'sf', 'team', 'pad', 'end'];
+ var types = ['less', 'drive', 'migrate', 'sf', 'team', 'pad', 'end']; // Msg.loading_state_0, loading_state_1, loading_state_2, loading_state_3, loading_state_4, loading_state_5
var current, progress;
var makeList = function (data) {
var c = types.indexOf(data.type);
diff --git a/scripts/unused-translations.js b/scripts/unused-translations.js
index 9c09ad54e..98a57bf16 100644
--- a/scripts/unused-translations.js
+++ b/scripts/unused-translations.js
@@ -13,7 +13,7 @@ var ignoreLines = function (source, pattern) {
};
var GENERATED_PATTERNS = [
- /(admin|settings)_.*(Hint|Title|Button)/,
+ /(team|admin|settings|support)_.*(Hint|Title|Button)/,
/settings_colortheme/,
/loading_(state|drive|pad)_/,
/(admin|notifications|support|team|settings)_cat_/,
@@ -28,7 +28,10 @@ var isPossiblyGenerated = function (key) {
var grep = function (pattern, cb) {
var exclude = [
'www/common/translations/*',
- 'www/common/onlyoffice/*',
+ 'www/common/onlyoffice/v1/*',
+ 'www/common/onlyoffice/v2b*',
+ 'www/common/onlyoffice/x2t/*',
+ //'www/common/onlyoffice/build/*',
'www/lib/*',
'www/common/pdfjs/*',
'*.css',
@@ -75,7 +78,7 @@ var grep = function (pattern, cb) {
if (/data\-localization/.test(stdout)) {
return cb(void 0, true, "DATA_LOCALIZATION", stdout);
}
- if (/(Messages|Msg|messages)\./.test(stdout)) {
+ if (/(Messages|Msg|messages)\./.test(stdout) || /(footLink|footerCol)/.test(stdout)) {
return cb(void 0, false);
}
diff --git a/www/admin/inner.js b/www/admin/inner.js
index 444ff6c05..f99b98fda 100644
--- a/www/admin/inner.js
+++ b/www/admin/inner.js
@@ -273,7 +273,7 @@ define([
return $div;
};
- var getPrettySize = function (bytes) {
+ var getPrettySize = function (bytes) { // XXX duplicate of UIElements.prettySize ?
var unit = Util.magnitudeOfBytes(bytes);
var value = unit === 'GB' ? Util.bytesToGigabytes(bytes) : Util.bytesToMegabytes(bytes);
return unit === 'GB' ? Messages._getKey('formattedGB', [value])
diff --git a/www/common/common-ui-elements.js b/www/common/common-ui-elements.js
index 50c4b34ee..975810a88 100644
--- a/www/common/common-ui-elements.js
+++ b/www/common/common-ui-elements.js
@@ -35,9 +35,9 @@ define([
UIElements.prettySize = function (bytes) {
var kB = Util.bytesToKilobytes(bytes);
- if (kB < 1024) { return kB + Messages.KB; }
+ if (kB < 1024) { return kB + Messages.KB; } // XXX replace with Msg.formattedKB ?
var mB = Util.bytesToMegabytes(bytes);
- return mB + Messages.MB;
+ return mB + Messages.MB; // XXX replace with Msg.formattedMB
};
UIElements.updateTags = function (common, hrefs) {
@@ -911,18 +911,22 @@ define([
};
var actions = {
'bold': {
+ // Msg.mdToolbar_bold
expr: '**{0}**',
icon: 'fa-bold'
},
'italic': {
+ // Msg.mdToolbar_italic
expr: '_{0}_',
icon: 'fa-italic'
},
'strikethrough': {
+ // Msg.mdToolbar_strikethrough
expr: '~~{0}~~',
icon: 'fa-strikethrough'
},
'heading': {
+ // Msg.mdToolbar_heading
apply: function (str) {
return '\n'+clean(str).split('\n').map(function (line) {
return '# '+line;
@@ -931,10 +935,12 @@ define([
icon: 'fa-header'
},
'link': {
+ // Msg.mdToolbar_link
expr: '[{0}](http://)',
icon: 'fa-link'
},
'quote': {
+ // Msg.mdToolbar_quote
apply: function (str) {
return '\n\n'+str.split('\n').map(function (line) {
return '> '+line;
@@ -943,6 +949,7 @@ define([
icon: 'fa-quote-right'
},
'nlist': {
+ // Msg.mdToolbar_nlist
apply: function (str) {
return '\n'+clean(str).split('\n').map(function (line) {
return '1. '+line;
@@ -951,6 +958,7 @@ define([
icon: 'fa-list-ol'
},
'list': {
+ // Msg.mdToolbar_list
apply: function (str) {
return '\n'+clean(str).split('\n').map(function (line) {
return '* '+line;
@@ -959,6 +967,7 @@ define([
icon: 'fa-list-ul'
},
'check': {
+ // Msg.mdToolbar_check
apply: function (str) {
return '\n' + clean(str).split('\n').map(function (line) {
return '* [ ] ' + line;
@@ -967,6 +976,7 @@ define([
icon: 'fa-check-square-o'
},
'code': {
+ // Msg.mdToolbar_code
apply: function (str) {
if (str.indexOf('\n') !== -1) {
return '\n```\n' + clean(str) + '\n```\n';
@@ -976,6 +986,7 @@ define([
icon: 'fa-code'
},
'toc': {
+ // Msg.mdToolbar_toc
expr: '[TOC]',
icon: 'fa-newspaper-o'
}
diff --git a/www/common/common-util.js b/www/common/common-util.js
index 1518cf0d8..1c2bc0222 100644
--- a/www/common/common-util.js
+++ b/www/common/common-util.js
@@ -272,7 +272,7 @@
else if (bytes >= oneMegabyte) { return 'MB'; }
};
- Util.getPrettySize = function (bytes, Messages) {
+ Util.getPrettySize = function (bytes, Messages) { // XXX not used anywhere?
var unit = Util.magnitudeOfBytes(bytes);
if (unit === 'GB') {
return Messages._getKey('formattedGB', [Util.bytesToGigabytes(bytes)]);
diff --git a/www/common/make-backup.js b/www/common/make-backup.js
index 9ba925fd7..3f66c1310 100644
--- a/www/common/make-backup.js
+++ b/www/common/make-backup.js
@@ -310,18 +310,18 @@ define([
cache: cache
};
var filesData = data.sharedFolderId && ctx.sf[data.sharedFolderId] ? ctx.sf[data.sharedFolderId].filesData : ctx.data.filesData;
- progress('reading', -1);
+ progress('reading', -1); // Msg.settings_export_reading
nThen(function (waitFor) {
ctx.waitFor = waitFor;
var zipRoot = ctx.zip.folder(data.name || Messages.fm_rootName);
makeFolder(ctx, ctx.folder || ctx.data.root, zipRoot, filesData);
- progress('download', {});
+ progress('download', {}); // Msg.settings_export_download
}).nThen(function () {
console.log(ctx.zip);
console.log(ctx.errors);
- progress('compressing', -1);
+ progress('compressing', -1); // Msg.settings_export_compressing
ctx.zip.generateAsync({type: 'blob'}).then(function (content) {
- progress('done', -1);
+ progress('done', -1); // Msg.settings_export_done
cb(content, ctx.errors);
});
});
diff --git a/www/common/notifications.js b/www/common/notifications.js
index caf5bfe00..478b765c7 100644
--- a/www/common/notifications.js
+++ b/www/common/notifications.js
@@ -86,9 +86,9 @@ define([
var content = data.content;
var msg = content.msg;
var type = Hash.parsePadUrl(msg.content.href).type;
- var key = type === 'drive' ? 'notification_folderShared' :
- (type === 'file' ? 'notification_fileShared' :
- 'notification_padShared');
+ var key = type === 'drive' ? 'notification_folderShared' : // Msg.notification_folderSharedTeam
+ (type === 'file' ? 'notification_fileShared' : // Msg.notification_fileSharedTeam
+ 'notification_padShared'); // Msg.notification_padSharedTeam
var teamNotification = /^team-/.test(data.type) && Number(data.type.slice(5));
var teamName = '';
@@ -220,7 +220,7 @@ define([
var name = Util.fixHTML(msg.content.user.displayName) || Messages.anonymous;
var title = Util.fixHTML(msg.content.title);
content.getFormatText = function() {
- return Messages._getKey('owner_request', [name, title]);
+ return Messages._getKey('owner_request', [name, title]); // Msg.owner_request_accepted, .owner_request_declined
};
// Check authenticity
@@ -260,7 +260,7 @@ define([
// Display the notification
var name = Util.fixHTML(msg.content.user.displayName) || Messages.anonymous;
var title = Util.fixHTML(msg.content.title);
- var key = 'owner_removed' + (msg.content.pending ? 'Pending' : '');
+ var key = 'owner_removed' + (msg.content.pending ? 'Pending' : ''); // Msg.owner_removed, owner_removedPending
content.getFormatText = function() {
return Messages._getKey(key, [name, title]);
};
@@ -311,7 +311,7 @@ define([
var name = Util.fixHTML(msg.content.user.displayName) || Messages.anonymous;
var teamName = Util.fixHTML(Util.find(msg, ['content', 'team', 'metadata', 'name']) || '') ||
Util.fixHTML(Util.find(msg, ['content', 'teamName']));
- var key = 'team_' + (msg.content.answer ? 'accept' : 'decline') + 'Invitation';
+ var key = 'team_' + (msg.content.answer ? 'accept' : 'decline') + 'Invitation'; // Msg.team_acceptInvitation, team_declineInvitation
content.getFormatText = function() {
return Messages._getKey(key, [name, teamName]);
};
diff --git a/www/common/toolbar.js b/www/common/toolbar.js
index 7541cc1c6..ce17c3fcf 100644
--- a/www/common/toolbar.js
+++ b/www/common/toolbar.js
@@ -940,9 +940,9 @@ MessengerUI, Messages) {
var todo = function (e, overLimit) {
if (e) { return void console.error("Unable to get the pinned usage", e); }
if (overLimit) {
- var key = 'pinLimitReachedAlert';
+ var key = 'pinLimitReachedAlert'; // Msg.pinLimitReachedAlert
if (!ApiConfig.allowSubscriptions) {
- key = 'pinLimitReachedAlertNoAccounts';
+ key = 'pinLimitReachedAlertNoAccounts'; // Msg.pinLimitReachedAlertNoAccounts
}
$limit.show().click(function () {
UI.alert(Messages._getKey(key, [encodeURIComponent(l.hostname)]), null, true);
diff --git a/www/common/translations/messages.ca.json b/www/common/translations/messages.ca.json
index ed744a64f..e9289ed56 100644
--- a/www/common/translations/messages.ca.json
+++ b/www/common/translations/messages.ca.json
@@ -50,7 +50,6 @@
"initializing": "Inicialitzant...",
"forgotten": "Desplaçat a la brossa",
"errorState": "Error crític: {0}",
- "lag": "Latència",
"readonly": "Només de lectura",
"anonymous": "Anònim",
"users": "Persones usuàries",
@@ -488,7 +487,6 @@
"upload_up": "Carrega",
"download_mt_button": "Descarrega",
"home_host": "Aquesta és una instància comunitària independent de CryptPad. El codi font està disponiblea GitHub.",
- "home_product": "CryptPad és una alternativa, respectuosa amb la privacitat, a les utilitats d'oficina i els serveis al núvol. Tot el contingut desat a CryptPad es xifra abans de ser enviat, això vol dir que ningú pot accedir a les vostres dades sense que li doneu les claus (fins i tot nosaltres).",
"mdToolbar_toc": "Taula de continguts",
"mdToolbar_code": "Codi",
"mdToolbar_check": "Llista de tasques",
diff --git a/www/common/translations/messages.de.json b/www/common/translations/messages.de.json
index 83c545368..891443d94 100644
--- a/www/common/translations/messages.de.json
+++ b/www/common/translations/messages.de.json
@@ -48,7 +48,6 @@
"initializing": "Starten...",
"forgotten": "In den Papierkorb verschoben",
"errorState": "Kritischer Fehler: {0}",
- "lag": "Verzögerung",
"readonly": "schreibgeschützt",
"anonymous": "Anonym",
"users": "Nutzer",
@@ -486,7 +485,6 @@
"mdToolbar_list": "Aufzählung",
"mdToolbar_check": "Aufgabenliste",
"mdToolbar_code": "Code",
- "home_product": "CryptPad ist eine Alternative mit eingebautem Datenschutz zu verbreiteten Office- und Clouddiensten. Mit CryptPad wird der gesamte Inhalt verschlüsselt, bevor er an den Server gesendet wird. Das bedeutet, dass keiner auf den Inhalt zugreifen kann, es sei denn du gibst die Schlüssel weiter. Selbst wir haben diesen Zugriff nicht.",
"home_host": "Dies ist eine unabhängige Installation der CrypPad-Software.",
"main_catch_phrase": "Suite zur Zusammenarbeit,
verschlüsselt und quelloffen",
"footer_aboutUs": "Über uns",
diff --git a/www/common/translations/messages.el.json b/www/common/translations/messages.el.json
index ba2400d1c..283262209 100644
--- a/www/common/translations/messages.el.json
+++ b/www/common/translations/messages.el.json
@@ -32,7 +32,6 @@
"initializing": "Γίνεται προετοιμασία...",
"forgotten": "Μετακινήθηκε στον κάδο ανακύκλωσης",
"errorState": "Κρίσιμο σφάλμα: {0}",
- "lag": "Αργή σύνδεση",
"readonly": "Λειτουργία ανάγνωσης μόνο",
"anonymous": "Ανώνυμος/η",
"users": "Χρήστες",
diff --git a/www/common/translations/messages.es.json b/www/common/translations/messages.es.json
index 3bad6bb11..11b04c5d5 100644
--- a/www/common/translations/messages.es.json
+++ b/www/common/translations/messages.es.json
@@ -18,7 +18,6 @@
"disconnected": "Desconectado",
"synchronizing": "Sincronizando",
"reconnecting": "Reconectando",
- "lag": "Retraso",
"readonly": "Sólo lectura",
"anonymous": "Anónimo",
"users": "Usuarios",
@@ -559,7 +558,6 @@
"mdToolbar_check": "Lista de tarea",
"mdToolbar_code": "Código",
"mdToolbar_toc": "Tablas de contenidos",
- "home_product": "CryptPad es una alternativa privada por diseño a las populares herramientas de oficina y servicios en la nube. Todo el contenido almacenado en CryptPad está encriptado antes de ser enviado, lo que significa que nadie puede acceder a sus datos a menos que usted les dé las claves (ni siquiera nosotros).",
"home_host": "Esta es una instancia de comunidad independiente de CryptPad. Su código fuente está disponible en GitHub .",
"whatis_title": "¿Que es CryptPad?",
"whatis_collaboration": "Colaboración fácil y rápida",
diff --git a/www/common/translations/messages.fi.json b/www/common/translations/messages.fi.json
index 9248080f8..37b57978c 100644
--- a/www/common/translations/messages.fi.json
+++ b/www/common/translations/messages.fi.json
@@ -51,7 +51,6 @@
"initializing": "Valmistellaan...",
"forgotten": "Siirretty roskakoriin",
"errorState": "Vakava virhe: {0}",
- "lag": "Viive",
"readonly": "Vain luku",
"anonymous": "Anonyymi",
"users": "Käyttäjät",
@@ -508,7 +507,6 @@
"mdToolbar_check": "Tehtävälista",
"mdToolbar_code": "Koodi",
"mdToolbar_toc": "Sisällysluettelo",
- "home_product": "CryptPad on sisäänrakennetun tietosuojan periaatteen mukainen vaihtoehto suosituille toimisto-ohjelmistoille ja pilvipalveluille. Kaikki CryptPadiin tallennettavat tiedot salataan ennen palvelimelle lähettämistä. Kukaan (emme edes me) ei voi päästä tietoihisi ilman avaimiasi.",
"home_host": "Tämä on itsenäinen yhteisön ylläpitämä Cryptpad-instanssi.",
"main_catch_phrase": "Avoimen lähdekoodin salattu kollaboraatioalusta",
"footer_aboutUs": "Tietoa meistä",
diff --git a/www/common/translations/messages.fr.json b/www/common/translations/messages.fr.json
index db35132c8..8b08db321 100644
--- a/www/common/translations/messages.fr.json
+++ b/www/common/translations/messages.fr.json
@@ -49,7 +49,6 @@
"initializing": "Initialisation...",
"forgotten": "Déplacé vers la corbeille",
"errorState": "Erreur critique : {0}",
- "lag": "Latence",
"readonly": "Lecture seule",
"anonymous": "Anonyme",
"users": "Utilisateurs",
@@ -493,7 +492,6 @@
"mdToolbar_list": "Liste à puces",
"mdToolbar_check": "Liste de tâches",
"mdToolbar_code": "Code",
- "home_product": "CryptPad est une alternative respectant la vie privée aux outils office et aux services cloud populaires. Tout le contenu stocké dans CryptPad est chiffré avant d'être envoyé, ce qui signifie que personne ne peut accéder à vos données à moins que vous ne leur donniez les clés (même pas nous).",
"home_host": "Ceci est une instance communautaire et indépendante de CryptPad.",
"main_catch_phrase": "Outils collaboratifs,
chiffrés et open source",
"footer_aboutUs": "À propos",
diff --git a/www/common/translations/messages.it.json b/www/common/translations/messages.it.json
index 6ca9909d3..9fe345bb5 100644
--- a/www/common/translations/messages.it.json
+++ b/www/common/translations/messages.it.json
@@ -50,7 +50,6 @@
"initializing": "Inizializzazione in corso...",
"forgotten": "Spostato nel cestino",
"errorState": "Errore critico: {0}",
- "lag": "Latenza",
"readonly": "Sola lettura",
"anonymous": "Anonimo",
"users": "Utenti",
@@ -574,7 +573,6 @@
"whatis_collaboration": "Collaborazione veloce, facile",
"terms": "Condizioni del servizio",
"main_catch_phrase": "Il cloud Zero Knowledge",
- "home_product": "CryptPad è un'alternativa ai comuni strumenti office e cloud rispettosa della privacy. Tutti i contenuti immagazzinati in CryptPad sono crittografati prima di essere spediti, ciò significa che nessuno può accedere ai tuoi dati a meno che tu non gli dia la chiave (nemmeno noi).",
"mdToolbar_check": "Elenco delle attività",
"mdToolbar_heading": "Titolo",
"mdToolbar_strikethrough": "Barrato",
diff --git a/www/common/translations/messages.json b/www/common/translations/messages.json
index 5c4320f61..523414279 100644
--- a/www/common/translations/messages.json
+++ b/www/common/translations/messages.json
@@ -51,7 +51,6 @@
"initializing": "Initializing...",
"forgotten": "Moved to the trash",
"errorState": "Critical error: {0}",
- "lag": "Lag",
"readonly": "Read only",
"anonymous": "Anonymous",
"users": "Users",
@@ -508,7 +507,6 @@
"mdToolbar_check": "Task list",
"mdToolbar_code": "Code",
"mdToolbar_toc": "Table of Contents",
- "home_product": "CryptPad is a private-by-design alternative to popular office tools and cloud services. All the content stored on CryptPad is encrypted before being sent, which means nobody can access your data unless you give them the keys (not even us).",
"home_host": "This is an independent community instance of CryptPad.",
"main_catch_phrase": "Collaboration suite,
encrypted and open-source",
"footer_aboutUs": "About us",
diff --git a/www/common/translations/messages.nb.json b/www/common/translations/messages.nb.json
index fb27a6fb4..21860c57d 100644
--- a/www/common/translations/messages.nb.json
+++ b/www/common/translations/messages.nb.json
@@ -46,7 +46,6 @@
"initializing": "Setter i gang…",
"forgotten": "Flytta til papirkurven",
"errorState": "Kritisk feil: {0}",
- "lag": "Treighet",
"readonly": "Skrivebeskyttet",
"anonymous": "Anonym",
"users": "Brukere",
diff --git a/www/common/translations/messages.nl.json b/www/common/translations/messages.nl.json
index 883b88e47..556cab512 100644
--- a/www/common/translations/messages.nl.json
+++ b/www/common/translations/messages.nl.json
@@ -144,7 +144,6 @@
"users": "Gebruikers",
"anonymous": "Anoniem",
"readonly": "Alleen-lezen",
- "lag": "Vertraging",
"errorState": "Kritieke fout: {0}",
"forgotten": "Verplaatst naar de prullenbak",
"initializing": "Bezig met initialiseren...",
diff --git a/www/common/translations/messages.pl.json b/www/common/translations/messages.pl.json
index c7c637e57..81d7e134e 100644
--- a/www/common/translations/messages.pl.json
+++ b/www/common/translations/messages.pl.json
@@ -13,7 +13,6 @@
"disconnected": "Rozłączony",
"synchronizing": "Synchronizacja",
"reconnecting": "Wznawianie połączenia...",
- "lag": "Lag",
"readonly": "Tylko do odczytu",
"anonymous": "Anonimowy",
"users": "Użytkownicy",
diff --git a/www/common/translations/messages.pt-br.json b/www/common/translations/messages.pt-br.json
index b7337fa36..eed784a38 100644
--- a/www/common/translations/messages.pt-br.json
+++ b/www/common/translations/messages.pt-br.json
@@ -30,7 +30,6 @@
"disconnected": "Desconectado",
"synchronizing": "Sincronizando",
"reconnecting": "Reconectando...",
- "lag": "Lag",
"readonly": "Somente leitura",
"anonymous": "Anonimo",
"users": "Usuários",
diff --git a/www/common/translations/messages.ro.json b/www/common/translations/messages.ro.json
index 627867163..0449a55ed 100644
--- a/www/common/translations/messages.ro.json
+++ b/www/common/translations/messages.ro.json
@@ -15,7 +15,6 @@
"disconnected": "Deconectat",
"synchronizing": "Se sincronizează",
"reconnecting": "Reconectare...",
- "lag": "Decalaj",
"readonly": "Mod citire",
"anonymous": "Anonim",
"users": "Utilizatori",
diff --git a/www/common/translations/messages.ru.json b/www/common/translations/messages.ru.json
index b0e4c62f2..f61f8bee8 100644
--- a/www/common/translations/messages.ru.json
+++ b/www/common/translations/messages.ru.json
@@ -49,7 +49,6 @@
"initializing": "Инициализация...",
"forgotten": "Удалено в корзину",
"errorState": "Критическая ошибка: {0}",
- "lag": "Задержка",
"readonly": "Только для чтения",
"anonymous": "Анонимный",
"users": "Пользователи",
@@ -652,7 +651,6 @@
"topbar_whatIsCryptpad": "Что такое CryptPad",
"blog": "Блог",
"contact": "Контакты",
- "home_product": "CryptPad это конфиденциальная альтернатива популярным офисным инструментам и облачным сервисам. Вся информация, хранимая в CryptPad, шифруется до отправки на сервер, и никто (даже мы) не сможет получить доступ к ней, пока вы не предоставите ключ для расшифровки.",
"privacy": "Политика конфиденциальности",
"footer_aboutUs": "О нас",
"home_host": "Это независимый общественный сервер CryptPad.",
diff --git a/www/common/translations/messages.sv.json b/www/common/translations/messages.sv.json
index 1e3100e32..8f09b15aa 100644
--- a/www/common/translations/messages.sv.json
+++ b/www/common/translations/messages.sv.json
@@ -54,7 +54,6 @@
"colorButtonTitle": "Ändra textfärgen i presentationsläge",
"useTemplateCancel": "Starta tomt (Esc)",
"pinLimitReachedAlert": "Du har nått din lagringsgräns. Nya dokument kommer inte lagras i din CryptDrive.
Du kan antingen ta bort dokument från din CryptDrive eller eller prenumerera på premium för att öka din lagringsgräns.",
- "lag": "Fördröjning",
"anonymousStoreDisabled": "Administratören för denna CryptPad-instans har avaktiverat anonyma användare. Du måste logga in för att kunna använda CryptDrive.",
"common_connectionLost": "Serveranslutning tappad
Du är nu i skrivskyddat läge tills anslutningen är tillbaka.",
"button_newcode": "Nytt kod-dokument",
diff --git a/www/common/translations/messages.zh.json b/www/common/translations/messages.zh.json
index 20d057e11..0220f337f 100644
--- a/www/common/translations/messages.zh.json
+++ b/www/common/translations/messages.zh.json
@@ -30,7 +30,6 @@
"disconnected": "已斷線",
"synchronizing": "同步中",
"reconnecting": "重新連結...",
- "lag": "Lag",
"readonly": "唯讀",
"anonymous": "匿名",
"users": "用戶",