diff --git a/README.md b/README.md
index 0a92aae30..9cf30065a 100644
--- a/README.md
+++ b/README.md
@@ -134,6 +134,7 @@ Apps are listed in the Bangle.js menu, accessible from a clock app via the middl
* `app.png` - app icon - 48x48px
* `app-icon.js` - JS version of the icon (made with http://www.espruino.com/Image+Converter) for use in Bangle.js's menu
* `app.js` - app code
+* `ChangeLog` - A file containing a list of changes to your app so users can see what's changed
#### `app-icon.js`
@@ -189,9 +190,23 @@ When the widget is to be drawn, `x` and `y` values are set up in `WIDGETS["mywid
and `draw` can then use `this.x` and `this.y` to figure out where it needs to draw to.
+### ChangeLog
+
+This is a file containing a list of changes to your app so users can see what's changed, for example:
+
+```
+0.01: New App!
+0.02: Changed the colors
+0.03: Made the app run quicker
+```
+
+Entries should be newest last, with the version number of the last entry matching the version in `metadata.json`
+
+Please keep the same format at the example as the file needs to be parsed by the BangleApps tools.
+
### `app.info` format
-This is the file that's **auto-generated** and loaded onto Bangle.js by the App Loader,
+This is the file that's **auto-generated** from `metadata.json` and loaded onto Bangle.js by the App Loader,
and which gives information about the app for the Launcher.
```
diff --git a/apps/lcars/ChangeLog b/apps/lcars/ChangeLog
index 577e8b572..a8c55f8fd 100644
--- a/apps/lcars/ChangeLog
+++ b/apps/lcars/ChangeLog
@@ -13,4 +13,5 @@
0.13: Improved battery visualization.
0.14: Added altitude as an option to display.
0.15: Using wpedom to count steps.
-0.16: Improved stability. Wind can now be shown.
\ No newline at end of file
+0.16: Improved stability. Wind can now be shown.
+0.17: Settings for mph/kph and other minor improvements.
\ No newline at end of file
diff --git a/apps/lcars/README.md b/apps/lcars/README.md
index bfd15afa2..b6bfda2c1 100644
--- a/apps/lcars/README.md
+++ b/apps/lcars/README.md
@@ -20,13 +20,13 @@ with Gadgetbride and the weather app must be installed.
* Display graphs (day or month) for steps + hrm on the second screen.
## Data that can be configured
- * Steps - Steps loaded via the health module
+ * Steps - Steps loaded via the wpedom app.
* Battery - Current battery level in %
* VREF - Voltage of battery
* HRM - Last measured HRM
* Temp - Weather temperature loaded via the weather module + gadgetbridge
* Humidity - Humidity loaded via the weather module + gadgetbridge
- * Wind - Wind loaded via the weather module + gadgetbridge
+ * Wind - Wind loaded via the weather module + gadgetbridge. Set kph / mph in the settings.
* Altitude - Shows the altitude in m.
* CoreT - Temperature of device
diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js
index bc797b1cf..dcbd294bb 100644
--- a/apps/lcars/lcars.app.js
+++ b/apps/lcars/lcars.app.js
@@ -5,7 +5,8 @@ let settings = {
alarm: -1,
dataRow1: "Steps",
dataRow2: "Temp",
- dataRow3: "Battery"
+ dataRow3: "Battery",
+ speed: "kph",
};
let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings;
for (const key in saved_settings) {
@@ -121,18 +122,22 @@ function queueDraw() {
function printRow(text, value, y, c){
g.setFontAntonioMedium();
g.setFontAlign(-1,-1,0);
- g.setColor(c);
- g.fillRect(77, y-2, 83 ,y+18);
-
- g.setFontAlign(0,-1,0);
- g.drawString(value, 110, y);
+ // Print background
g.setColor(c);
g.setFontAlign(-1,-1,0);
- g.fillRect(135, y-2, 165 ,y+18);
+ g.fillRect(80, y-2, 165 ,y+18);
g.fillCircle(163, y+8, 10);
g.setColor(cBlack);
- g.drawString(text, 137, y);
+ g.drawString(text, 135, y);
+
+ // Plot text
+ width = g.stringWidth(value);
+ g.setColor(cBlack);
+ g.fillRect(130-width-8, y-2, 130, y+18);
+ g.setColor(c);
+ g.setFontAlign(1,-1,0);
+ g.drawString(value, 126, y);
}
@@ -255,14 +260,14 @@ function drawState(){
iconEarth;
g.drawImage(iconImg, 23, 118);
g.setColor(cWhite);
- g.drawString("STATUS", 23+25, 108);
+ g.drawString("STATUS", 23+26, 108);
} else {
// Alarm within symbol
g.setColor(cOrange);
- g.drawString("ALARM", 23+25, 108);
+ g.drawString("ALARM", 23+26, 108);
g.setColor(cWhite);
g.setFontAntonioLarge();
- g.drawString(getAlarmMinutes(), 23+25, 108+35);
+ g.drawString(getAlarmMinutes(), 23+26, 108+35);
}
g.setFontAlign(-1, -1, 0);
@@ -430,8 +435,9 @@ function drawPosition1(){
}
function draw(){
+ // Queue draw first to ensure that its called in one minute again.
+ queueDraw();
- try{
// First handle alarm to show this correctly afterwards
handleAlarm();
@@ -445,13 +451,6 @@ function draw(){
} else if (lcarsViewPos == 1) {
drawPosition1();
}
- } catch (ex){
- // In case of an exception, we simply queue
- // and try it in one minute again...
- }
-
- // Queue draw in one minute
- queueDraw();
}
@@ -496,15 +495,14 @@ function getWeather(){
var weather = weatherJson.weather;
// Temperature
- const temp = locale.temp(weather.temp-273.15).match(/^(\D*\d*)(.*)$/);
- weather.temp = temp[1] + " " + temp[2].toUpperCase();
+ weather.temp = locale.temp(weather.temp-273.15);
// Humidity
weather.hum = weather.hum + "%";
// Wind
- const wind = locale.speed(weather.wind).match(/^(\D*\d*)(.*)$/);
- weather.wind = wind[1]; // + wind[2].toUpperCase(); // Don't show mph - its too large
+ var speedFactor = settings.speed == "kph" ? 1.60934 : 1.0;
+ weather.wind = Math.round(weather.wind * speedFactor);
return weather
}
diff --git a/apps/lcars/lcars.settings.js b/apps/lcars/lcars.settings.js
index 71081e1d4..176f88593 100644
--- a/apps/lcars/lcars.settings.js
+++ b/apps/lcars/lcars.settings.js
@@ -7,7 +7,8 @@
alarm: -1,
dataRow1: "Battery",
dataRow2: "Steps",
- dataRow3: "Temp"
+ dataRow3: "Temp",
+ speed: "kph",
};
let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings;
for (const key in saved_settings) {
@@ -18,35 +19,45 @@
storage.write(SETTINGS_FILE, settings)
}
- var data_options = ["Steps", "Battery", "VREF", "HRM", "Temp", "Humidity", "Wind", "Altitude", "CoreT"];
+ var dataOptions = ["Steps", "Battery", "VREF", "HRM", "Temp", "Humidity", "Wind", "Altitude", "CoreT"];
+ var speedOptions = ["kph", "mph"];
E.showMenu({
'': { 'title': 'LCARS Clock' },
'< Back': back,
'Row 1': {
- value: 0 | data_options.indexOf(settings.dataRow1),
+ value: 0 | dataOptions.indexOf(settings.dataRow1),
min: 0, max: 8,
- format: v => data_options[v],
+ format: v => dataOptions[v],
onchange: v => {
- settings.dataRow1 = data_options[v];
+ settings.dataRow1 = dataOptions[v];
save();
},
},
'Row 2': {
- value: 0 | data_options.indexOf(settings.dataRow2),
+ value: 0 | dataOptions.indexOf(settings.dataRow2),
min: 0, max: 8,
- format: v => data_options[v],
+ format: v => dataOptions[v],
onchange: v => {
- settings.dataRow2 = data_options[v];
+ settings.dataRow2 = dataOptions[v];
save();
},
},
'Row 3': {
- value: 0 | data_options.indexOf(settings.dataRow3),
+ value: 0 | dataOptions.indexOf(settings.dataRow3),
min: 0, max: 8,
- format: v => data_options[v],
+ format: v => dataOptions[v],
onchange: v => {
- settings.dataRow3 = data_options[v];
+ settings.dataRow3 = dataOptions[v];
+ save();
+ },
+ },
+ 'Speed': {
+ value: 0 | speedOptions.indexOf(settings.speed),
+ min: 0, max: 1,
+ format: v => speedOptions[v],
+ onchange: v => {
+ settings.speed = speedOptions[v];
save();
},
}
diff --git a/apps/lcars/metadata.json b/apps/lcars/metadata.json
index 924c07267..a402b35a4 100644
--- a/apps/lcars/metadata.json
+++ b/apps/lcars/metadata.json
@@ -3,7 +3,7 @@
"name": "LCARS Clock",
"shortName":"LCARS",
"icon": "lcars.png",
- "version":"0.16",
+ "version":"0.17",
"readme": "README.md",
"supports": ["BANGLEJS2"],
"description": "Library Computer Access Retrieval System (LCARS) clock.",
diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png
index 120229fba..e2d2cbd5f 100644
Binary files a/apps/lcars/screenshot.png and b/apps/lcars/screenshot.png differ
diff --git a/apps/locale/locale.html b/apps/locale/locale.html
index 90a2e8d40..b23225d5f 100644
--- a/apps/locale/locale.html
+++ b/apps/locale/locale.html
@@ -10,6 +10,9 @@
+
+ Add common language translations like "Yes", "No", "On", "Off"(Not recommended. For translations use the option under More...
in the app loader.
+
Then click Upload
@@ -106,12 +109,18 @@ exports = { name : "en_GB", currencySym:"£",
const lang = languageSelector.options[languageSelector.selectedIndex].value;
console.log(`Language ${lang}`);
+ const translations = document.getElementById('translations').checked;
+ console.log(`Translations: ${translations}`);
+
const locale = locales[lang];
if (!locale) {
alert(`Language ${lang} not found!`);
return;
}
+ if (!translations)
+ locale.trans = null;
+
const codePageName = "ISO8859-1";
if (locale.codePage)
codePageName = locale.codePage;
diff --git a/apps/route/ChangeLog b/apps/route/ChangeLog
index 02779b6ea..f8c97a57b 100644
--- a/apps/route/ChangeLog
+++ b/apps/route/ChangeLog
@@ -1,2 +1,3 @@
0.01: New App!
0.02: Change color from red->yellow to ease readability (fix #710)
+0.03: Color/positioning change to allow it to work with Bangle.js 1 (although not pretty)
diff --git a/apps/route/custom.html b/apps/route/custom.html
index b958303d8..bdabb471c 100644
--- a/apps/route/custom.html
+++ b/apps/route/custom.html
@@ -104,141 +104,146 @@ document.getElementById('fileLoader').addEventListener('change', handleFileSelec
document.getElementById("upload").addEventListener("click", function() {
var app = `${js}
-var gcoords = new Uint8Array(coords.length);
-var coordDistance = new Uint16Array(coords.length/2);
+ var gcoords = new Uint8Array(coords.length);
+ var coordDistance = new Uint16Array(coords.length/2);
+ var colHL = g.theme.dark ? "#FF0" : "#00F";
+ var W = g.getWidth(), H = g.getHeight();
-var PT_DISTANCE = 30; // distance to a point before we consider it complete
+ var PT_DISTANCE = 30; // distance to a point before we consider it complete
-function toScr(p) {
- return {
- x : 10 + (p.x-min.x)*100/(max.x-min.x),
- y : 230 - (p.y-min.y)*100/(max.y-min.y)
- };
-}
-
-var last;
-var totalDistance = 0;
-for (var i=0;i hidN[v],
onchange: v => {
settings.HID = hidV[v];
diff --git a/apps/sleeplog/ChangeLog b/apps/sleeplog/ChangeLog
new file mode 100644
index 000000000..5560f00bc
--- /dev/null
+++ b/apps/sleeplog/ChangeLog
@@ -0,0 +1 @@
+0.01: New App!
diff --git a/apps/sleeplog/README.md b/apps/sleeplog/README.md
new file mode 100644
index 000000000..24f47c23c
--- /dev/null
+++ b/apps/sleeplog/README.md
@@ -0,0 +1,142 @@
+# Sleep Log
+
+This app logs and displays the four following states:
+_unknown, not worn, awake, sleeping_
+It derived from the [SleepPhaseAlarm](https://banglejs.com/apps/#sleepphasealarm) and uses the accelerometer to estimate sleep and wake states with the principle of Estimation of Stationary Sleep-segments ([ESS](https://ubicomp.eti.uni-siegen.de/home/datasets/ichi14/index.html.en)) and the internal temperature to decide _sleeping_ or _not worn_ when the watch is resting.
+
+#### Operating Principle
+* __ESS calculation__
+ The accelerometer polls values with 12.5Hz. On each poll the magnitude value is saved. When 13 values are collected, every 1.04 seconds, the standard deviation over this values is calculated.
+ Is the calculated standard deviation lower than the "no movement" threshold (__NoMoThresh__) a "no movement" counter is incremented. Each time the "no movement" threshold is reached the "no movement" counter will be reset.
+ When the "no movement" counter reaches the sleep threshold the watch is considered as resting. (The sleep threshold is calculated from the __MinDuration__ setting, Example: _sleep threshold = MinDuration * 60 / calculation interval => 10min * 60s/min / 1.04s ~= 576,9 rounded up to 577_)
+ To check if a resting watch indicates as sleeping, the internal temperature must be greater than the temperature threshold (__TempThresh__). Otherwise the watch is considered as not worn.
+* __True Sleep__
+ The true sleep value is a simple addition of all registert sleeping periods.
+* __Consecutive Sleep__
+ In addition the consecutive sleep value tries to predict the complete time you were asleep, even the light sleeping phases with registered movements. All periods after a sleeping period will be summarized til the first following non sleeping period that is longer then the maximal awake duration (__MaxAwake__). If this sum is lower than the minimal consecutive sleep duration (__MinConsec__) it is not considered, otherwise it will be added to the consecutive sleep value.
+* __Logging__
+ To minimize the log size only a changed state is logged.
+
+---
+### Control
+---
+* __Swipe__
+ Swipe left/right to display the previous/following day.
+* __Touch__ / __BTN__
+ Touch the screen to open the settings menu to exit or change settings.
+
+---
+### Settings
+---
+* __BreakTod__ break at time of day
+ _0_ / _1_ / _..._ / __10__ / _..._ / _12_
+ Change time of day on wich the lower graph starts and the upper graph ends.
+* __MaxAwake__ maximal awake duration
+ _15min_ / _20min_ / _..._ / __60min__ / _..._ / _120min_
+ Adjust the maximal awake duration upon the exceeding of which aborts the consecutive sleep period.
+* __MinConsec__ minimal consecutive sleep duration
+ _15min_ / _20min_ / _..._ / __30min__ / _..._ / _120min_
+ Adjust the minimal consecutive sleep duration that will be considered for the consecutive sleep value.
+* __TempThresh__ temperature threshold
+ _20°C_ / _20.5°C_ / _..._ / __25°C__ / _..._ / _40°C_
+ The internal temperature must be greater than this threshold to log _sleeping_, otherwise it is _not worn_.
+* __NoMoThresh__ no movement threshold
+ _0.006_ / _0.007_ / _..._ / __0.012__ / _..._ / _0.020_
+ The standard deviation over the measured values needs to be lower then this threshold to count as not moving.
+ The defaut threshold value worked best for my watch. A threshold value below 0.008 may get triggert by noise.
+* __MinDuration__ minimal no movement duration
+ _5min_ / _6min_ / _..._ / __10min__ / _..._ / _15min_
+ If no movement is detected for this duration, the watch is considered as resting.
+* __Enabled__
+ __on__ / _off_
+ En-/Disable the service (all background activities). _Saves battery, but might make this app useless._
+* __Logfile__
+ __default__ / _off_
+ En-/Disable logging by setting the logfile to _sleeplog.log_ / _undefined_.
+ If the logfile has been customized it is displayed with _custom_.
+
+---
+### Global Object and Module Functions
+---
+For easy access from the console or other apps the following parameters, values and functions are noteworthy:
+```
+>global.sleeplog
+={
+ enabled: true, // bool / service status indicator
+ logfile: "sleeplog.log", // string / used logfile
+ resting: false, // bool / indicates if the watch is resting
+ status: 2, // int / actual status: 0 = unknown, 1 = not worn, 2 = awake, 3 = sleeping
+ firstnomodate: 1644435877595, // number / Date.now() from first recognised no movement
+ stop: function () { ... }, // funct / stops the service until the next load()
+ start: function () { ... }, // funct / restarts the service
+ ...
+ }
+
+>require("sleeplog")
+={
+ setEnabled: function (enable, logfile) { ... },
+ // en-/disable the service and/or logging
+ // * enable / bool / service status to change to
+ // * logfile / bool or string
+ // - true = enables logging to "sleeplog.log"
+ // - "some_file.log" = enables logging to "some_file.log"
+ // - false = disables logging
+ // returns: bool or undefined
+ // - true = changes executed
+ // - false = no changes needed
+ // - undefined = no global.sleeplog found
+ readLog: function (since, until) { ... },
+ // read the raw log data for a specific time period
+ // * since / Date or number / startpoint of period
+ // * until / Date or number / endpoint of period
+ // returns: array
+ // * [[number, int, string], [...], ... ] / sorting: latest first
+ // - number // timestamp in ms
+ // - int // status: 0 = unknown, 1 = not worn, 2 = awake, 3 = sleeping
+ // - string // additional information
+ // * [] = no data available or global.sleeplog found
+ getReadableLog: function (printLog, since, until) { ... }
+ // read the log data as humanreadable string for a specific time period
+ // * since / Date or number / startpoint of period
+ // * until / Date or number / endpoint of period
+ // returns: string
+ // * "{substring of ISO date} - {status} for {duration}min\n...", sorting: latest last
+ // * undefined = no data available or global.sleeplog found
+ restoreLog: function (logfile) { ... }
+ // eliminate some errors inside a specific logfile
+ // * logfile / string / name of the logfile that will be restored
+ // returns: int / number of changes that were made
+ reinterpretTemp: function (logfile, tempthresh) { ... }
+ // reinterpret worn status based on given temperature threshold
+ // * logfile / string / name of the logfile
+ // * tempthresh / float / new temperature threshold
+ // returns: int / number of changes that were made
+ }
+```
+
+---
+### Worth Mentioning
+---
+#### To do list
+* Send the logged information to Gadgetbridge.
+ _(For now I have no idea how to achieve this, help is appreciated.)_
+* Calculate and display overall sleep statistics.
+
+#### Requests, Bugs and Feedback
+Please leave requests and bug reports by raising an issue at [github.com/storm64/BangleApps](https://github.com/storm64/BangleApps) or send me a [mail](mailto:banglejs@storm64.de).
+
+#### Creator
+Storm64 ([Mail](mailto:banglejs@storm64.de), [github](https://github.com/storm64))
+
+#### Contributors
+nxdefiant ([github](https://github.com/nxdefiant))
+
+#### Attributions
+* ESS calculation based on nxdefiant interpretation of the following publication by:
+ Marko Borazio, Eugen Berlin, Nagihan Kücükyildiz, Philipp M. Scholl and Kristof Van Laerhoven
+ [Towards a Benchmark for Wearable Sleep Analysis with Inertial Wrist-worn Sensing Units](https://ubicomp.eti.uni-siegen.de/home/datasets/ichi14/index.html.en),
+ ICHI 2014, Verona, Italy, IEEE Press, 2014.
+* Icons used in this app are from [https://icons8.com](https://icons8.com).
+
+#### License
+[MIT License](LICENSE)
diff --git a/apps/sleeplog/app-icon.js b/apps/sleeplog/app-icon.js
new file mode 100644
index 000000000..36b890491
--- /dev/null
+++ b/apps/sleeplog/app-icon.js
@@ -0,0 +1 @@
+require("heatshrink").decompress(atob("mEw4cA///4H8m2ZtVN/nl1P9vXXBoJT/AGcbtuwCJ3btu2CBsG7fZ23ACJk2CIXYCBcB2w1C7YRO/oR/CKp9CCIJ9MUIQRBUI8CpMgYpwRGdJQRGABQRUhdtCJ9btugCJsiM4O0kmSpICFCKJUCCMpZDCJx9CCJsyBIQRxBpACDyAR/CJZeCAA8BCPIA/AFQ"))
diff --git a/apps/sleeplog/app.js b/apps/sleeplog/app.js
new file mode 100644
index 000000000..cbfad4bda
--- /dev/null
+++ b/apps/sleeplog/app.js
@@ -0,0 +1,194 @@
+// set storage and define settings
+var storage = require("Storage");
+var breaktod, maxawake, minconsec;
+
+// read required settings from storage
+function readSettings(settings) {
+ breaktod = settings.breaktod || (settings.breaktod === 0 ? 0 : 10); // time of day when to start/end graphs
+ maxawake = settings.maxawake || 36E5; // 60min in ms
+ minconsec = settings.minconsec || 18E5; // 30min in ms
+}
+
+// define draw log function
+function drawLog(topY, viewUntil) {
+ // set default view time
+ viewUntil = viewUntil || Date();
+
+ // define parameters
+ var statusValue = [0, 0.4, 0.6, 1]; // unknown, not worn, awake, sleeping, consecutive sleep
+ var statusColor = [0, 63488, 2016, 32799, 31]; // black, red, green, violet, blue
+ var period = 432E5; // 12h
+ var graphHeight = 18;
+ var labelHeight = 12;
+ var width = g.getWidth();
+ var timestamp0 = viewUntil.valueOf() - period;
+ var y = topY + graphHeight;
+
+ // read 12h wide log
+ var log = require("sleeplog").readLog(timestamp0, viewUntil.valueOf());
+
+ // format log array if not empty
+ if (log.length) {
+ // if the period goes into the future add unknown status at the beginning
+ if (viewUntil > Date()) log.unshift([Date().valueOf(), 0]);
+
+ // check if the period goes earlier than logged data
+ if (log[log.length - 1][0] < timestamp0) {
+ // set time of last entry according to period
+ log[log.length - 1][0] = timestamp0;
+ } else {
+ // add entry with unknown status at the end
+ log.push([timestamp0, 0]);
+ }
+
+ // remap each element to [status, relative beginning, relative end, duration]
+ log = log.map((element, index) => [
+ element[1],
+ element[0] - timestamp0,
+ (log[index - 1] || [viewUntil.valueOf()])[0] - timestamp0,
+ (log[index - 1] || [viewUntil.valueOf()])[0] - element[0]
+ ]);
+
+ // start with the oldest entry to build graph left to right
+ log.reverse();
+ }
+
+ // clear area
+ g.reset().clearRect(0, topY, width, y + labelHeight);
+ // draw x axis
+ g.drawLine(0, y + 1, width, y + 1);
+ // draw x label
+ var hours = period / 36E5;
+ var stepwidth = width / hours;
+ var startHour = 24 + viewUntil.getHours() - hours;
+ for (var x = 0; x < hours; x++) {
+ g.fillRect(x * stepwidth, y + 2, x * stepwidth, y + 4);
+ g.setFontAlign(-1, -1).setFont("6x8")
+ .drawString((startHour + x) % 24, x * stepwidth, y + 6);
+ }
+
+ // define variables for sleep calculation
+ var consecutive = 0;
+ var output = [0, 0]; // [estimated, true]
+ var i, nosleepduration;
+
+ // draw graph
+ log.forEach((element, index) => {
+ // set bar color depending on type
+ g.setColor(statusColor[consecutive ? 4 : element[0]]);
+
+ // check for sleeping status
+ if (element[0] === 3) {
+ // count true sleeping hours
+ output[1] += element[3];
+ // count duration of subsequent non sleeping periods
+ i = index + 1;
+ nosleepduration = 0;
+ while (log[i] !== undefined && log[i][0] < 3 && nosleepduration < maxawake) {
+ nosleepduration += log[i++][3];
+ }
+ // check if counted duration lower than threshold to start/stop counting
+ if (log[i] !== undefined && nosleepduration < maxawake) {
+ // start counting consecutive sleeping hours
+ consecutive += element[3];
+ // correct color to match consecutive sleeping
+ g.setColor(statusColor[4]);
+ } else {
+ // check if counted consecutive sleeping greater then threshold
+ if (consecutive >= minconsec) {
+ // write verified consecutive sleeping hours to output
+ output[0] += consecutive + element[3];
+ } else {
+ // correct color to display a canceled consecutive sleeping period
+ g.setColor(statusColor[3]);
+ }
+ // stop counting consecutive sleeping hours
+ consecutive = 0;
+ }
+ } else {
+ // count durations of non sleeping periods for consecutive sleeping
+ if (consecutive) consecutive += element[3];
+ }
+
+ // calculate points
+ var x1 = Math.ceil(element[1] / period * width);
+ var x2 = Math.floor(element[2] / period * width);
+ var y2 = y - graphHeight * statusValue[element[0]];
+ // draw bar
+ g.clearRect(x1, topY, x2, y);
+ g.fillRect(x1, y, x2, y2).reset();
+ if (y !== y2) g.fillRect(x1, y2, x2, y2);
+ });
+
+ // clear variables
+ log = undefined;
+
+ // return convert output into minutes
+ return output.map(value => value /= 6E4);
+}
+
+// define draw night to function
+function drawNightTo(prevDays) {
+ // calculate 10am of this or a previous day
+ var date = Date();
+ date = Date(date.getFullYear(), date.getMonth(), date.getDate() - prevDays, breaktod);
+
+ // get width
+ var width = g.getWidth();
+
+ // clear app area
+ g.clearRect(0, 24, width, width);
+
+ // define variable for sleep calculation
+ var outputs = [0, 0]; // [estimated, true]
+ // draw log graphs and read outputs
+ drawLog(110, date).forEach(
+ (value, index) => outputs[index] += value);
+ drawLog(145, Date(date.valueOf() - 432E5)).forEach(
+ (value, index) => outputs[index] += value);
+
+ // reduce date by 1s to ensure correct headline
+ date = Date(date.valueOf() - 1E3);
+ // draw headline, on red bg if service or loggging disabled
+ g.setColor(global.sleeplog && sleeplog.enabled && sleeplog.logfile ? g.theme.bg : 63488);
+ g.fillRect(0, 30, width, 66).reset();
+ g.setFont("12x20").setFontAlign(0, -1);
+ g.drawString("Night to " + require('locale').dow(date, 1) + "\n" +
+ require('locale').date(date, 1), width / 2, 30);
+
+ // draw outputs
+ g.reset(); // area: 0, 70, width, 105
+ g.setFont("6x8").setFontAlign(-1, -1);
+ g.drawString("consecutive\nsleeping", 10, 70);
+ g.drawString("true\nsleeping", 10, 90);
+ g.setFont("12x20").setFontAlign(1, -1);
+ g.drawString(Math.floor(outputs[0] / 60) + "h " +
+ Math.floor(outputs[0] % 60) + "min", width - 10, 70);
+ g.drawString(Math.floor(outputs[1] / 60) + "h " +
+ Math.floor(outputs[1] % 60) + "min", width - 10, 90);
+}
+
+
+// define function to draw and setup UI
+function startApp() {
+ readSettings(storage.readJSON("sleeplog.json", true) || {});
+ drawNightTo(prevDays);
+ Bangle.setUI("leftright", (cb) => {
+ if (!cb) {
+ eval(storage.read("sleeplog.settings.js"))(startApp);
+ } else if (prevDays + cb >= -1) {
+ drawNightTo((prevDays += cb));
+ }
+ });
+}
+
+// define day to display
+var prevDays = 0;
+
+// setup app
+g.clear();
+Bangle.loadWidgets();
+Bangle.drawWidgets();
+
+// start app
+startApp();
diff --git a/apps/sleeplog/app.png b/apps/sleeplog/app.png
new file mode 100644
index 000000000..bb7f11f67
Binary files /dev/null and b/apps/sleeplog/app.png differ
diff --git a/apps/sleeplog/boot.js b/apps/sleeplog/boot.js
new file mode 100644
index 000000000..7ec71742c
--- /dev/null
+++ b/apps/sleeplog/boot.js
@@ -0,0 +1,137 @@
+// Sleep/Wake detection with Estimation of Stationary Sleep-segments (ESS):
+// Marko Borazio, Eugen Berlin, Nagihan Kücükyildiz, Philipp M. Scholl and Kristof Van Laerhoven, "Towards a Benchmark for Wearable Sleep Analysis with Inertial Wrist-worn Sensing Units", ICHI 2014, Verona, Italy, IEEE Press, 2014.
+// https://ubicomp.eti.uni-siegen.de/home/datasets/ichi14/index.html.en
+
+// sleeplog.status values: 0 = unknown, 1 = not worn, 2 = awake, 3 = sleeping
+
+// load settings into global object
+global.sleeplog = Object.assign({
+ enabled: true, // en-/disable completely
+ logfile: "sleeplog.log", // logfile
+ winwidth: 13, // 13 values, read with 12.5Hz = every 1.04s
+ nomothresh: 0.012, // values lower than 0.008 getting triggert by noise
+ sleepthresh: 577, // 577 times no movement * 1.04s window width > 10min
+ tempthresh: 27, // every temperature above ist registered as worn
+}, require("Storage").readJSON("sleeplog.json", true) || {});
+
+// delete app settings
+["breaktod", "maxawake", "minconsec"].forEach(property => delete global.sleeplog[property]);
+
+// check if service enabled
+if (global.sleeplog.enabled) {
+
+ // add cached values and functions to global object
+ global.sleeplog = Object.assign(global.sleeplog, {
+ // set cached values
+ ess_values: [],
+ nomocount: 0,
+ firstnomodate: undefined,
+ resting: undefined,
+ status: 0,
+
+ // define acceleration listener function
+ accel: function(xyz) {
+ // save acceleration magnitude and start calculation on enough saved data
+ if (global.sleeplog.ess_values.push(xyz.mag) >= global.sleeplog.winwidth) global.sleeplog.calc();
+ },
+
+ // define calculator function
+ calc: function() {
+ // calculate standard deviation over
+ var mean = this.ess_values.reduce((prev, cur) => cur + prev) / this.winwidth;
+ var stddev = Math.sqrt(this.ess_values.map(val => Math.pow(val - mean, 2)).reduce((prev, cur) => prev + cur) / this.winwidth);
+ // reset saved acceleration data
+ this.ess_values = [];
+
+ // check for non-movement according to the threshold
+ if (stddev < this.nomothresh) {
+ // increment non-movement sections count, set date of first non-movement
+ if (++this.nomocount == 1) this.firstnomodate = Math.floor(Date.now());
+ // check resting state and non-movement count against threshold
+ if (this.resting !== true && this.nomocount >= this.sleepthresh) {
+ // change resting state, status and write to log
+ this.resting = true;
+ // check if the watch is worn
+ if (E.getTemperature() > this.tempthresh) {
+ // set status and write to log as sleping
+ this.status = 3;
+ this.log(this.firstnomodate, 3, E.getTemperature());
+ } else {
+ // set status and write to log as not worn
+ this.status = 1;
+ this.log(this.firstnomodate, 1, E.getTemperature());
+ }
+ }
+ } else {
+ // reset non-movement sections count
+ this.nomocount = 0;
+ // check resting state
+ if (this.resting !== false) {
+ // change resting state
+ this.resting = false;
+ // set status and write to log as awake
+ this.status = 2;
+ this.log(Math.floor(Date.now()), 2);
+ }
+ }
+ },
+
+ // define logging function
+ log: function(date, status, temperature, info) {
+ // skip logging if logfile is undefined or does not end with ".log"
+ if (!this.logfile || !this.logfile.endsWith(".log")) return;
+ // prevent logging on implausible date
+ if (date < 9E11 || Date() < 9E11) return;
+
+ // set default value for status
+ status = status || 0;
+
+ // define storage
+ var storage = require("Storage");
+
+ // read previous logfile
+ var log = JSON.parse(atob(storage.read(this.logfile)));
+
+ // remove last state if it was unknown and is less then 10min ago
+ if (log.length > 0 && log[0][1] === 0 &&
+ Math.floor(Date.now()) - log[0][0] < 600000) log.shift();
+
+ // add actual status at the first position if it has changed
+ if (log.length === 0 || log[0][1] !== status)
+ log.unshift(info ? [date, status, temperature, info] : temperature ? [date, status, temperature] : [date, status]);
+
+ // write log to storage
+ storage.write(this.logfile, btoa(JSON.stringify(log)));
+
+ // clear variables
+ log = undefined;
+ storage = undefined;
+ },
+
+ // define stop function (logging will restart if enabled and boot file is executed)
+ stop: function() {
+ // remove acceleration and kill listener
+ Bangle.removeListener('accel', global.sleeplog.accel);
+ E.removeListener('kill', global.sleeplog.stop);
+ // write log with undefined sleeping status
+ global.sleeplog.log(Math.floor(Date.now()));
+ // reset cached values
+ global.sleeplog.ess_values = [];
+ global.sleeplog.nomocount = 0;
+ global.sleeplog.firstnomodate = undefined;
+ global.sleeplog.resting = undefined;
+ global.sleeplog.status = 0;
+ },
+
+ // define restart function (also use for initial starting)
+ start: function() {
+ // add acceleration listener
+ Bangle.on('accel', global.sleeplog.accel);
+ // add kill listener
+ E.on('kill', global.sleeplog.stop);
+ },
+ });
+
+ // initial starting
+ global.sleeplog.start();
+}
diff --git a/apps/sleeplog/lib.js b/apps/sleeplog/lib.js
new file mode 100644
index 000000000..81bca0f3f
--- /dev/null
+++ b/apps/sleeplog/lib.js
@@ -0,0 +1,150 @@
+exports = {
+ // define en-/disable function
+ setEnabled: function(enable, logfile) {
+ // check if sleeplog is available
+ if (typeof global.sleeplog !== "object") return;
+
+ // set default logfile
+ logfile = logfile.endsWith(".log") ? logfile :
+ logfile === false ? undefined :
+ "sleeplog.log";
+
+ // check if status needs to be changed
+ if (enable === global.sleeplog.enabled ||
+ logfile === global.sleeplog.logfile) return false;
+
+ // stop if enabled
+ if (global.sleeplog.enabled) global.sleeplog.stop();
+
+ // define storage and filename
+ var storage = require("Storage");
+ var filename = "sleeplog.json";
+
+ // change enabled value in settings
+ storage.writeJSON(filename, Object.assign(storage.readJSON(filename, true) || {}, {
+ enabled: enable,
+ logfile: logfile
+ }));
+
+ // force changes to take effect by executing the boot script
+ eval(storage.read("sleeplog.boot.js"));
+
+ // clear variables
+ storage = undefined;
+ filename = undefined;
+ return true;
+ },
+
+ // define read log function
+ // sorting: latest first, format:
+ // [[number, int, float, string], [...], ... ]
+ // - number // timestamp in ms
+ // - int // status: 0 = unknown, 1 = not worn, 2 = awake, 3 = sleeping
+ // - float // internal temperature
+ // - string // additional information
+ readLog: function(since, until) {
+ // set logfile
+ var logfile = (global.sleeplog || {}).logfile || "sleeplog.log";
+
+ // check if since is in the future
+ if (since > Date()) return [];
+
+ // read log json to array
+ var log = JSON.parse(atob(require("Storage").read(logfile)));
+
+ // search for latest entry befor since
+ since = (log.find(element => element[0] <= since) || [0])[0];
+
+ // filter selected time period
+ log = log.filter(element => (element[0] >= since) && (element[0] <= (until || 1E14)));
+
+ // output log
+ return log;
+ },
+
+ // define log to humanreadable string function
+ // sorting: latest last, format:
+ // "{substring of ISO date} - {status} for {duration}min\n..."
+ getReadableLog: function(printLog, since, until) {
+ // read log and check
+ var log = this.readLog(since, until);
+ if (!log.length) return;
+ // reverse array to set last timestamp to the end
+ log.reverse();
+
+ // define status description and log string
+ var statusText = ["unknown ", "not worn", "awake ", "sleeping"];
+ var logString = [];
+
+ // rewrite each entry
+ log.forEach((element, index) => {
+ logString[index] = "" +
+ Date(element[0] - Date().getTimezoneOffset() * 6E4).toISOString().substr(0, 19).replace("T", " ") + " - " +
+ statusText[element[1]] +
+ (index === log.length - 1 ? "" : " for " + Math.round((log[index + 1][0] - element[0]) / 60000) + "min") +
+ (element[2] ? " | Temp: " + element[2] + "°C" : "") +
+ (element[3] ? " | " + element[3] : "");
+ });
+ logString = logString.join("\n");
+
+ // if set print and return string
+ if (printLog) {
+ print(logString);
+ print("- first", Date(log[0][0]));
+ print("- last", Date(log[log.length - 1][0]));
+ var period = log[log.length - 1][0] - log[0][0];
+ print("- period= " + Math.floor(period / 864E5) + "d " + Math.floor(period % 864E5 / 36E5) + "h " + Math.floor(period % 36E5 / 6E4) + "min");
+ }
+ return logString;
+ },
+
+ // define function to eliminate some errors inside the log
+ restoreLog: function(logfile) {
+ // define storage
+ var storage = require("Storage");
+
+ // read log json to array
+ var log = JSON.parse(atob(storage.read(logfile)));
+
+ // define output variable to show number of changes
+ var output = log.length;
+
+ // remove non decremental entries
+ log = log.filter((element, index) => log[index][0] >= (log[index + 1] || [0])[0]);
+
+ // write log to storage
+ storage.write(logfile, btoa(JSON.stringify(log)));
+
+ // return difference in length
+ return output - log.length;
+ },
+
+ // define function to reinterpret worn status based on given temperature threshold
+ reinterpretTemp: function(logfile, tempthresh) {
+ // define storage
+ var storage = require("Storage");
+
+ // read log json to array
+ var log = JSON.parse(atob(storage.read(logfile)));
+
+ // define output variable to show number of changes
+ var output = 0;
+
+ // remove non decremental entries
+ log = log.map(element => {
+ if (element[2]) {
+ var tmp = element[1];
+ element[1] = element[2] > tempthresh ? 3 : 1;
+ if (tmp !== element[1]) output++;
+ }
+ return element;
+ });
+
+ // write log to storage
+ storage.write(logfile, btoa(JSON.stringify(log)));
+
+ // return output
+ return output;
+ }
+
+};
diff --git a/apps/sleeplog/metadata.json b/apps/sleeplog/metadata.json
new file mode 100644
index 000000000..4a67af301
--- /dev/null
+++ b/apps/sleeplog/metadata.json
@@ -0,0 +1,28 @@
+{
+ "id":"sleeplog",
+ "name":"Sleep Log",
+ "shortName": "SleepLog",
+ "version": "0.01",
+ "description": "Log and view your sleeping habits. This app derived from SleepPhaseAlarm and uses also the principe of Estimation of Stationary Sleep-segments (ESS).",
+ "icon": "app.png",
+ "type": "app",
+ "tags": "tool,boot",
+ "supports": ["BANGLEJS2"],
+ "readme": "README.md",
+ "storage": [
+ {"name": "sleeplog.app.js", "url": "app.js"},
+ {"name": "sleeplog.img", "url": "app-icon.js", "evaluate":true},
+ {"name": "sleeplog.boot.js", "url": "boot.js"},
+ {"name": "sleeplog", "url": "lib.js"},
+ {"name": "sleeplog.settings.js", "url": "settings.js"}
+ ],
+ "data": [
+ {"name": "sleeplog.json"},
+ {"name": "sleeplog.log"}
+ ],
+ "screenshots": [
+ {"url": "screenshot1.png"},
+ {"url": "screenshot2.png"},
+ {"url": "screenshot3.png"}
+ ]
+}
diff --git a/apps/sleeplog/screenshot1.png b/apps/sleeplog/screenshot1.png
new file mode 100644
index 000000000..9ab384ca9
Binary files /dev/null and b/apps/sleeplog/screenshot1.png differ
diff --git a/apps/sleeplog/screenshot2.png b/apps/sleeplog/screenshot2.png
new file mode 100644
index 000000000..69e370042
Binary files /dev/null and b/apps/sleeplog/screenshot2.png differ
diff --git a/apps/sleeplog/screenshot3.png b/apps/sleeplog/screenshot3.png
new file mode 100644
index 000000000..79433949a
Binary files /dev/null and b/apps/sleeplog/screenshot3.png differ
diff --git a/apps/sleeplog/settings.js b/apps/sleeplog/settings.js
new file mode 100644
index 000000000..6137e2082
--- /dev/null
+++ b/apps/sleeplog/settings.js
@@ -0,0 +1,118 @@
+(function(back) {
+ var filename = "sleeplog.json";
+
+ // set storage and load settings
+ var storage = require("Storage");
+ var settings = Object.assign({
+ breaktod: 10, // time of day when to start/end graphs
+ maxawake: 36E5, // 60min in ms
+ minconsec: 18E5, // 30min in ms
+ tempthresh: 27, // every temperature above ist registered as worn
+ nomothresh: 0.012, // values lower than 0.008 getting triggert by noise
+ sleepthresh: 577, // 577 times no movement * 1.04s window width > 10min
+ winwidth: 13, // 13 values, read with 12.5Hz = every 1.04s
+ enabled: true, // en-/disable completely
+ logfile: "sleeplog.log", // logfile
+ }, storage.readJSON(filename, true) || {});
+
+ // write change to global.sleeplog and storage
+ function writeSetting(key, value) {
+ // change key in global.sleeplog
+ if (typeof global.sleeplog === "object") global.sleeplog[key] = value;
+ // reread settings to only change key
+ settings = Object.assign(settings, storage.readJSON(filename, true) || {});
+ // change the value of key
+ settings[key] = value;
+ // write to storage
+ storage.writeJSON(filename, settings);
+ }
+
+ // define circulate function
+ function circulate(min, max, value) {
+ return value > max ? min : value < min ? max : value;
+ }
+
+ // calculate sleepthresh factor
+ var stFactor = settings.winwidth / 12.5 / 60;
+
+ // show main menu
+ function showMain() {
+ var mainMenu = E.showMenu({
+ "": {
+ title: "Sleep Log"
+ },
+ "< Exit": () => load(),
+ "< Back": () => back(),
+ "BreakTod": {
+ value: settings.breaktod,
+ step: 1,
+ onchange: function(v) {
+ this.value = v = circulate(0, 23, v);
+ writeSetting("breaktod", v);
+ }
+ },
+ "MaxAwake": {
+ value: settings.maxawake / 6E4,
+ step: 5,
+ format: v => v + "min",
+ onchange: function(v) {
+ this.value = v = circulate(15, 120, v);
+ writeSetting("maxawake", v * 6E4);
+ }
+ },
+ "MinConsec": {
+ value: settings.minconsec / 6E4,
+ step: 5,
+ format: v => v + "min",
+ onchange: function(v) {
+ this.value = v = circulate(15, 120, v);
+ writeSetting("minconsec", v * 6E4);
+ }
+ },
+ "TempThresh": {
+ value: settings.tempthresh,
+ step: 0.5,
+ format: v => v + "°C",
+ onchange: function(v) {
+ this.value = v = circulate(20, 40, v);
+ writeSetting("tempthresh", v);
+ }
+ },
+ "NoMoThresh": {
+ value: settings.nomothresh,
+ step: 0.001,
+ format: v => ("" + v).padEnd(5, "0"),
+ onchange: function(v) {
+ this.value = v = circulate(0.006, 0.02, v);
+ writeSetting("nomothresh", v);
+ }
+ },
+ "MinDuration": {
+ value: Math.floor(settings.sleepthresh * stFactor),
+ step: 1,
+ format: v => v + "min",
+ onchange: function(v) {
+ this.value = v = circulate(5, 15, v);
+ writeSetting("sleepthresh", Math.ceil(v / stFactor));
+ }
+ },
+ "Enabled": {
+ value: settings.enabled,
+ format: v => v ? "on" : "off",
+ onchange: function(v) {
+ writeSetting("enabled", v);
+ }
+ },
+ "Logfile ": {
+ value: settings.logfile === "sleeplog.log" ? true : settings.logfile.endsWith(".log") ? "custom" : false,
+ format: v => v === true ? "default" : v ? "custom" : "off",
+ onchange: function(v) {
+ if (v !== "custom") writeSetting("logfile", v ? "sleeplog.log" : undefined);
+ }
+ },
+ });
+ }
+
+ // draw main menu
+ showMain();
+})
diff --git a/bin/language_scan.js b/bin/language_scan.js
index b2e98b5f3..6385caf49 100755
--- a/bin/language_scan.js
+++ b/bin/language_scan.js
@@ -5,6 +5,16 @@ outputs a list of strings that have been found.
See https://github.com/espruino/BangleApps/issues/1311
*/
+let translate = false;
+if (process.env.DEEPL) {
+ // Requires translate
+ // npm i translate
+ translate = require("translate");
+ translate.engine = "deepl"; // Or "yandex", "libre", "deepl"
+ translate.key = process.env.DEEPL; // Requires API key (which are free)
+ translate.url = process.env.TURL;
+}
+
var IGNORE_STRINGS = [
"5x5","6x8","6x8:2","4x6","12x20","6x15","5x9Numeric7Seg", "Vector", // fonts
"---","...","*","##","00","GPS","ram",
@@ -12,7 +22,11 @@ var IGNORE_STRINGS = [
"sortorder","tl","tr",
"function","object", // typeof===
"txt", // layout styles
- "play","stop","pause", // music state
+ "play","stop","pause", "volumeup", "volumedown", // music state
+ "${hours}:${minutes}:${seconds}", "${hours}:${minutes}",
+ "BANGLEJS",
+ "fgH", "bgH", "m/s",
+ "undefined", "kbmedia", "NONE",
];
var IGNORE_FUNCTION_PARAMS = [
@@ -64,13 +78,20 @@ function isNotString(s, wasFnCall, wasArrayAccess) {
if (wasArrayAccess && IGNORE_ARRAY_ACCESS.includes(wasArrayAccess)) return true;
if (s=="Storage") console.log("isNotString",s,wasFnCall);
- if (s.length<2) return true; // too short
+ if (s.length<3) return true; // too short
if (s.length>40) return true; // too long
if (s[0]=="#") return true; // a color
- if (s.endsWith(".json") || s.endsWith(".img")) return true; // a filename
+ if (s.endsWith('.log') || s.endsWith('.js') || s.endsWith(".info") || s.endsWith(".csv") || s.endsWith(".json") || s.endsWith(".img") || s.endsWith(".txt")) return true; // a filename
if (s.endsWith("=")) return true; // probably base64
if (s.startsWith("BTN")) return true; // button name
if (IGNORE_STRINGS.includes(s)) return true; // one we know to ignore
+ if (!isNaN(parseFloat(s)) && isFinite(s)) return true; //is number
+ if (s.match(/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/)) return true; //roman number
+ if (!s.match(/.*[A-Z].*/i)) return true; // No letters
+ if (s.match(/.*[0-9].*/i)) return true; // No letters
+ if (s.match(/.*\(.*\).*/)) return true; // is function
+ if (s.match(/[A-Za-z]+[A-Z]([A-Z]|[a-z])*/)) return true; // is camel case
+ if (s.includes('_')) return true;
return false;
}
@@ -115,6 +136,7 @@ apps.forEach((app,appIdx) => {
if (previousString.includes("/*LANG*/")) { // translated!
addString(translatedStrings, tok.value, shortFilePath);
} else { // untranslated - potential to translate?
+ // filter out numbers
if (!isNotString(tok.value, wasFnCall, wasArrayAccess)) {
addString(untranslatedStrings, tok.value, shortFilePath);
}
@@ -137,6 +159,27 @@ untranslatedStrings.sort((a,b)=>a.uses - b.uses);
translatedStrings.sort((a,b)=>a.uses - b.uses);
+/*
+ * @description Add lang to start of string
+ * @param str string to add LANG to
+ * @param file file that string is found
+ * @returns void
+ */
+//TODO fix settings bug
+function applyLANG(str, file) {
+ fs.readFile(file, 'utf8', function (err,data) {
+ if (err) {
+ return console.log(err);
+ }
+ const regex = new RegExp(`(.*)((? translatedStrings.find(t=>t.str==e.str)).map(e=>`${JSON.stringify(e.str)} (${e.files.join(",")})`).join("\n"));
+const wordsToAdd = untranslatedStrings.filter(e => translatedStrings.find(t=>t.str==e.str));
+
+// Uncomment to add LANG to all strings
+// THIS IS EXPERIMENTAL
+//wordsToAdd.forEach(e => e.files.forEach(a => applyLANG(e.str, a)));
+
+log(wordsToAdd.map(e=>`${JSON.stringify(e.str)} (${e.uses} uses)`).join("\n"));
log("");
+
//process.exit(1);
log("Possible English Strings that could be translated");
log("=================================================================");
@@ -158,15 +208,16 @@ log("");
//process.exit(1);
let languages = JSON.parse(fs.readFileSync(`${BASEDIR}/lang/index.json`).toString());
-languages.forEach(language => {
+for (let language of languages) {
if (language.code == "en_GB") {
console.log(`Ignoring ${language.code}`);
- return;
+ continue;
}
console.log(`Scanning ${language.code}`);
log(language.code);
log("==========");
let translations = JSON.parse(fs.readFileSync(`${BASEDIR}/lang/${language.url}`).toString());
+ let translationPromises = [];
translatedStrings.forEach(translationItem => {
if (!translations.GLOBAL[translationItem.str]) {
console.log(`Missing GLOBAL translation for ${JSON.stringify(translationItem)}`);
@@ -176,11 +227,21 @@ languages.forEach(language => {
let appName = m[0].replaceAll("/", "");
if (translations[appName] && translations[appName][translationItem.str]) {
console.log(` but LOCAL translation found in \"${appName}\"`);
+ } else if (translate && language.code !== "tr_TR") { // Auto Translate
+ translationPromises.push(new Promise(async (resolve) => {
+ const translation = await translate(translationItem.str, language.code.split("_")[0]);
+ console.log("Translating:", translationItem.str, translation);
+ translations.GLOBAL[translationItem.str] = translation;
+ resolve()
+ }))
}
}
});
}
});
+ Promise.all(translationPromises).then(() => {
+ fs.writeFileSync(`${BASEDIR}/lang/${language.url}`, JSON.stringify(translations, null, 4))
+ });
log("");
-});
+}
console.log("Done.");
diff --git a/index.html b/index.html
index 64bf1d44c..6c9a21bf8 100644
--- a/index.html
+++ b/index.html
@@ -144,7 +144,7 @@
Default settings
diff --git a/lang/bg_BG.json b/lang/bg_BG.json
new file mode 100644
index 000000000..8e7fb50bb
--- /dev/null
+++ b/lang/bg_BG.json
@@ -0,0 +1,163 @@
+{
+ "//": "Bulgarian language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "Connected": "Свързан",
+ "circle 1": "кръг 1",
+ "week": "седмица",
+ "weather circle": "метеорологичен кръг",
+ "Timer": "Таймер",
+ "circle count": "брой кръгове",
+ "Keep Msgs": "Дръжте Msgs",
+ "Auto snooze": "Автоматична дрямка",
+ "Foreground": "На преден план",
+ "battery warn": "предупреждение за батерията",
+ "color": "цвят",
+ "Vibration": "Вибрации",
+ "New Timer": "Нов таймер",
+ "App Source\nNot found": "Източник на приложения\nНе е намерен",
+ "circle 2": "кръг 2",
+ "Circle": "Кръг",
+ "Record Run": "Записване на рекорд",
+ "BTNs 1:startlap 2:exit 3:reset": "BTNs 1:startlap 2:exit 3:reset",
+ "steps": "стъпки",
+ "Beep": "Бип",
+ "Unread timer": "Непрочетен таймер",
+ "Delete all messages": "Изтриване на всички съобщения",
+ "Music": "Музика",
+ "minimum": "минимум",
+ "BLE": "BLE",
+ "goal": "цел",
+ "Save": "Запазете",
+ "maximum": "максимален",
+ "(repeat)": "(повторение)",
+ "circle 3": "кръг 3",
+ "Steps": "Стъпки",
+ "Bluetooth": "Bluetooth",
+ "Alarm": "Аларма",
+ "colorize icon": "оцветяване на икона",
+ "circle 4": "кръг 4",
+ "Loading": "Зареждане на",
+ "step length": "дължина на стъпката",
+ "HID": "HID",
+ "Heartrate": "Сърдечен ритъм",
+ "Dark BW": "Тъмно BW",
+ "Customize": "Персонализиране на",
+ "valid period": "валиден период",
+ "Sleep": "Сън",
+ "distance goal": "цел за разстояние",
+ "LCD": "LCD",
+ "data": "данни",
+ "Vector font size": "Размер на векторния шрифт",
+ "Mark Unread": "Маркирайте непрочетеното",
+ "heartrate": "сърдечен ритъм",
+ "Show clocks": "Показване на часовници",
+ "New Alarm": "Нова аларма",
+ "Are you sure": "Сигурни ли сте, че",
+ "Highlight BG": "Подчертаване на BG",
+ "Remove": "Премахване на",
+ "No Messages": "Няма съобщения",
+ "Delete All Messages": "Изтриване на всички съобщения",
+ "Foreground 2": "Преден план 2",
+ "Launcher Settings": "Настройки на стартера",
+ "Compact Storage": "Компактно съхранение",
+ "min. confidence": "мин. доверие",
+ "Connect device\nto add to\nwhitelist": "Свързване на устройството\nда добавите към\nбял списък",
+ "LCD Brightness": "Яркост на LCD дисплея",
+ "Highlight FG": "Изтъкване на FG",
+ "Twist Threshold": "Праг на усукване",
+ "Add Device": "Добавяне на устройство",
+ "LCD Timeout": "Време за изключване на LCD",
+ "Twist Timeout": "Време за завъртане",
+ "Log": "Log",
+ "Time Zone": "Часова зона",
+ "Clock Style": "Стил на часовника",
+ "Debug Info": "Информация за отстраняването на грешки",
+ "Wake on Touch": "Събуждане при докосване",
+ "View Message": "Преглед на съобщението",
+ "Quiet Mode": "Тих режим",
+ "Background 2": "Контекст 2",
+ "Light BW": "Светлина BW",
+ "show widgets": "показване на уиджети",
+ "Font": "Шрифт",
+ "Piezo": "Piezo",
+ "Make Connectable": "Свържете се",
+ "Apps": "Приложения",
+ "Background": "Фон",
+ "Twist Max Y": "Twist Max Y",
+ "Utils": "Услуги",
+ "Programmable": "Програмируем",
+ "Wake on BTN2": "Събуждане на BTN2",
+ "Utilities": "Комунални услуги",
+ "TAP right top/bottom": "TAP дясно отгоре/отдолу",
+ "Wake on BTN1": "Събуждане на BTN1",
+ "Passkey BETA": "Passkey BETA",
+ "Wake on BTN3": "Събуждане на BTN3",
+ "Wake on Twist": "Събуждане на Twist",
+ "Wake on FaceUp": "Събуждане в FaceUp",
+ "No Clocks Found": "Не са намерени часовници",
+ "Reset to Defaults": "Възстановяване на настройките по подразбиране",
+ "Compacting...\nTakes approx\n1 minute": "Уплътняване...\nОтнема приблизително\n1 минута",
+ "Rewrite Settings": "Настройки за пренаписване",
+ "Stay Connectable": "Останете свързани",
+ "Turn Off": "Изключване",
+ "This will remove everything": "Това ще премахне всичко",
+ "Flatten Battery": "Сплескайте батерията",
+ "Reset Settings": "Нулиране на настройките",
+ "Connectable": "Свързване на",
+ "Storage": "Съхранение",
+ "start&lap/reset, BTN1: EXIT": "стартиране и застъпване/ нулиране, BTN1: EXIT",
+ "Month": "Месец",
+ "App Settings": "Настройки на приложението",
+ "Side": "Страна",
+ "Invalid settings": "Невалидни настройки",
+ "Date": "Дата",
+ "No app has settings": "Няма приложение с настройки",
+ "on": "на",
+ "Left": "Вляво",
+ "Minute": "Минута",
+ "Year": "Година",
+ "Second": "Втори",
+ "Hour": "Час",
+ "Reset all widgets": "Нулиране на всички уиджети",
+ "Widgets": "Уиджети",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Сплескване на батерията - това може да отнеме часове.\nДълго натиснете бутона, за да отмените",
+ "TIMER": "ТАЙМЕР",
+ "Right": "Вдясно",
+ "Reset": "Нулиране на",
+ "Reset All": "Нулиране на всички",
+ "Sort Order": "Ред на сортиране",
+ "ALARM": "АЛАРМА",
+ "Minutes": "Протоколи",
+ "Hours": "Часове",
+ "Vibrate": "Вибрация",
+ "off": "от",
+ "Delete": "Изтриване на",
+ "Repeat": "Повторете",
+ "Message": "Съобщение",
+ "Enabled": "Разрешено",
+ "Settings": "Настройки",
+ "System": "Система",
+ "Alerts": "Сигнали",
+ "Theme": "Тема",
+ "Hide": "Скрий",
+ "Show": "Покажи",
+ "Messages": "Съобщения",
+ "Set Time": "Време за настройка",
+ "Whitelist": "Бял списък",
+ "On": "На",
+ "Select Clock": "Избор на часовник",
+ "Locale": "Местоположение",
+ "No": "Не",
+ "Error in settings": "Грешка в настройките",
+ "Factory Reset": "Фабрично нулиране",
+ "Disable": "Деактивиране на",
+ "Off": "Изключено",
+ "Yes": "Да",
+ "Ok": "Добре",
+ "Back": "Обратно"
+ },
+ "alarm": {
+ "//": "App-specific overrides"
+ }
+}
\ No newline at end of file
diff --git a/lang/cs_CZ.json b/lang/cs_CZ.json
index 3f4fc87f1..0b56e69ed 100644
--- a/lang/cs_CZ.json
+++ b/lang/cs_CZ.json
@@ -1,53 +1,185 @@
{
- "//":"Czech language translations",
- "GLOBAL": {
- "//":"Translations that apply for all apps",
- "Alarm" : "Budík",
- "Hour" : "Hodina",
- "Hours" : "Hodiny",
- "Minute" : "Minuta",
- "Minutes" : "Minuty",
- "Second" : "Sekunda",
- "Seconds" : "Sekundy",
- "Month" : "Měsíc",
- "Enabled" : "Povoleno",
- "Background" : "Pozadí",
- "Connected" : "Připojeno",
- "Settings" : "Nastavení",
- "Save" : "Uložit",
- "Back" : "Zpět",
- "Repeat" : "Opakovat",
- "Delete" : "Smazat",
- "Sleep" : "Uspat",
- "Alarms" : "Budíky",
- "ALARM!" : "BUDÍK!",
-
- " (repeat)" : " (opakovat)",
- "< Back" : "< Zpět",
- "> Delete" : "> Smazat",
- "> Save" : " > Uložit",
- "ALARM " : "BUDÍK ",
-
- "Add Device" : "Přidat zařízení",
- "App Settings" : "Nast. Aplikací",
- "Apps" : "Aplikace"
-
- },
- "alarm": {
- "//":"App-specific overrides",
- "Alarm/Timer" : "Budik/Časovač",
- "rpt" : "Opk.",
- "New Alarm" : "Nový budík",
- "New Timer" : "Nový časovač",
- "Auto snooze" : "Auto odložit"
- },
- "setting" : {
- "Quiet Mode" : "Tichý režim"
-
- },
- "messages": {
- "Are you sure?" : "Opravdu?"
- }
-
-
-}
+ "//": "Czech language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "Alarm": "Budík",
+ "Hour": "Hodina",
+ "Hours": "Hodiny",
+ "Minute": "Minuta",
+ "Minutes": "Minuty",
+ "Second": "Sekunda",
+ "Seconds": "Sekundy",
+ "Month": "Měsíc",
+ "Enabled": "Povoleno",
+ "Background": "Pozadí",
+ "Connected": "Připojeno",
+ "Settings": "Nastavení",
+ "Save": "Uložit",
+ "Back": "Zpět",
+ "Repeat": "Opakovat",
+ "Delete": "Smazat",
+ "Sleep": "Uspat",
+ "Alarms": "Budíky",
+ "ALARM!": "BUDÍK!",
+ " (repeat)": " (opakovat)",
+ "< Back": "< Zpět",
+ "> Delete": "> Smazat",
+ "> Save": " > Uložit",
+ "ALARM ": "BUDÍK ",
+ "Add Device": "Přidat zařízení",
+ "App Settings": "Nast. Aplikací",
+ "Apps": "Aplikace",
+ "valid period": "doba platnosti",
+ "Font": "Písmo",
+ "circle count": "počet kroužků",
+ "min. confidence": "min. důvěra",
+ "circle 1": "okruh 1",
+ "circle 3": "kruh 3",
+ "step length": "délka kroku",
+ "Highlight FG": "Zvýraznění FG",
+ "Storage": "Úložiště",
+ "show widgets": "zobrazit widgety",
+ "Highlight BG": "Zvýraznění BG",
+ "Foreground 2": "Popředí 2",
+ "BLE": "BLE",
+ "Light BW": "Light BW",
+ "BTNs 1:startlap 2:exit 3:reset": "BTNs 1:startlap 2:exit 3:reset",
+ "Show clocks": "Zobrazit hodiny",
+ "Delete All Messages": "Odstranění všech zpráv",
+ "data": "data",
+ "Mark Unread": "Označit nepřečtené",
+ "Launcher Settings": "Nastavení spouštěče",
+ "circle 4": "kruh 4",
+ "App Source\nNot found": "Zdroj aplikace\nNenalezeno",
+ "Twist Timeout": "Twist Timeout",
+ "Dark BW": "Dark BW",
+ "Flatten Battery": "Zploštění baterie",
+ "Make Connectable": "Připojení",
+ "Wake on Touch": "Probuzení při dotyku",
+ "Twist Threshold": "Prahová hodnota Twist",
+ "Debug Info": "Informace o ladění",
+ "Time Zone": "Časové pásmo",
+ "battery warn": "upozornění na baterii",
+ "Remove": "Odstranění stránky",
+ "maximum": "maximum",
+ "Vector font size": "Velikost vektorového písma",
+ "Vibration": "Vibrace",
+ "(repeat)": "(opakování)",
+ "week": "týden",
+ "Yes\ndefinitely": "Ano\nurčitě",
+ "heartrate": "srdeční frekvence",
+ "Foreground": "Přední stránka",
+ "Clock Style": "Styl hodin",
+ "music": "hudba",
+ "Delete all messages": "Odstranění všech zpráv",
+ "Piezo": "Piezo",
+ "Log": "Přihlásit se",
+ "Twist Max Y": "Twist Max Y",
+ "STEPS": "KROKY",
+ "View Message": "Zobrazit zprávu",
+ "Heartrate": "Srdeční frekvence",
+ "TAP right top/bottom": "TAP vpravo nahoře/dole",
+ "Utils": "Utils",
+ "Programmable": "Programovatelné",
+ "Rewrite Settings": "Nastavení přepisu",
+ "Wake on BTN2": "Probuďte se na BTN2",
+ "Utilities": "Komunální služby",
+ "Compacting...\nTakes approx\n1 minute": "Zhutňování...\nTrvá přibližně\n1 minuta",
+ "Wake on FaceUp": "Probuzení na FaceUp",
+ "Wake on BTN1": "Probuďte se na BTN1",
+ "Wake on Twist": "Probuzení na Twistu",
+ "This will remove everything": "Tím se odstraní vše.",
+ "Keep Msgs": "Uchovávejte zprávy Msgs",
+ "Background 2": "Pozadí 2",
+ "Reset Settings": "Obnovení nastavení",
+ "Are you sure": "Jste si jistý, že",
+ "Stay Connectable": "Zůstaňte ve spojení",
+ "HID": "HID",
+ "colorize icon": "vybarvit ikonu",
+ "distance goal": "vzdálenostní cíl",
+ "circle 2": "kruh 2",
+ "Record Run": "Rekordní běh",
+ "Connectable": "Připojitelné",
+ "Side": "Strana",
+ "No app has settings": "Žádná aplikace nemá nastavení",
+ "Date": "Datum",
+ "OFF": "OFF",
+ "No Messages": "Žádné zprávy",
+ "Turn Off": "Vypnout",
+ "Invalid settings": "Neplatné nastavení",
+ "Unread timer": "Nepřečtený časovač",
+ "weather circle": "povětrnostní kruh",
+ "minimum": "minimum",
+ "Customize": "Přizpůsobení",
+ "Bluetooth": "Bluetooth",
+ "Circle": "Kruh",
+ "LCD": "LCD",
+ "Compact Storage": "Kompaktní úložiště",
+ "LCD Timeout": "Časový limit LCD",
+ "Connect device\nto add to\nwhitelist": "Připojení zařízení\npřidat do\nwhitelist",
+ "LCD Brightness": "Jas displeje LCD",
+ "TIMER": "ČASOVAČ",
+ "Reset All": "Obnovit vše",
+ "Left": "Vlevo",
+ "Reset": "Obnovení",
+ "goal": "cíl",
+ "Alerts": "Upozornění",
+ "Locale": "Lokalita",
+ "Beep": "Pípnutí",
+ "Vibrate": "Vibrace",
+ "Message": "Zpráva",
+ "System": "Systém",
+ "on": "na adrese",
+ "Sort Order": "Pořadí řazení",
+ "Right": "Vpravo",
+ "Select Clock": "Vybrat hodiny",
+ "Reset to Defaults": "Obnovení výchozího nastavení",
+ "Wake on BTN3": "Probuďte se na BTN3",
+ "Passkey BETA": "Passkey BETA",
+ "No Clocks Found": "Nebyly nalezeny žádné hodiny",
+ "Reset all widgets": "Obnovení všech widgetů",
+ "Widgets": "Widgety",
+ "Sleep Phase Alarm": "Alarm fáze spánku",
+ "Error in settings": "Chyba v nastavení",
+ "Timer": "Časovač",
+ "ALARM": "ALARM",
+ "Disable": "Zakázat",
+ "BACK": "ZPĚT",
+ "Whitelist": "Bílá listina",
+ "Factory Reset": "Obnovení továrního nastavení",
+ "Set Time": "Nastavený čas",
+ "Hide": "Skrýt",
+ "Messages": "Zprávy",
+ "On": "Na adrese",
+ "Show": "Zobrazit",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Zploštění baterie - může trvat hodiny.\nDlouhým stisknutím tlačítka zrušíte",
+ "start&lap/reset, BTN1: EXIT": "start&lap/reset, BTN1: EXIT",
+ "No": "Ne",
+ "Ok": "Ok",
+ "Yes": "Ano",
+ "Steps": "Kroky",
+ "Year": "Rok",
+ "steps": "kroky",
+ "back": "zpět",
+ "Music": "Hudba",
+ "Loading": "Načítání",
+ "off": "mimo",
+ "color": "barva",
+ "Off": "Vypnuto",
+ "Theme": "Téma"
+ },
+ "alarm": {
+ "//": "App-specific overrides",
+ "Alarm/Timer": "Budik/Časovač",
+ "rpt": "Opk.",
+ "New Alarm": "Nový budík",
+ "New Timer": "Nový časovač",
+ "Auto snooze": "Auto odložit"
+ },
+ "setting": {
+ "Quiet Mode": "Tichý režim"
+ },
+ "messages": {
+ "Are you sure?": "Opravdu?"
+ }
+}
\ No newline at end of file
diff --git a/lang/da_DA.json b/lang/da_DA.json
new file mode 100644
index 000000000..59aea3068
--- /dev/null
+++ b/lang/da_DA.json
@@ -0,0 +1,163 @@
+{
+ "//": "Danish language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "New Alarm": "Ny alarm",
+ "Alarm": "Alarm",
+ "New Timer": "Ny timer",
+ "Save": "Gem",
+ "(repeat)": "(gentagelse)",
+ "circle 1": "kreds 1",
+ "circle 3": "kreds 3",
+ "circle 2": "kreds 2",
+ "Auto snooze": "Automatisk slumretid",
+ "circle 4": "cirkel 4",
+ "show widgets": "vise widgets",
+ "Connected": "Tilsluttet",
+ "Keep Msgs": "Behold msgs",
+ "min. confidence": "min. tillid",
+ "heartrate": "hjertefrekvens",
+ "steps": "trin",
+ "week": "uge",
+ "Sleep": "Søvn",
+ "circle count": "antal cirkler",
+ "goal": "mål",
+ "Timer": "Timer",
+ "Steps": "Trin",
+ "valid period": "gyldighedsperiode",
+ "step length": "trinlængde",
+ "minimum": "minimum",
+ "weather circle": "vejrkreds",
+ "maximum": "maksimum",
+ "data": "data",
+ "Circle": "Cirkel",
+ "Heartrate": "Hjertefrekvens",
+ "battery warn": "batteri advarer",
+ "App Source\nNot found": "App-kilde\nIkke fundet",
+ "colorize icon": "farvelægge ikonet",
+ "distance goal": "mål for afstand",
+ "TAP right top/bottom": "TAP højre top/bund",
+ "color": "farve",
+ "View Message": "Vis besked",
+ "Show clocks": "Vis ure",
+ "Mark Unread": "Markér ulæst",
+ "Unread timer": "Ulæst timer",
+ "Loading": "Indlæsning",
+ "Launcher Settings": "Indstillinger for startopsætningen",
+ "Bluetooth": "Bluetooth",
+ "Music": "Musik",
+ "Font": "Skrifttype",
+ "Vector font size": "Vektor skriftstørrelse",
+ "BTNs 1:startlap 2:exit 3:reset": "BTN'er 1:startlap 2:exit 3:reset",
+ "No Messages": "Ingen meddelelser",
+ "Are you sure": "Er du sikker på",
+ "Delete All Messages": "Slet alle meddelelser",
+ "Record Run": "Rekordløb",
+ "Delete all messages": "Slet alle meddelelser",
+ "start&lap/reset, BTN1: EXIT": "start&lap/reset, BTN1: EXIT",
+ "Vibration": "Vibrationer",
+ "HID": "HID",
+ "Make Connectable": "Gør det muligt at forbinde",
+ "LCD": "LCD",
+ "BLE": "BLE",
+ "Utils": "Utils",
+ "Piezo": "Piezo",
+ "Apps": "Apps",
+ "Background": "Baggrund",
+ "Customize": "Tilpas",
+ "Beep": "Bip",
+ "Quiet Mode": "Stille tilstand",
+ "Dark BW": "Mørk BW",
+ "Programmable": "Programmerbar",
+ "Passkey BETA": "Passkey BETA",
+ "Light BW": "Light BW",
+ "Highlight FG": "fremhæve FG",
+ "Background 2": "Baggrund 2",
+ "Foreground": "Forgrund",
+ "Highlight BG": "fremhæve BG",
+ "Foreground 2": "Forgrund 2",
+ "LCD Timeout": "LCD Timeout",
+ "Remove": "Fjern",
+ "Wake on BTN2": "Wake på BTN2",
+ "LCD Brightness": "LCD lysstyrke",
+ "Add Device": "Tilføj enhed",
+ "Wake on BTN1": "Vågn op på BTN1",
+ "Connect device\nto add to\nwhitelist": "Tilslut enhed\ntil at tilføje til\nwhitelist",
+ "Wake on BTN3": "Wake på BTN3",
+ "Wake on FaceUp": "Vågn op på FaceUp",
+ "Log": "Log",
+ "Debug Info": "Info om fejlfinding",
+ "Wake on Twist": "Vågn op på Twist",
+ "Wake on Touch": "Vågn op ved berøring",
+ "Clock Style": "Ur stil",
+ "Time Zone": "Tidszone",
+ "Twist Max Y": "Drej Max Y",
+ "Twist Threshold": "Twist tærskel",
+ "Compact Storage": "Kompakt opbevaring",
+ "Twist Timeout": "Twist Timeout",
+ "Storage": "Opbevaring",
+ "Utilities": "Hjælpeprogrammer",
+ "Rewrite Settings": "Omskrivning af indstillinger",
+ "No Clocks Found": "Ingen ure fundet",
+ "Reset to Defaults": "Nulstil til standardindstillingerne",
+ "Compacting...\nTakes approx\n1 minute": "Komprimering...\nTager ca.\n1 minut",
+ "Connectable": "Tilslutbar",
+ "Reset Settings": "Nulstil indstillinger",
+ "Stay Connectable": "Forbliv forbundet",
+ "Flatten Battery": "Flade batterier",
+ "Minute": "Minut",
+ "This will remove everything": "Dette vil fjerne alt",
+ "Turn Off": "Sluk for",
+ "Hour": "Timer",
+ "Month": "Måned",
+ "Second": "Anden",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Udfladning af batteriet - dette kan tage flere timer.\nTryk længe på knappen for at annullere",
+ "Year": "År",
+ "Widgets": "Widgets",
+ "Date": "Dato",
+ "Side": "Side",
+ "Left": "Venstre",
+ "App Settings": "App-indstillinger",
+ "No app has settings": "Ingen app har indstillinger",
+ "Invalid settings": "Ugyldige indstillinger",
+ "Reset All": "Nulstil alt",
+ "on": "på",
+ "TIMER": "TIMER",
+ "Right": "Højre",
+ "Sort Order": "Sorteringsrækkefølge",
+ "Reset": "Nulstil",
+ "Reset all widgets": "Nulstil alle widgets",
+ "ALARM": "ALARM",
+ "Settings": "Indstillinger",
+ "Alerts": "Advarsler",
+ "System": "System",
+ "Theme": "Tema",
+ "Locale": "Lokale",
+ "Vibrate": "Vibrere",
+ "Enabled": "Aktiveret",
+ "Hours": "Timer",
+ "Delete": "Slet",
+ "Minutes": "Protokol",
+ "Message": "Besked",
+ "Repeat": "Gentag",
+ "off": "off",
+ "Whitelist": "Whitelist",
+ "Show": "Vis",
+ "Messages": "Meddelelser",
+ "On": "På",
+ "Hide": "Skjul",
+ "Set Time": "Indstil tid",
+ "Factory Reset": "Fabriksnulstilling",
+ "Disable": "Deaktivere",
+ "Error in settings": "Fejl i indstillingerne",
+ "Select Clock": "Vælg ur",
+ "No": "Nej",
+ "Yes": "Ja",
+ "Ok": "Ok",
+ "Off": "Off",
+ "Back": "Tilbage"
+ },
+ "alarm": {
+ "//": "App-specific overrides"
+ }
+}
\ No newline at end of file
diff --git a/lang/de_DE.json b/lang/de_DE.json
index b4acfe675..8c893e6ad 100644
--- a/lang/de_DE.json
+++ b/lang/de_DE.json
@@ -1,28 +1,173 @@
{
- "//":"German language translations",
- "GLOBAL": {
- "//":"Translations that apply for all apps",
- "Alarm" : "Wecker",
- "Hours" : "Stunden",
- "Minutes" : "Minuten",
- "Enabled" : "Aktiviert",
- "Settings" : "Einstellungen",
- "Save" : "Speichern",
- "Back" : "Zurück",
- "Repeat" : "Wiederholen",
- "Delete" : "Löschen",
- "Sleep" : "Schlummern",
- "Alarms" : "Wecker",
- "New Alarm" : "Neuer Wecker",
- "ALARM!" : "ALARM!",
- "Yes" : "Ja",
- "No" : "Nein",
- "On" : "Ein",
- "Off" : "Aus",
- "Ok" : "OK"
- },
- "alarm": {
- "//":"App-specific overrides",
- "rpt" : "Wdh."
- }
-}
+ "//": "German language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "Alarm": "Wecker",
+ "Hours": "Stunden",
+ "Minutes": "Minuten",
+ "Enabled": "Aktiviert",
+ "Settings": "Einstellungen",
+ "Save": "Speichern",
+ "Back": "Zurück",
+ "Repeat": "Wiederholen",
+ "Delete": "Löschen",
+ "Sleep": "Schlummern",
+ "Alarms": "Wecker",
+ "New Alarm": "Neuer Wecker",
+ "ALARM!": "ALARM!",
+ "Yes": "Ja",
+ "No": "Nein",
+ "On": "Ein",
+ "Off": "Aus",
+ "Ok": "OK",
+ "New Timer": "Neue Zeitschaltuhr",
+ "(repeat)": "(Wiederholung)",
+ "music": "Musik",
+ "Keep Msgs": "Msgs behalten",
+ "circle count": "Kreiszahl",
+ "Auto snooze": "Automatisches Schlummern",
+ "week": "Woche",
+ "Heartrate": "Herzfrequenz",
+ "minimum": "Minimum",
+ "weather circle": "Wetterkreis",
+ "circle 3": "Kreis 3",
+ "show widgets": "Widgets anzeigen",
+ "circle 4": "Kreis 4",
+ "circle 1": "Kreis 1",
+ "circle 2": "Kreis 2",
+ "battery warn": "Batteriewarnung",
+ "heartrate": "Herzfrequenz",
+ "data": "Daten",
+ "step length": "Schrittlänge",
+ "valid period": "Gültigkeitsdauer",
+ "colorize icon": "Symbol einfärben",
+ "min. confidence": "Mindestvertrauen",
+ "maximum": "maximal",
+ "distance goal": "Fernziel",
+ "Circle": "Kreis",
+ "Yes\ndefinitely": "Ja\ndefinitiv",
+ "TAP right top/bottom": "TAP rechts oben/unten",
+ "Are you sure": "Sind Sie sicher, dass",
+ "STEPS": "SCHRITTE",
+ "Mark Unread": "Ungelesen markieren",
+ "Delete all messages": "Alle Nachrichten löschen",
+ "Unread timer": "Ungelesener Timer",
+ "Quiet Mode": "Leiser Modus",
+ "Utils": "Werkzeuge",
+ "Piezo": "Piezo",
+ "LCD": "LCD",
+ "Record Run": "Rekordlauf",
+ "Apps": "Apps",
+ "Delete All Messages": "Alle Nachrichten löschen",
+ "start&lap/reset, BTN1: EXIT": "Start&Runde/Zurücksetzen, BTN1: EXIT",
+ "No Messages": "Keine Nachrichten",
+ "Bluetooth": "Bluetooth",
+ "BTNs 1:startlap 2:exit 3:reset": "BTNs 1:startlap 2:exit 3:reset",
+ "View Message": "Nachricht anzeigen",
+ "Vector font size": "Vektor-Schriftgröße",
+ "Light BW": "Licht BW",
+ "BLE": "BLE",
+ "Make Connectable": "Verbindbar machen",
+ "Vibration": "Vibration",
+ "Foreground": "Vorderseite",
+ "Customize": "Anpassen",
+ "HID": "HID",
+ "Dark BW": "Dunkel BW",
+ "Passkey BETA": "Hauptschlüssel BETA",
+ "Show clocks": "Uhren anzeigen",
+ "Font": "Schriftart",
+ "Launcher Settings": "Launcher-Einstellungen",
+ "App Source\nNot found": "App-Quelle\nNicht gefunden",
+ "Programmable": "Programmierbar",
+ "Background 2": "Hintergrund 2",
+ "Foreground 2": "Vordergrund 2",
+ "Add Device": "Gerät hinzufügen",
+ "Highlight BG": "Hervorhebung BG",
+ "Background": "Hintergrund",
+ "Highlight FG": "Highlight FG",
+ "Wake on Touch": "Wecken bei Berührung",
+ "Twist Timeout": "Twist Timeout",
+ "Twist Max Y": "Twist Max Y",
+ "LCD Timeout": "LCD-Zeitüberschreitung",
+ "LCD Brightness": "LCD-Helligkeit",
+ "Utilities": "Versorgungsunternehmen",
+ "Log": "Protokoll",
+ "Compact Storage": "Kompakte Lagerung",
+ "Wake on BTN3": "Wake auf BTN3",
+ "Twist Threshold": "Schwellenwert verdrehen",
+ "Remove": "entfernen",
+ "Connect device\nto add to\nwhitelist": "Gerät verbinden\nzum Hinzufügen zur\nWhitelist",
+ "Debug Info": "Debug-Informationen",
+ "Time Zone": "Zeitzone",
+ "Clock Style": "Uhr Stil",
+ "Wake on BTN2": "Wake auf BTN2",
+ "Wake on FaceUp": "Wake on FaceUp",
+ "Wake on BTN1": "Wake auf BTN1",
+ "Wake on Twist": "Wake on Twist",
+ "Connectable": "Anschließbar",
+ "Second": "Zweite",
+ "Minute": "Minute",
+ "Turn Off": "Ausschalten",
+ "No Clocks Found": "Keine Uhren gefunden",
+ "App Settings": "App-Einstellungen",
+ "Hour": "Stunde",
+ "Reset to Defaults": "Auf Standardwerte zurücksetzen",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Entladen der Batterie - dies kann Stunden dauern.\nLanger Tastendruck zum Abbrechen",
+ "Reset Settings": "Einstellungen zurücksetzen",
+ "Rewrite Settings": "Einstellungen umschreiben",
+ "Compacting...\nTakes approx\n1 minute": "Verdichten...\nDauert ca.\n1 Minute",
+ "Stay Connectable": "Anschlussfähig bleiben",
+ "Storage": "Lagerung",
+ "This will remove everything": "Dadurch wird alles entfernt",
+ "on": "auf",
+ "TIMER": "TIMER",
+ "Widgets": "Widgets",
+ "goal": "Ziel",
+ "Beep": "Piep",
+ "Reset": "Zurücksetzen",
+ "No app has settings": "Keine App hat Einstellungen",
+ "Month": "Monat",
+ "Reset All": "Alle zurücksetzen",
+ "Flatten Battery": "Batterie abflachen",
+ "Right": "Rechts",
+ "Side": "Seite",
+ "Left": "Links",
+ "Sleep Phase Alarm": "Schlafphasenalarm",
+ "Date": "Datum",
+ "Sort Order": "Sortierreihenfolge",
+ "OFF": "AUS",
+ "Invalid settings": "Ungültige Einstellungen",
+ "Message": "Nachricht",
+ "Vibrate": "Vibrieren",
+ "Reset all widgets": "Alle Widgets zurücksetzen",
+ "System": "System",
+ "Alerts": "Warnungen",
+ "Locale": "Schauplatz",
+ "Whitelist": "Whitelist",
+ "Select Clock": "Uhr auswählen",
+ "Disable": "Deaktivieren Sie",
+ "Timer": "Zeitschaltuhr",
+ "Error in settings": "Fehler in den Einstellungen",
+ "Set Time": "Zeit einstellen",
+ "ALARM": "ALARM",
+ "BACK": "ZURÜCK",
+ "Factory Reset": "Werksreset",
+ "steps": "Schritte",
+ "Connected": "Verbunden",
+ "Show": "anzeigen",
+ "Messages": "Nachrichten",
+ "Hide": "Ausblenden",
+ "back": "zurück",
+ "Steps": "Schritte",
+ "Year": "Jahr",
+ "Loading": "Laden",
+ "Music": "Musik",
+ "color": "Farbe",
+ "off": "aus",
+ "Theme": "Thema"
+ },
+ "alarm": {
+ "//": "App-specific overrides",
+ "rpt": "Wdh."
+ }
+}
\ No newline at end of file
diff --git a/lang/el_EL.json b/lang/el_EL.json
new file mode 100644
index 000000000..38ef6a01f
--- /dev/null
+++ b/lang/el_EL.json
@@ -0,0 +1,163 @@
+{
+ "//": "Greek language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "Save": "Αποθήκευση",
+ "week": "εβδομάδα",
+ "Keep Msgs": "Κρατήστε τα Msgs",
+ "New Alarm": "Νέος συναγερμός",
+ "Connected": "Συνδεδεμένο",
+ "Circle": "Κύκλος",
+ "maximum": "μέγιστο",
+ "Heartrate": "Καρδιακός ρυθμός",
+ "step length": "μήκος βήματος",
+ "valid period": "περίοδος ισχύος",
+ "(repeat)": "(επανάληψη)",
+ "min. confidence": "ελάχιστη εμπιστοσύνη",
+ "New Timer": "Νέος χρονοδιακόπτης",
+ "Sleep": "Ύπνος",
+ "Timer": "Χρονοδιακόπτης",
+ "Alarm": "Συναγερμός",
+ "goal": "γκολ",
+ "distance goal": "στόχος απόστασης",
+ "Steps": "Βήματα",
+ "minimum": "ελάχιστο",
+ "circle 4": "κύκλος 4",
+ "steps": "βήματα",
+ "circle 2": "κύκλος 2",
+ "circle 1": "κύκλος 1",
+ "weather circle": "κύκλος καιρού",
+ "circle count": "Αριθμός κύκλων",
+ "heartrate": "καρδιακός ρυθμός",
+ "circle 3": "κύκλος 3",
+ "show widgets": "Εμφάνιση widgets",
+ "battery warn": "προειδοποίηση μπαταρίας",
+ "Vector font size": "Μέγεθος γραμματοσειράς διανύσματος",
+ "Font": "Γραμματοσειρά",
+ "colorize icon": "χρωματισμός εικονιδίου",
+ "Show clocks": "Εμφάνιση ρολογιών",
+ "color": "χρώμα",
+ "Launcher Settings": "Ρυθμίσεις εκτοξευτή",
+ "App Source\nNot found": "Πηγή εφαρμογής\nΔεν βρέθηκε",
+ "Loading": "Φόρτωση",
+ "data": "δεδομένα",
+ "View Message": "Προβολή μηνύματος",
+ "Delete all messages": "Διαγραφή όλων των μηνυμάτων",
+ "Mark Unread": "Mark Unread",
+ "Are you sure": "Είσαι σίγουρος",
+ "Delete All Messages": "Διαγραφή όλων των μηνυμάτων",
+ "Unread timer": "Χρονοδιακόπτης χωρίς ανάγνωση",
+ "Apps": "Εφαρμογές",
+ "Record Run": "Τρέξιμο ρεκόρ",
+ "No Messages": "Δεν υπάρχουν μηνύματα",
+ "Music": "Μουσική",
+ "Bluetooth": "Bluetooth",
+ "LCD": "LCD",
+ "Piezo": "Piezo",
+ "Quiet Mode": "Αθόρυβη λειτουργία",
+ "Make Connectable": "Κάντε Connectable",
+ "Utils": "Utils",
+ "Vibration": "Δονήσεις",
+ "Programmable": "Προγραμματιζόμενο",
+ "Beep": "Μπιπ",
+ "Passkey BETA": "Passkey BETA",
+ "Wake on Touch": "Αφύπνιση στο άγγιγμα",
+ "Twist Max Y": "Twist Max Y",
+ "Time Zone": "Ζώνη ώρας",
+ "Remove": "Αφαιρέστε το",
+ "Add Device": "Προσθήκη συσκευής",
+ "LCD Brightness": "Φωτεινότητα LCD",
+ "LCD Timeout": "Χρονικό όριο LCD",
+ "Twist Timeout": "Twist Timeout",
+ "Highlight BG": "Επισημάνετε το BG",
+ "Highlight FG": "Επισημάνετε το FG",
+ "Light BW": "Ελαφρύ BW",
+ "Foreground 2": "Πρόσθιο πεδίο 2",
+ "Background": "Ιστορικό",
+ "Background 2": "Ιστορικό 2",
+ "HID": "HID",
+ "Dark BW": "Σκούρο BW",
+ "BLE": "BLE",
+ "Customize": "Προσαρμογή",
+ "Debug Info": "Πληροφορίες εντοπισμού σφαλμάτων",
+ "Rewrite Settings": "Ρυθμίσεις επανεγγραφής",
+ "Storage": "Αποθήκευση",
+ "Flatten Battery": "Επίπεδη μπαταρία",
+ "Clock Style": "Στυλ ρολογιού",
+ "Compact Storage": "Συμπαγής αποθήκευση",
+ "Utilities": "Υπηρεσίες κοινής ωφέλειας",
+ "Log": "Ημερολόγιο",
+ "Right": "Δεξιά",
+ "Month": "Μήνας",
+ "Side": "Πλευρά",
+ "No app has settings": "Καμία εφαρμογή δεν έχει ρυθμίσεις",
+ "Widgets": "Widgets",
+ "Left": "Αριστερά",
+ "Reset All": "Επαναφορά όλων",
+ "Invalid settings": "Μη έγκυρες ρυθμίσεις",
+ "Reset": "Επαναφορά",
+ "Sort Order": "Σειρά ταξινόμησης",
+ "TAP right top/bottom": "TAP δεξιά πάνω/κάτω",
+ "Wake on BTN2": "Wake στο BTN2",
+ "Connect device\nto add to\nwhitelist": "Σύνδεση συσκευής\nγια να προσθέσετε\nλευκή λίστα",
+ "Wake on FaceUp": "Wake στο FaceUp",
+ "Wake on BTN1": "Wake στο BTN1",
+ "Wake on BTN3": "Wake στο BTN3",
+ "Foreground": "Πρόσφατα στοιχεία",
+ "Wake on Twist": "Wake on Twist",
+ "Auto snooze": "Αυτόματη επαναφορά",
+ "Twist Threshold": "Κατώφλι συστροφής",
+ "Compacting...\nTakes approx\n1 minute": "Συμπίεση...\nΠαίρνει περίπου\n1 λεπτό",
+ "Connectable": "Συνδεόμενο",
+ "Repeat": "Επανάληψη",
+ "No Clocks Found": "Δεν βρέθηκαν ρολόγια",
+ "TIMER": "TIMER",
+ "App Settings": "Ρυθμίσεις εφαρμογής",
+ "Stay Connectable": "Μείνετε συνδεδεμένοι",
+ "Second": "Δεύτερο",
+ "Minute": "Λεπτό",
+ "Date": "Ημερομηνία",
+ "This will remove everything": "Αυτό θα αφαιρέσει τα πάντα",
+ "Reset to Defaults": "Επαναφορά στις προεπιλογές",
+ "Vibrate": "Δονήσεις",
+ "Hour": "Ώρα",
+ "Turn Off": "Απενεργοποίηση",
+ "Reset Settings": "Επαναφορά ρυθμίσεων",
+ "Year": "Έτος",
+ "Message": "Μήνυμα",
+ "Locale": "Τοπική τοποθεσία",
+ "Alerts": "Ειδοποιήσεις",
+ "Theme": "Θέμα",
+ "Error in settings": "Σφάλμα στις ρυθμίσεις",
+ "Disable": "Απενεργοποίηση",
+ "Factory Reset": "Επαναφορά εργοστασιακών ρυθμίσεων",
+ "System": "Σύστημα",
+ "Ok": "Εντάξει",
+ "Yes": "Ναι",
+ "On": "Στο",
+ "Settings": "Ρυθμίσεις",
+ "Select Clock": "Επιλέξτε Ρολόι",
+ "Off": "Off",
+ "Back": "Πίσω",
+ "No": "Όχι",
+ "Delete": "Διαγραφή",
+ "Enabled": "Ενεργοποιημένο",
+ "Hours": "Ώρες",
+ "ALARM": "ALARM",
+ "on": "στο",
+ "off": "off",
+ "Minutes": "Πρακτικά",
+ "Reset all widgets": "Επαναφορά όλων των widgets",
+ "Hide": "Απόκρυψη",
+ "Messages": "Μηνύματα",
+ "Show": "Εμφάνιση",
+ "Set Time": "Ρύθμιση χρόνου",
+ "BTNs 1:startlap 2:exit 3:reset": "BTNs 1:startlap 2:exit 3:reset",
+ "start&lap/reset, BTN1: EXIT": "εκκίνηση&γύρος/επαναφορά, BTN1: ΕΞΟΔΟΣ",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Εξομάλυνση της μπαταρίας - αυτό μπορεί να διαρκέσει ώρες.\nΠατήστε παρατεταμένα το κουμπί για ακύρωση",
+ "Whitelist": "Λευκή λίστα"
+ },
+ "alarm": {
+ "//": "App-specific overrides"
+ }
+}
\ No newline at end of file
diff --git a/lang/es_ES.json b/lang/es_ES.json
index a3e7ede3f..d381582e3 100644
--- a/lang/es_ES.json
+++ b/lang/es_ES.json
@@ -1,28 +1,173 @@
{
- "//":"Spanish language translations",
- "GLOBAL": {
- "//":"Translations that apply for all apps",
- "Alarms" : "Alarmas",
- "Hours" : "Horas",
- "Minutes" : "Minutos",
- "Enabled" : "Activados",
- "Save" : "Ahorrar",
- "Back" : "Regresa",
- "Repeat" : "Repetición",
- "Delete" : "Borrar",
- "ALARM!" : "ALARM",
- "Sleep" : "Dormir",
- "Alarms" : "Alarmas",
- "New Alarm" : "Nueva alarma",
- "ALARM!" : "ALARM!",
- "Yes" : "Si",
- "No" : "No",
- "On" : "Encendido",
- "Off" : "Apagado",
- "Ok" : "OK"
- },
- "alarm": {
- "//":"App-specific overrides",
- "rpt" : "rep."
- }
-}
+ "//": "Spanish language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "Alarms": "Alarmas",
+ "Hours": "Horas",
+ "Minutes": "Minutos",
+ "Enabled": "Activados",
+ "Save": "Ahorrar",
+ "Back": "Regresa",
+ "Repeat": "Repetición",
+ "Delete": "Borrar",
+ "ALARM!": "ALARM!",
+ "Sleep": "Dormir",
+ "New Alarm": "Nueva alarma",
+ "Yes": "Si",
+ "No": "No",
+ "On": "Encendido",
+ "Off": "Apagado",
+ "Ok": "OK",
+ "(repeat)": "(repetir)",
+ "New Timer": "Nuevo temporizador",
+ "music": "música",
+ "circle 2": "círculo 2",
+ "circle 1": "círculo 1",
+ "Keep Msgs": "Mantener Msgs",
+ "circle 3": "círculo 3",
+ "week": "semana",
+ "Auto snooze": "Repetición automática de la alarma",
+ "show widgets": "mostrar widgets",
+ "min. confidence": "confianza mínima",
+ "circle 4": "círculo 4",
+ "circle count": "recuento de círculos",
+ "heartrate": "ritmo cardíaco",
+ "Heartrate": "El ritmo cardíaco",
+ "weather circle": "círculo meteorológico",
+ "battery warn": "aviso de batería",
+ "minimum": "mínimo",
+ "distance goal": "objetivo de distancia",
+ "valid period": "período de validez",
+ "maximum": "máximo",
+ "step length": "longitud del paso",
+ "data": "datos",
+ "colorize icon": "colorear el icono",
+ "Circle": "Círculo",
+ "Launcher Settings": "Configuración del lanzador",
+ "App Source\nNot found": "Fuente de la aplicación\nNo se ha encontrado",
+ "Show clocks": "Mostrar relojes",
+ "Font": "Fuente",
+ "TAP right top/bottom": "TAP derecho superior/inferior",
+ "Yes\ndefinitely": "Sí\ndefinitivamente",
+ "View Message": "Ver mensaje",
+ "Delete all messages": "Borrar todos los mensajes",
+ "STEPS": "PASOS",
+ "BTNs 1:startlap 2:exit 3:reset": "BTNs 1:startlap 2:exit 3:reset",
+ "start&lap/reset, BTN1: EXIT": "start&lap/reset, BTN1: EXIT",
+ "Are you sure": "¿Está seguro de que",
+ "Vector font size": "Tamaño de la fuente vectorial",
+ "Mark Unread": "Marcar como no leído",
+ "No Messages": "No hay mensajes",
+ "Delete All Messages": "Borrar todos los mensajes",
+ "LCD": "LCD",
+ "Apps": "Aplicaciones",
+ "Unread timer": "Temporizador no leído",
+ "Record Run": "Carrera de récords",
+ "Bluetooth": "Bluetooth",
+ "Quiet Mode": "Modo silencioso",
+ "Piezo": "Piezo",
+ "Make Connectable": "Hacer conectable",
+ "Programmable": "Programable",
+ "Vibration": "Vibración",
+ "Passkey BETA": "Passkey BETA",
+ "Customize": "Personalice",
+ "HID": "HID",
+ "Utils": "Utilidades",
+ "Light BW": "Luz BW",
+ "BLE": "BLE",
+ "Dark BW": "BW oscuro",
+ "Background 2": "Antecedentes 2",
+ "Foreground 2": "Primer plano 2",
+ "Foreground": "Primer plano",
+ "Highlight BG": "Resaltar BG",
+ "Connect device\nto add to\nwhitelist": "Conectar dispositivo\npara añadirlo a la\nlista blanca",
+ "Highlight FG": "Destacar FG",
+ "Background": "Antecedentes",
+ "Add Device": "Añadir dispositivo",
+ "Remove": "Eliminar",
+ "Wake on BTN3": "Wake en BTN3",
+ "Twist Max Y": "Twist Max Y",
+ "LCD Timeout": "Tiempo de espera del LCD",
+ "Twist Threshold": "Umbral de giro",
+ "Wake on BTN2": "Wake en BTN2",
+ "Wake on BTN1": "Wake en BTN1",
+ "Wake on Twist": "Despertar en Twist",
+ "LCD Brightness": "Brillo del LCD",
+ "Log": "Registro",
+ "Time Zone": "Huso horario",
+ "Wake on FaceUp": "Despierta en FaceUp",
+ "Wake on Touch": "Despertar al tacto",
+ "Twist Timeout": "Tiempo de espera de la torsión",
+ "Compact Storage": "Almacenamiento compacto",
+ "Clock Style": "Estilo de reloj",
+ "Storage": "Almacenamiento",
+ "Utilities": "Servicios públicos",
+ "Compacting...\nTakes approx\n1 minute": "La compactación...\nTarda aproximadamente\n1 minuto",
+ "Debug Info": "Información de depuración",
+ "Rewrite Settings": "Reescribir la configuración",
+ "Flatten Battery": "Aplastar la batería",
+ "Turn Off": "Apagar",
+ "This will remove everything": "Esto eliminará todo",
+ "Reset Settings": "Restablecer la configuración",
+ "Month": "Mes",
+ "Second": "Segundo",
+ "Date": "Fecha",
+ "Reset to Defaults": "Restablecer los valores predeterminados",
+ "Hour": "Hora",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Aplastar la batería - esto puede llevar horas.\nPulsar prolongadamente el botón para cancelar",
+ "Stay Connectable": "Manténgase conectado",
+ "Minute": "Minuta",
+ "No Clocks Found": "No se han encontrado relojes",
+ "Connectable": "Conectable",
+ "No app has settings": "Ninguna aplicación tiene ajustes",
+ "Invalid settings": "Ajustes no válidos",
+ "App Settings": "Configuración de la aplicación",
+ "Side": "Lado",
+ "OFF": "OFF",
+ "Sleep Phase Alarm": "Alarma de fase de sueño",
+ "Widgets": "Widgets",
+ "Left": "Izquierda",
+ "Sort Order": "Orden de clasificación",
+ "TIMER": "TEMPORIZADOR",
+ "goal": "objetivo",
+ "Right": "A la derecha",
+ "on": "en",
+ "Alarm": "Alarma",
+ "Reset All": "Restablecer todo",
+ "Reset all widgets": "Restablecer todos los widgets",
+ "Reset": "Reiniciar",
+ "Beep": "Bip",
+ "System": "Sistema",
+ "Locale": "Localidad",
+ "Message": "Mensaje",
+ "Set Time": "Hora de la cita",
+ "Vibrate": "Vibrar",
+ "Alerts": "Alertas",
+ "Timer": "Temporizador",
+ "Error in settings": "Error en la configuración",
+ "Select Clock": "Seleccionar reloj",
+ "Whitelist": "Lista blanca",
+ "Disable": "Desactivar",
+ "BACK": "VOLVER",
+ "Factory Reset": "Restablecimiento de fábrica",
+ "Connected": "Conectado",
+ "ALARM": "ALARMA",
+ "Messages": "Mensajes",
+ "Settings": "Ajustes",
+ "Show": "Mostrar",
+ "Hide": "Ocultar",
+ "steps": "pasos",
+ "back": "volver",
+ "Steps": "Pasos",
+ "Year": "Año",
+ "Loading": "Cargando",
+ "Music": "Música",
+ "color": "color",
+ "off": "fuera de",
+ "Theme": "Tema"
+ },
+ "alarm": {
+ "//": "App-specific overrides",
+ "rpt": "rep."
+ }
+}
\ No newline at end of file
diff --git a/lang/et_ET.json b/lang/et_ET.json
new file mode 100644
index 000000000..33be5bf6c
--- /dev/null
+++ b/lang/et_ET.json
@@ -0,0 +1,163 @@
+{
+ "//": "Estonian language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "New Alarm": "Uus häire",
+ "Alarm": "Häire",
+ "Save": "Salvesta",
+ "Timer": "Taimer",
+ "(repeat)": "(kordus)",
+ "New Timer": "Uus taimer",
+ "circle 2": "ring 2",
+ "week": "nädal",
+ "circle 4": "ring 4",
+ "circle count": "ringide arv",
+ "Sleep": "Sleep",
+ "circle 3": "ring 3",
+ "Keep Msgs": "Hoidke Msgs",
+ "heartrate": "südame löögisagedus",
+ "circle 1": "ring 1",
+ "Connected": "Ühendatud",
+ "steps": "sammud",
+ "battery warn": "aku hoiatus",
+ "show widgets": "Näita vidinaid",
+ "minimum": "minimaalne",
+ "Heartrate": "Südame löögisagedus",
+ "weather circle": "ilmastikuring",
+ "Loading": "Laadimine",
+ "Launcher Settings": "Käivitajate seaded",
+ "color": "värv",
+ "Font": "Font",
+ "colorize icon": "värvida ikooni",
+ "Steps": "Sammud",
+ "step length": "sammu pikkus",
+ "Auto snooze": "Automaatne snooze",
+ "TAP right top/bottom": "TAP paremal üleval/alla",
+ "maximum": "maksimaalne",
+ "distance goal": "kauguse eesmärk",
+ "valid period": "kehtivusaeg",
+ "min. confidence": "min. usaldus",
+ "data": "andmed",
+ "Circle": "Ring",
+ "goal": "eesmärk",
+ "Delete all messages": "Kustuta kõik sõnumid",
+ "Are you sure": "Oled sa kindel, et",
+ "App Source\nNot found": "Rakenduse allikas\nEi leitud",
+ "Show clocks": "Näita kellasid",
+ "View Message": "Vaata sõnumit",
+ "Vector font size": "Vektori kirjasuurus",
+ "Mark Unread": "Märgi lugemata",
+ "Delete All Messages": "Kustuta kõik sõnumid",
+ "No Messages": "Sõnumid puuduvad",
+ "Bluetooth": "Bluetooth",
+ "LCD": "LCD",
+ "Unread timer": "Lugemata taimer",
+ "Record Run": "Record Run",
+ "Music": "Muusika",
+ "Beep": "Helisema",
+ "Piezo": "Piezo",
+ "Apps": "Rakendused",
+ "Utils": "Utils",
+ "Vibration": "Vibratsioon",
+ "BLE": "BLE",
+ "Make Connectable": "Tee ühendatavaks",
+ "Programmable": "Programmeeritav",
+ "Light BW": "Kerge BW",
+ "Passkey BETA": "Passkey BETA",
+ "HID": "HID",
+ "Quiet Mode": "Vaikne režiim",
+ "Background": "Taustaks",
+ "Customize": "Kohandada",
+ "Dark BW": "Tume BW",
+ "LCD Timeout": "LCD Timeout",
+ "Background 2": "Taust 2",
+ "Highlight FG": "FG esiletõstmine",
+ "Add Device": "Seadme lisamine",
+ "Highlight BG": "Rõhutage BG",
+ "Remove": "Eemaldage",
+ "LCD Brightness": "LCD heledus",
+ "Foreground 2": "Teadmised 2",
+ "Time Zone": "Ajavöönd",
+ "Debug Info": "Debug-info",
+ "Twist Max Y": "Twist Max Y",
+ "Twist Timeout": "Twist Timeout",
+ "Foreground": "Esialgsed teadmised",
+ "Wake on BTN3": "Wake on BTN3",
+ "Connect device\nto add to\nwhitelist": "Seadme ühendamine\nlisada\nvalimisnimekirja",
+ "Wake on BTN2": "Wake on BTN2",
+ "Wake on Touch": "Wake on Touch",
+ "Wake on FaceUp": "FaceUp'i ärkamine",
+ "Compact Storage": "Kompaktne ladustamine",
+ "Wake on Twist": "Wake on Twist",
+ "Clock Style": "Kella stiil",
+ "Wake on BTN1": "Wake on BTN1",
+ "Utilities": "Kommunaalteenused",
+ "Twist Threshold": "Twist künnis",
+ "Log": "Logi",
+ "Reset Settings": "Seadete lähtestamine",
+ "Rewrite Settings": "Ümberkirjutamise seaded",
+ "Hour": "Tund",
+ "Stay Connectable": "Jääge ühendatavaks",
+ "Flatten Battery": "Aku tasandamine",
+ "This will remove everything": "See eemaldab kõik",
+ "Minute": "Hetk",
+ "App Settings": "Rakenduse seaded",
+ "No app has settings": "Ühelgi rakendusel ei ole seadeid",
+ "Invalid settings": "Väärad seaded",
+ "Date": "Kuupäev",
+ "Year": "Aasta",
+ "Side": "Side",
+ "Turn Off": "Lülita välja",
+ "Storage": "Ladustamine",
+ "Second": "Teine",
+ "Right": "Õigus",
+ "Left": "Vasakpoolne",
+ "Month": "Kuu",
+ "TIMER": "TIMER",
+ "Reset to Defaults": "Lähtestamine vaikimisi seadistustele",
+ "Compacting...\nTakes approx\n1 minute": "Tihendamine...\nKulub umbes\n1 minut",
+ "start&lap/reset, BTN1: EXIT": "start&lap/reset, BTN1: EXIT",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Aku tasandamine - see võib võtta tunde.\nTühistamiseks vajutage pikalt nuppu",
+ "ALARM": "ALARM",
+ "Reset All": "Reset All",
+ "Hours": "Tunnid",
+ "off": "välja",
+ "Widgets": "Vidinad",
+ "Reset all widgets": "Nullida kõik vidinad",
+ "on": "aadressil",
+ "Connectable": "Ühendatav",
+ "No Clocks Found": "Kellasid ei leitud",
+ "BTNs 1:startlap 2:exit 3:reset": "BTNid 1:startlap 2:exit 3:reset",
+ "Sort Order": "Sorteerimisjärjekord",
+ "Reset": "Reset",
+ "System": "Süsteem",
+ "Message": "Sõnum",
+ "Settings": "Seaded",
+ "Locale": "Locale",
+ "Alerts": "Hoiatused",
+ "Enabled": "Lubatud",
+ "Theme": "Teema",
+ "Minutes": "Protokoll",
+ "Delete": "Kustuta",
+ "Set Time": "Määratud aeg",
+ "Select Clock": "Valige kell",
+ "Hide": "Peida",
+ "Messages": "Sõnumid",
+ "Ok": "Ok",
+ "Show": "Näita",
+ "On": "Veebilehel",
+ "Factory Reset": "Tehase lähtestamine",
+ "Error in settings": "Viga seadetes",
+ "Disable": "Lülita välja",
+ "Repeat": "Kordus",
+ "Vibrate": "Vibreerima",
+ "Whitelist": "Valge nimekiri",
+ "No": "Ei",
+ "Yes": "Jah",
+ "Off": "Väljaspool",
+ "Back": "Tagasi"
+ },
+ "alarm": {
+ "//": "App-specific overrides"
+ }
+}
\ No newline at end of file
diff --git a/lang/fi_FI.json b/lang/fi_FI.json
index eb1d826d8..162e6a556 100644
--- a/lang/fi_FI.json
+++ b/lang/fi_FI.json
@@ -1,21 +1,173 @@
{
- "//":"Finnish language translations",
- "GLOBAL": {
- "//":"Translations that apply for all apps",
- "Alarms" : "Hälytykset",
- "Hours" : "Tunnit",
- "Minutes" : "Minuutit",
- "Enabled" : "Aktivoitu",
- "New Alarm" : "Uusi hälytys",
- "Save" : "Tallenna",
- "Back" : "Paluu",
- "Repeat" : "Toista",
- "Delete" : "Poista",
- "ALARM!" : "ALARM",
- "Sleep" : "Nukkuminen"
- },
- "alarm": {
- "//":"App-specific overrides",
- "rpt" : "toistaa"
- }
-}
+ "//": "Finnish language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "Alarms": "Hälytykset",
+ "Hours": "Tunnit",
+ "Minutes": "Minuutit",
+ "Enabled": "Aktivoitu",
+ "New Alarm": "Uusi hälytys",
+ "Save": "Tallenna",
+ "Back": "Paluu",
+ "Repeat": "Toista",
+ "Delete": "Poista",
+ "ALARM!": "ALARM",
+ "Sleep": "Nukkuminen",
+ "New Timer": "Uusi ajastin",
+ "(repeat)": "(toista)",
+ "music": "musiikki",
+ "circle count": "ympyröiden lukumäärä",
+ "Keep Msgs": "Pidä Msgs",
+ "Auto snooze": "Automaattinen torkku",
+ "battery warn": "akkuvaroitus",
+ "heartrate": "syke",
+ "circle 4": "ympyrä 4",
+ "circle 2": "ympyrä 2",
+ "min. confidence": "min. luottamus",
+ "show widgets": "näytä widgetit",
+ "step length": "askelpituus",
+ "weather circle": "sääpiiri",
+ "circle 1": "ympyrä 1",
+ "circle 3": "ympyrä 3",
+ "week": "viikko",
+ "minimum": "vähintään",
+ "colorize icon": "väritä kuvake",
+ "data": "tiedot",
+ "distance goal": "etäisyystavoite",
+ "Circle": "Circle",
+ "valid period": "voimassaoloaika",
+ "maximum": "maksimi",
+ "Heartrate": "Sydämen syke",
+ "Mark Unread": "Merkitse lukematon",
+ "Delete all messages": "Poista kaikki viestit",
+ "LCD": "LCD",
+ "Apps": "Sovellukset",
+ "TAP right top/bottom": "TAP oikealle ylhäältä/alhaalta",
+ "App Source\nNot found": "Sovelluksen lähde\nEi löydy",
+ "STEPS": "STEPS",
+ "Launcher Settings": "Laukaisimen asetukset",
+ "Show clocks": "Näytä kellot",
+ "Vector font size": "Vektorin fonttikoko",
+ "Font": "Fontti",
+ "Yes\ndefinitely": "Kyllä\nehdottomasti",
+ "Bluetooth": "Bluetooth",
+ "Record Run": "Ennätysjuoksu",
+ "View Message": "Näytä viesti",
+ "No Messages": "Ei viestejä",
+ "Unread timer": "Lukematon ajastin",
+ "Are you sure": "Oletko varma, että",
+ "Delete All Messages": "Poista kaikki viestit",
+ "Highlight FG": "Korosta FG",
+ "Foreground 2": "Tulosaineisto 2",
+ "Foreground": "Tulosaineisto",
+ "Make Connectable": "Tee liitettäväksi",
+ "Quiet Mode": "Hiljainen tila",
+ "BLE": "BLE",
+ "Dark BW": "Tumma BW",
+ "Background": "Tausta",
+ "Background 2": "Tausta 2",
+ "Utils": "Utils",
+ "Vibration": "Tärinä",
+ "Piezo": "Piezo",
+ "HID": "HID",
+ "Light BW": "Vaalea BW",
+ "Programmable": "Ohjelmoitava",
+ "Customize": "Mukauta",
+ "Passkey BETA": "Passkey BETA",
+ "BTNs 1:startlap 2:exit 3:reset": "BTN:t 1:käynnistys 2:poistuminen 3:nollaus",
+ "start&lap/reset, BTN1: EXIT": "start&lap/reset, BTN1: EXIT",
+ "Utilities": "Apuohjelmat",
+ "Time Zone": "Aikavyöhyke",
+ "Clock Style": "Kello tyyli",
+ "Compact Storage": "Kompakti varastointi",
+ "Log": "Tukki",
+ "Debug Info": "Vianmääritystiedot",
+ "Twist Max Y": "Twist Max Y",
+ "Twist Timeout": "Twist Timeout",
+ "Remove": "Poista",
+ "LCD Timeout": "LCD-aikakatkaisu",
+ "LCD Brightness": "LCD-kirkkaus",
+ "Wake on Touch": "Herätys kosketuksesta",
+ "Wake on BTN3": "Wake BTN3:lla",
+ "Wake on Twist": "Wake on Twist",
+ "Wake on BTN2": "Wake BTN2:lla",
+ "Wake on FaceUp": "Wake on FaceUp",
+ "Twist Threshold": "Twist-kynnysarvo",
+ "Add Device": "Lisää laite",
+ "Highlight BG": "Korosta BG",
+ "Wake on BTN1": "Wake BTN1:llä",
+ "Connect device\nto add to\nwhitelist": "Yhdistä laite\nlisätäksesi\nwhitelist",
+ "Reset to Defaults": "Nollaa oletusasetukset",
+ "No Clocks Found": "Kelloja ei löydy",
+ "Hour": "Tunti",
+ "Date": "Päivämäärä",
+ "Stay Connectable": "Pysy yhteyksissä",
+ "Minute": "Minuutti",
+ "Second": "Toinen",
+ "Connectable": "Liitettävissä",
+ "Turn Off": "Kytke pois päältä",
+ "This will remove everything": "Tämä poistaa kaiken",
+ "Reset Settings": "Nollaa asetukset",
+ "Right": "Oikea",
+ "Left": "Vasen",
+ "Side": "Sivu",
+ "Sort Order": "Lajittelujärjestys",
+ "Reset All": "Nollaa kaikki",
+ "Widgets": "Widgetit",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Akun tyhjentäminen - tämä voi kestää tunteja.\nPeruuta painamalla pitkään painiketta",
+ "Compacting...\nTakes approx\n1 minute": "Tiivistäminen...\nKestää noin\n1 minuutti",
+ "Storage": "Varastointi",
+ "Rewrite Settings": "Uudelleenkirjoitusasetukset",
+ "Flatten Battery": "Litistä akku",
+ "Invalid settings": "Virheelliset asetukset",
+ "OFF": "OFF",
+ "Sleep Phase Alarm": "Univaiheen hälytys",
+ "No app has settings": "Missään sovelluksessa ei ole asetuksia",
+ "App Settings": "Sovelluksen asetukset",
+ "Month": "Kuukausi",
+ "Reset": "Nollaa",
+ "Alarm": "Hälytys",
+ "Beep": "Beep",
+ "goal": "tavoite",
+ "on": "osoitteessa",
+ "Reset all widgets": "Nollaa kaikki widgetit",
+ "Select Clock": "Valitse Kello",
+ "Vibrate": "Värinä",
+ "Message": "Viesti",
+ "TIMER": "AJASTIN",
+ "Alerts": "Hälytykset",
+ "Locale": "Paikkakunta",
+ "Set Time": "Aseta aika",
+ "System": "Järjestelmä",
+ "Disable": "Poista käytöstä",
+ "Whitelist": "Whitelist",
+ "Error in settings": "Virhe asetuksissa",
+ "BACK": "TAKAISIN",
+ "Factory Reset": "Tehdasasetusten palautus",
+ "Timer": "Ajastin",
+ "Connected": "Yhdistetty",
+ "ALARM": "HÄLYTYS",
+ "Messages": "Viestit",
+ "Hide": "Piilota",
+ "Ok": "Ok",
+ "Show": "Näytä",
+ "On": "Osoitteessa",
+ "No": "Ei",
+ "Settings": "Asetukset",
+ "steps": "vaiheet",
+ "back": "takaisin",
+ "Steps": "Askeleet",
+ "Yes": "Kyllä",
+ "Year": "Vuosi",
+ "Loading": "Ladataan",
+ "Music": "Musiikki",
+ "color": "väri",
+ "off": "off",
+ "Off": "Off",
+ "Theme": "Teema"
+ },
+ "alarm": {
+ "//": "App-specific overrides",
+ "rpt": "toistaa"
+ }
+}
\ No newline at end of file
diff --git a/lang/fr_FR.json b/lang/fr_FR.json
index 209574424..ad0f03b0c 100644
--- a/lang/fr_FR.json
+++ b/lang/fr_FR.json
@@ -1,21 +1,173 @@
{
- "//":"French language translations",
- "GLOBAL": {
- "//":"Translations that apply for all apps",
- "Alarms" : "Réveils",
- "Hours" : "Heures",
- "Minutes" : "Minutes",
- "Enabled" : "Activé",
- "New Alarm" : "Nouveau Réveil",
- "Save" : "Sauvegarder",
- "Back" : "Retour",
- "Repeat" : "Répétition",
- "Delete" : "Supprimer",
- "ALARM!" : "ALARM!",
- "Sleep" : "Sommeil"
- },
- "alarm": {
- "//":"App-specific overrides",
- "rpt" : "rép."
- }
-}
+ "//": "French language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "Alarms": "Réveils",
+ "Hours": "Heures",
+ "Minutes": "Minutes",
+ "Enabled": "Activé",
+ "New Alarm": "Nouveau Réveil",
+ "Save": "Sauvegarder",
+ "Back": "Retour",
+ "Repeat": "Répétition",
+ "Delete": "Supprimer",
+ "ALARM!": "ALARM!",
+ "Sleep": "Sommeil",
+ "New Timer": "Nouveau Timer",
+ "Keep Msgs": "Garder les messages",
+ "(repeat)": "(répétition)",
+ "week": "semaine",
+ "Auto snooze": "Réveil automatique",
+ "music": "musique",
+ "circle 2": "cercle 2",
+ "circle 3": "cercle 3",
+ "circle count": "nombre de cercles",
+ "weather circle": "cercle météorologique",
+ "circle 4": "cercle 4",
+ "show widgets": "afficher les widgets",
+ "heartrate": "fréquence cardiaque",
+ "battery warn": "alerte batterie",
+ "circle 1": "cercle 1",
+ "maximum": "maximum",
+ "min. confidence": "confiance minimale",
+ "step length": "longueur des pas",
+ "minimum": "minimum",
+ "Circle": "Cercle",
+ "valid period": "période de validité",
+ "Heartrate": "Fréquence cardiaque",
+ "distance goal": "objectif de distance",
+ "Yes\ndefinitely": "Oui\ndéfinitivement",
+ "data": "données",
+ "colorize icon": "coloriser l'icône",
+ "TAP right top/bottom": "TAP droit haut/bas",
+ "App Source\nNot found": "Source de l'application\nNon trouvé",
+ "Font": "Police",
+ "STEPS": "ÉTAPES",
+ "Vector font size": "Taille de la police vectorielle",
+ "Show clocks": "Montrer les horloges",
+ "BTNs 1:startlap 2:exit 3:reset": "BTNs 1:startlap 2:exit 3:reset",
+ "No Messages": "Aucun message",
+ "View Message": "Afficher le message",
+ "Launcher Settings": "Paramètres du lanceur",
+ "start&lap/reset, BTN1: EXIT": "start&lap/reset, BTN1 : EXIT",
+ "Make Connectable": "Rendre connectable",
+ "Piezo": "Piezo",
+ "Programmable": "Programmable",
+ "HID": "HID",
+ "Mark Unread": "Marquer comme non lu",
+ "Are you sure": "Vous êtes sûr",
+ "Dark BW": "Dark BW",
+ "Delete all messages": "Supprimer tous les messages",
+ "Delete All Messages": "Supprimer tous les messages",
+ "Vibration": "Vibration",
+ "Quiet Mode": "Mode silencieux",
+ "Passkey BETA": "Passkey BETA",
+ "BLE": "BLE",
+ "Foreground 2": "Premier plan 2",
+ "Background": "Contexte",
+ "Record Run": "Record Run",
+ "Utils": "Utils",
+ "Bluetooth": "Bluetooth",
+ "Apps": "Apps",
+ "Customize": "Personnalisez",
+ "Background 2": "Contexte 2",
+ "Light BW": "Light BW",
+ "LCD": "LCD",
+ "Unread timer": "Minuterie non lue",
+ "Foreground": "Premier plan",
+ "Remove": "Retirer",
+ "Highlight FG": "Highlight FG",
+ "Add Device": "Ajouter un dispositif",
+ "Highlight BG": "Mettre en évidence BG",
+ "Wake on BTN1": "Réveil sur BTN1",
+ "Connect device\nto add to\nwhitelist": "Connecter le dispositif\nà ajouter à\nliste blanche",
+ "LCD Timeout": "Temporisation de l'écran LCD",
+ "LCD Brightness": "Luminosité de l'écran LCD",
+ "Wake on BTN2": "Wake sur BTN2",
+ "Wake on BTN3": "Wake sur BTN3",
+ "Wake on FaceUp": "Réveillez-vous sur FaceUp",
+ "Wake on Touch": "Réveil au toucher",
+ "Twist Threshold": "Seuil de torsion",
+ "Wake on Twist": "Réveil sur Twist",
+ "Reset to Defaults": "Réinitialisation des valeurs par défaut",
+ "Utilities": "Utilitaires",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Mise à plat de la batterie - cela peut prendre des heures.\nAppuyez longuement sur le bouton pour annuler",
+ "Flatten Battery": "Aplatir la batterie",
+ "Storage": "Stockage",
+ "Reset Settings": "Réinitialiser les paramètres",
+ "Log": "Journal de bord",
+ "Rewrite Settings": "Paramètres de réécriture",
+ "Compacting...\nTakes approx\n1 minute": "Compactage...\nPrend environ\n1 minute",
+ "Time Zone": "Fuseau horaire",
+ "Clock Style": "Style de l'horloge",
+ "Debug Info": "Informations de débogage",
+ "Twist Max Y": "Twist Max Y",
+ "Twist Timeout": "Twist Timeout",
+ "Compact Storage": "Stockage compact",
+ "App Settings": "Paramètres de l'application",
+ "No app has settings": "Aucune application n'a de paramètres",
+ "Sleep Phase Alarm": "Alarme de phase de sommeil",
+ "Month": "Mois",
+ "Turn Off": "Désactiver",
+ "This will remove everything": "Cela va supprimer tout",
+ "Date": "Date",
+ "Hour": "Heure",
+ "Right": "Droit",
+ "Left": "Gauche",
+ "No Clocks Found": "Aucune horloge trouvée",
+ "Sort Order": "Ordre de tri",
+ "OFF": "OFF",
+ "Side": "Côté",
+ "TIMER": "TIMER",
+ "Reset All": "Réinitialiser tout",
+ "Second": "Deuxièmement",
+ "Connectable": "Connectable",
+ "Minute": "Minute",
+ "Stay Connectable": "Restez connecté",
+ "Invalid settings": "Paramètres non valides",
+ "Widgets": "Widgets",
+ "Vibrate": "Vibrer",
+ "Reset all widgets": "Réinitialiser tous les widgets",
+ "Whitelist": "Liste blanche",
+ "Set Time": "Définir l'heure",
+ "System": "Système",
+ "Connected": "Connecté",
+ "Alerts": "Alertes",
+ "Locale": "Locale",
+ "Alarm": "Alarme",
+ "Reset": "Réinitialiser",
+ "on": "sur",
+ "Beep": "Bip",
+ "Factory Reset": "Réinitialisation d'usine",
+ "Select Clock": "Sélectionner l'horloge",
+ "Disable": "Désactiver",
+ "Message": "Message",
+ "goal": "objectif",
+ "Show": "Afficher",
+ "Hide": "Cacher",
+ "Messages": "Messages",
+ "BACK": "BACK",
+ "Error in settings": "Erreur dans les paramètres",
+ "Timer": "Minuterie",
+ "On": "Sur",
+ "No": "Non",
+ "Ok": "Ok",
+ "steps": "étapes",
+ "Settings": "Paramètres",
+ "ALARM": "ALARME",
+ "back": "dos",
+ "Yes": "Oui",
+ "Steps": "Étapes",
+ "Year": "Année",
+ "Loading": "Chargement",
+ "Music": "Musique",
+ "color": "couleur",
+ "Off": "Off",
+ "off": "off",
+ "Theme": "Thème"
+ },
+ "alarm": {
+ "//": "App-specific overrides",
+ "rpt": "rép."
+ }
+}
\ No newline at end of file
diff --git a/lang/hu_HU.json b/lang/hu_HU.json
index 8e5df6ed7..62d956a3c 100644
--- a/lang/hu_HU.json
+++ b/lang/hu_HU.json
@@ -1,21 +1,173 @@
{
- "//":"Spanish language translations",
- "GLOBAL": {
- "//":"Translations that apply for all apps",
- "Alarms" : "Riasztások",
- "Hours" : "Óra",
- "Minutes" : "Perc",
- "Enabled" : "Aktiválva",
- "New Alarm" : "Új riasztás",
- "Save" : "Mentés",
- "Back" : "Vissza",
- "Repeat" : "Ismétlés",
- "Delete" : "Törlés",
- "ALARM!" : "ALARM!",
- "Sleep" : "Alvás"
- },
- "alarm": {
- "//":"App-specific overrides",
- "rpt" : "ismétlés"
- }
-}
+ "//": "Spanish language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "Alarms": "Riasztások",
+ "Hours": "Óra",
+ "Minutes": "Perc",
+ "Enabled": "Aktiválva",
+ "New Alarm": "Új riasztás",
+ "Save": "Mentés",
+ "Back": "Vissza",
+ "Repeat": "Ismétlés",
+ "Delete": "Törlés",
+ "ALARM!": "ALARM!",
+ "Sleep": "Alvás",
+ "New Timer": "Új időzítő",
+ "Auto snooze": "Automatikus szundi",
+ "(repeat)": "(ismétlés)",
+ "Keep Msgs": "Msgs megtartása",
+ "music": "zene",
+ "week": "hét",
+ "min. confidence": "min. bizalom",
+ "minimum": "minimum",
+ "data": "adatok",
+ "Heartrate": "Szívritmus",
+ "battery warn": "akkumulátor figyelmeztetés",
+ "maximum": "maximum",
+ "show widgets": "widgetek megjelenítése",
+ "circle count": "körök száma",
+ "circle 1": "1. kör",
+ "circle 4": "4. kör",
+ "heartrate": "szívritmus",
+ "circle 3": "3. kör",
+ "circle 2": "2. kör",
+ "valid period": "érvényes időszak",
+ "step length": "lépéshossz",
+ "distance goal": "távolsági cél",
+ "Circle": "Kör",
+ "colorize icon": "ikon színezése",
+ "weather circle": "időjárási kör",
+ "TAP right top/bottom": "TAP jobbra fent/alul",
+ "Launcher Settings": "Indító beállításai",
+ "start&lap/reset, BTN1: EXIT": "start&lap/reset, BTN1: EXIT",
+ "Yes\ndefinitely": "Igen\nhatározottan",
+ "App Source\nNot found": "Alkalmazás forrása\nNem található",
+ "No Messages": "Nincs üzenet",
+ "Unread timer": "Olvasatlan időzítő",
+ "Record Run": "Rekord futás",
+ "Font": "Betűtípus",
+ "Vector font size": "Vektor betűméret",
+ "Show clocks": "Mutassa az órákat",
+ "Delete all messages": "Minden üzenet törlése",
+ "Are you sure": "Biztos vagy benne, hogy",
+ "Delete All Messages": "Minden üzenet törlése",
+ "STEPS": "LÉPÉSEK",
+ "Apps": "Alkalmazások",
+ "View Message": "Üzenet megtekintése",
+ "LCD": "LCD",
+ "Bluetooth": "Bluetooth",
+ "Piezo": "Piezo",
+ "Utils": "Utils",
+ "BTNs 1:startlap 2:exit 3:reset": "BTN-ek 1:startlap 2:exit 3:reset",
+ "Mark Unread": "Mark Unread",
+ "LCD Brightness": "LCD fényerő",
+ "Customize": "Testreszabás",
+ "Light BW": "Világos BW",
+ "Background": "Háttér",
+ "Highlight BG": "Kiemelés BG",
+ "Highlight FG": "FG kiemelése",
+ "Foreground": "Új információk és jogok",
+ "Foreground 2": "Előtérben 2",
+ "Background 2": "Háttér 2",
+ "Remove": "Távolítsa el a",
+ "Connect device\nto add to\nwhitelist": "Eszköz csatlakoztatása\nhozzáadni a\nfehérlistára",
+ "Add Device": "Eszköz hozzáadása",
+ "Dark BW": "Sötét BW",
+ "Passkey BETA": "Passkey BETA",
+ "HID": "HID",
+ "Wake on BTN3": "Wake a BTN3-on",
+ "Wake on BTN1": "Wake a BTN1-en",
+ "Wake on BTN2": "Wake a BTN2-n",
+ "BLE": "BLE",
+ "Vibration": "Rezgés",
+ "Make Connectable": "Csatlakoztathatóvá tenni",
+ "Programmable": "Programozható",
+ "Quiet Mode": "Csendes üzemmód",
+ "Twist Threshold": "Twist küszöbérték",
+ "Wake on FaceUp": "Ébredj a FaceUp-on",
+ "Twist Timeout": "Twist Timeout",
+ "Utilities": "Közművek",
+ "Twist Max Y": "Twist Max Y",
+ "Time Zone": "Időzóna",
+ "Log": "Napló",
+ "Clock Style": "Óra stílus",
+ "Compact Storage": "Kompakt tárolás",
+ "Storage": "Tárolás",
+ "Wake on Twist": "Wake on Twist",
+ "Debug Info": "Hibaelhárítási információ",
+ "Flatten Battery": "Lapos akkumulátor",
+ "Wake on Touch": "Ébresztés érintésre",
+ "LCD Timeout": "LCD Timeout",
+ "Rewrite Settings": "Újraírási beállítások",
+ "This will remove everything": "Ez mindent eltávolít",
+ "Turn Off": "Kikapcsolás",
+ "Stay Connectable": "Maradjon összekapcsolható",
+ "Reset to Defaults": "Alapértelmezettre visszaállítása",
+ "Reset Settings": "Beállítások visszaállítása",
+ "Compacting...\nTakes approx\n1 minute": "Tömörítés...\nKb.\n1 perc",
+ "No Clocks Found": "Nem találtak órákat",
+ "TIMER": "TIMER",
+ "Connectable": "Csatlakoztatható",
+ "Side": "Oldal",
+ "Reset all widgets": "Minden widget alaphelyzetbe állítása",
+ "Reset All": "Minden visszaállítása",
+ "Left": "Balra",
+ "Widgets": "Widgetek",
+ "Right": "Jobbra",
+ "Sort Order": "Rendezési sorrend",
+ "Date": "Dátum",
+ "Hour": "Óra",
+ "goal": "cél",
+ "Beep": "Beep",
+ "Reset": "Reset",
+ "on": "a oldalon",
+ "App Settings": "Alkalmazás beállításai",
+ "OFF": "OFF",
+ "No app has settings": "Egyetlen alkalmazás sem rendelkezik beállításokkal",
+ "Invalid settings": "Érvénytelen beállítások",
+ "Minute": "Perc",
+ "Sleep Phase Alarm": "Alvási fázis riasztás",
+ "Second": "Második",
+ "Month": "Hónap",
+ "Alarm": "Riasztás",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Az akkumulátor lapítása - ez órákig is eltarthat.\nHosszan nyomja meg a gombot a törléshez",
+ "Whitelist": "Fehér lista",
+ "Alerts": "Riasztások",
+ "Disable": "A letiltása",
+ "Set Time": "Beállított idő",
+ "Select Clock": "Óra kiválasztása",
+ "Message": "Üzenet",
+ "System": "Rendszer",
+ "Vibrate": "Rezgés",
+ "Locale": "Helyszín",
+ "Factory Reset": "Gyári visszaállítás",
+ "BACK": "VISSZA",
+ "ALARM": "ALARM",
+ "Timer": "Időzítő",
+ "Connected": "Csatlakoztatva",
+ "Error in settings": "Hiba a beállításokban",
+ "Messages": "Üzenetek",
+ "Ok": "Oké",
+ "No": "Nem",
+ "back": "vissza",
+ "steps": "lépések",
+ "Year": "Év",
+ "Steps": "Lépések",
+ "On": "A oldalon.",
+ "Settings": "Beállítások",
+ "Hide": "Rejtsd el",
+ "Show": "Mutasd meg a",
+ "Yes": "Igen",
+ "Loading": "Betöltés",
+ "Music": "Zene",
+ "color": "szín",
+ "off": "off",
+ "Off": "Off",
+ "Theme": "Téma"
+ },
+ "alarm": {
+ "//": "App-specific overrides",
+ "rpt": "ismétlés"
+ }
+}
\ No newline at end of file
diff --git a/lang/index.json b/lang/index.json
index 3d492783d..2a9ecfd42 100644
--- a/lang/index.json
+++ b/lang/index.json
@@ -9,5 +9,17 @@
{"code":"it_IT","name":"Italian","url":"it_IT.json"},
{"code":"nl_NL","name":"Dutch","url":"nl_NL.json"},
{"code":"sv_SE","name":"Swedish","url":"sv_SE.json"},
- {"code":"tr_TR","name":"Turkish","url":"tr_TR.json"}
+ {"code":"tr_TR","name":"Turkish","url":"tr_TR.json"},
+ {"code":"ru_RU","name":"Russian","url":"ru_RU.json", "disabled":"Characters not in ISO Latin codepage"},
+ {"code":"pt_PT","name":"Portuguese","url":"pt_PT.json"},
+ {"code":"bg_BG","name":"Bulgarian","url":"bg_BG.json", "disabled":"Characters not in ISO Latin codepage"},
+ {"code":"da_DA","name":"Danish","url":"da_DA.json"},
+ {"code":"el_EL","name":"Greek","url":"el_EL.json", "disabled":"Characters not in ISO Latin codepage"},
+ {"code":"et_ET","name":"Estonian","url":"et_ET.json"},
+ {"code":"lt_LT","name":"Lithuanian","url":"lt_LT.json"},
+ {"code":"lv_LV","name":"Latvian","url":"lv_LV.json"},
+ {"code":"pl_PL","name":"Polish","url":"pl_PL.json"},
+ {"code":"ro_RO","name":"Romanian","url":"ro_RO.json"},
+ {"code":"sk_SK","name":"Slovak","url":"sk_SK.json"},
+ {"code":"sl_SL","name":"Slovenian","url":"sl_SL.json"}
]
diff --git a/lang/it_IT.json b/lang/it_IT.json
index c64fc828a..07545e1e7 100644
--- a/lang/it_IT.json
+++ b/lang/it_IT.json
@@ -1,148 +1,186 @@
{
- "//1": "Italian language translations",
- "GLOBAL": {
- "//": "Translations that apply for all apps",
- "On": "On",
- "on": "on",
- "Off": "Off",
- "off": "off",
- "Ok": "Ok",
- "Yes": "Sì",
- "No": "No",
- "Alarm": "Sveglia",
- "ALARM": "SVEGLIA",
- "Alarms": "Sveglie",
- "Date": "Data",
- "Year": "Anno",
- "Month": "Mese",
- "Day": "Giorno",
- "Hour": "Ora",
- "Hours": "Ore",
- "Minute": "Minuto",
- "Minutes": "Minuti",
- "Second": "Secondo",
- "Seconds": "Secondi",
- "week": "settimana",
- "Week": "Settimana",
- "Enabled": "Attivo/a",
- "New Alarm": "Nuova sveglia",
- "Save": "Salva",
- "Cancel": "Annulla",
- "Back": "Indietro",
- "Repeat": "Ripeti",
- "Delete": "Cancella",
- "ALARM!": "SVEGLIA!",
- "Sleep": "Dormi",
- "Timer": "Timer",
- "TIMER": "TIMER",
- "New Timer": "Nuovo timer",
- "(repeat)": "(ripeti)",
- "Auto snooze": "Posticipa automaticamente",
- "Connected": "Connesso",
- "Delete all messages": "Cancella tutti i messaggi",
- "Delete All Messages": "Cancella tutti i messaggi",
- "Message": "Messaggio",
- "Messages": "Messaggi",
- "No Messages": "Nessun messaggio",
- "Keep Msgs": "Tieni i messaggi",
- "Mark Unread": "Segna come non letto",
- "Vibrate": "Vibrazione",
- "Are you sure": "Sei sicuro/a",
- "Music": "Musica",
- "Apps": "App",
- "App Settings": "Impostazioni app",
- "Bluetooth": "Bluetooth",
- "BLE": "BLE",
- "Make Connectable": "Rendi collegabile",
- "Programmable": "Programmabile",
- "Remove": "Rimuovi",
- "Utils": "Utilità",
- "LCD": "LCD",
- "LCD Brightness": "Luminosità LCD",
- "LCD Timeout": "Timeout LCD",
- "Wake on BTN1": "Risveglia con BTN1",
- "Wake on BTN2": "Risveglia con BTN2",
- "Wake on BTN3": "Risveglia con BTN3",
- "Wake on FaceUp": "Risveglia a faccia in su",
- "Wake on Touch": "Risveglia al tocco",
- "Wake on Twist": "Risveglia con polso",
- "Twist Timeout": "Timeout torsione",
- "Twist Max Y": "Torsione Y max",
- "Twist Threshold": "Soglia torsione",
- "Customize": "Personalizza",
- "Add Device": "Aggiungi dispositivo",
- "Left": "Sinistra",
- "Right": "Destra",
- "Widgets": "Widget",
- "Settings": "Impostazioni",
- "No app has settings": "Non ci sono app con delle impostazioni",
- "System": "Sistema",
- "Alerts": "Avvisi",
- "Theme": "Tema",
- "Foreground": "Primo piano",
- "Background": "Sfondo",
- "Foreground 2": "Primo piano 2",
- "Background 2": "Sfondo 2",
- "Highlight FG": "Selezione PP",
- "Highlight BG": "Selezione Sf",
- "Utilities": "Utilità",
- "Storage": "Memoria",
- "Compact Storage": "Compatta memoria",
- "Select Clock": "Seleziona orologio",
- "No Clocks Found": "Nessun orologio trovato",
- "Locale": "Localizzazione",
- "Set Time": "Imposta orario",
- "Time Zone": "Fuso orario",
- "Whitelist": "Whitelist",
- "Quiet Mode": "Modalità silenziosa",
- "Disable": "Disabilita",
- "Vibration": "Vibrazione",
- "Show": "Mostra",
- "Hide": "Nascondi",
- "Rewrite Settings": "Riscrivi impostazioni",
- "Reset Settings": "Reset impostazioni",
- "Factory Reset": "Ripristino condizioni iniziali",
- "Flatten Battery": "Scarica la batteria",
- "Turn Off": "Spegni",
- "This will remove everything": "Questo rimuoverà TUTTO",
- "Error in settings": "Errore nelle impostazioni",
- "Invalid settings": "Impostazioni non valide",
- "Loading": "Caricamento",
- "Launcher Settings": "Impostazioni Launcher",
- "Font": "Font",
- "Show clocks": "Mostra orologi",
- "Log": "Log",
- "Steps": "Passi",
- "steps": "passi"
- },
- "//2": "App-specific overrides",
- "launch": {
- "Vector font size": "Dim. font vett.",
- "App Source\nNot found": "Codice app\nnon trovato"
- },
- "messages": {
- "Unread timer": "Timer msg non letti"
- },
- "run": {
- "Record Run": "Registra corsa"
- },
- "setting": {
- "Clock Style": "Formato ora",
- "Compacting...\nTakes approx\n1 minute": "Compattamento in corso...\nCi vorrà circa un minuto",
- "//1": "The new line before 'operazione' improves the layout",
- "Flattening battery - this can take hours.\nLong-press button to cancel": "Scaricamento batteria in corso - l'\noperazione può richiedere ore. Tieni premuto il pulsante per annullare",
- "Reset to Defaults": "Ripristinare le impostazioni predefinite",
- "Connectable": "Collegamento",
- "Connect device\nto add to\nwhitelist": "Collega un\ndispositivo\nper metterlo\nin whitelist",
- "Stay Connectable": "Rimanere collegabile",
- "Light BW": "Chiaro",
- "Dark BW": "Scuro"
- },
- "wid_edit": {
- "Reset": "Ripristina",
- "Reset All": "Ripristina tutto",
- "Reset all widgets": "Ripristina tutti i widget",
- "Sort Order": "Ordinamento",
- "Side": "Lato"
- }
-}
+ "//1": "Italian language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "On": "On",
+ "on": "on",
+ "Off": "Off",
+ "off": "off",
+ "Ok": "Ok",
+ "Yes": "Sì",
+ "No": "No",
+ "Alarm": "Sveglia",
+ "ALARM": "SVEGLIA",
+ "Alarms": "Sveglie",
+ "Date": "Data",
+ "Year": "Anno",
+ "Month": "Mese",
+ "Day": "Giorno",
+ "Hour": "Ora",
+ "Hours": "Ore",
+ "Minute": "Minuto",
+ "Minutes": "Minuti",
+ "Second": "Secondo",
+ "Seconds": "Secondi",
+ "week": "settimana",
+ "Week": "Settimana",
+ "Enabled": "Attivo/a",
+ "New Alarm": "Nuova sveglia",
+ "Save": "Salva",
+ "Cancel": "Annulla",
+ "Back": "Indietro",
+ "Repeat": "Ripeti",
+ "Delete": "Cancella",
+ "ALARM!": "SVEGLIA!",
+ "Sleep": "Dormi",
+ "Timer": "Timer",
+ "TIMER": "TIMER",
+ "New Timer": "Nuovo timer",
+ "(repeat)": "(ripeti)",
+ "Auto snooze": "Posticipa automaticamente",
+ "Connected": "Connesso",
+ "Delete all messages": "Cancella tutti i messaggi",
+ "Delete All Messages": "Cancella tutti i messaggi",
+ "Message": "Messaggio",
+ "Messages": "Messaggi",
+ "No Messages": "Nessun messaggio",
+ "Keep Msgs": "Tieni i messaggi",
+ "Mark Unread": "Segna come non letto",
+ "Vibrate": "Vibrazione",
+ "Are you sure": "Sei sicuro/a",
+ "Music": "Musica",
+ "Apps": "App",
+ "App Settings": "Impostazioni app",
+ "Bluetooth": "Bluetooth",
+ "BLE": "BLE",
+ "Make Connectable": "Rendi collegabile",
+ "Programmable": "Programmabile",
+ "Remove": "Rimuovi",
+ "Utils": "Utilità",
+ "LCD": "LCD",
+ "LCD Brightness": "Luminosità LCD",
+ "LCD Timeout": "Timeout LCD",
+ "Wake on BTN1": "Risveglia con BTN1",
+ "Wake on BTN2": "Risveglia con BTN2",
+ "Wake on BTN3": "Risveglia con BTN3",
+ "Wake on FaceUp": "Risveglia a faccia in su",
+ "Wake on Touch": "Risveglia al tocco",
+ "Wake on Twist": "Risveglia con polso",
+ "Twist Timeout": "Timeout torsione",
+ "Twist Max Y": "Torsione Y max",
+ "Twist Threshold": "Soglia torsione",
+ "Customize": "Personalizza",
+ "Add Device": "Aggiungi dispositivo",
+ "Left": "Sinistra",
+ "Right": "Destra",
+ "Widgets": "Widget",
+ "Settings": "Impostazioni",
+ "No app has settings": "Non ci sono app con delle impostazioni",
+ "System": "Sistema",
+ "Alerts": "Avvisi",
+ "Theme": "Tema",
+ "Foreground": "Primo piano",
+ "Background": "Sfondo",
+ "Foreground 2": "Primo piano 2",
+ "Background 2": "Sfondo 2",
+ "Highlight FG": "Selezione PP",
+ "Highlight BG": "Selezione Sf",
+ "Utilities": "Utilità",
+ "Storage": "Memoria",
+ "Compact Storage": "Compatta memoria",
+ "Select Clock": "Seleziona orologio",
+ "No Clocks Found": "Nessun orologio trovato",
+ "Locale": "Localizzazione",
+ "Set Time": "Imposta orario",
+ "Time Zone": "Fuso orario",
+ "Whitelist": "Whitelist",
+ "Quiet Mode": "Modalità silenziosa",
+ "Disable": "Disabilita",
+ "Vibration": "Vibrazione",
+ "Show": "Mostra",
+ "Hide": "Nascondi",
+ "Rewrite Settings": "Riscrivi impostazioni",
+ "Reset Settings": "Reset impostazioni",
+ "Factory Reset": "Ripristino condizioni iniziali",
+ "Flatten Battery": "Scarica la batteria",
+ "Turn Off": "Spegni",
+ "This will remove everything": "Questo rimuoverà TUTTO",
+ "Error in settings": "Errore nelle impostazioni",
+ "Invalid settings": "Impostazioni non valide",
+ "Loading": "Caricamento",
+ "Launcher Settings": "Impostazioni Launcher",
+ "Font": "Font",
+ "Show clocks": "Mostra orologi",
+ "Log": "Log",
+ "Steps": "Passi",
+ "steps": "passi",
+ "music": "musica",
+ "circle 4": "cerchio 4",
+ "circle 3": "cerchio 3",
+ "circle 1": "cerchio 1",
+ "circle 2": "cerchio 2",
+ "circle count": "conteggio dei cerchi",
+ "minimum": "minimo",
+ "weather circle": "cerchio meteorologico",
+ "show widgets": "mostra i widget",
+ "heartrate": "frequenza cardiaca",
+ "battery warn": "avvertire la batteria",
+ "Heartrate": "Battito cardiaco",
+ "valid period": "periodo valido",
+ "distance goal": "obiettivo di distanza",
+ "min. confidence": "fiducia minima",
+ "maximum": "massimo",
+ "Circle": "Cerchio",
+ "data": "dati",
+ "step length": "lunghezza del passo",
+ "View Message": "Visualizza il messaggio",
+ "Yes\ndefinitely": "Sì\nsicuramente",
+ "Piezo": "Piezo",
+ "colorize icon": "colorare l'icona",
+ "STEPS": "PASSI",
+ "TAP right top/bottom": "TAP in alto/basso a destra",
+ "HID": "HID",
+ "BTNs 1:startlap 2:exit 3:reset": "BTNs 1:startlap 2:exit 3:reset",
+ "Passkey BETA": "Passkey BETA",
+ "goal": "obiettivo",
+ "Beep": "Bip",
+ "Debug Info": "Informazioni di debug",
+ "OFF": "OFF",
+ "Reset": "Reset",
+ "Sleep Phase Alarm": "Allarme della fase di sonno",
+ "start&lap/reset, BTN1: EXIT": "start&lap/reset, BTN1: EXIT",
+ "back": "indietro",
+ "color": "colore",
+ "BACK": "INDIETRO"
+ },
+ "//2": "App-specific overrides",
+ "launch": {
+ "Vector font size": "Dim. font vett.",
+ "App Source\nNot found": "Codice app\nnon trovato"
+ },
+ "messages": {
+ "Unread timer": "Timer msg non letti"
+ },
+ "run": {
+ "Record Run": "Registra corsa"
+ },
+ "setting": {
+ "Clock Style": "Formato ora",
+ "Compacting...\nTakes approx\n1 minute": "Compattamento in corso...\nCi vorrà circa un minuto",
+ "//1": "The new line before 'operazione' improves the layout",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Scaricamento batteria in corso - l'\noperazione può richiedere ore. Tieni premuto il pulsante per annullare",
+ "Reset to Defaults": "Ripristinare le impostazioni predefinite",
+ "Connectable": "Collegamento",
+ "Connect device\nto add to\nwhitelist": "Collega un\ndispositivo\nper metterlo\nin whitelist",
+ "Stay Connectable": "Rimanere collegabile",
+ "Light BW": "Chiaro",
+ "Dark BW": "Scuro"
+ },
+ "wid_edit": {
+ "Reset": "Ripristina",
+ "Reset All": "Ripristina tutto",
+ "Reset all widgets": "Ripristina tutti i widget",
+ "Sort Order": "Ordinamento",
+ "Side": "Lato"
+ }
+}
\ No newline at end of file
diff --git a/lang/lt_LT.json b/lang/lt_LT.json
new file mode 100644
index 000000000..2ea7dca90
--- /dev/null
+++ b/lang/lt_LT.json
@@ -0,0 +1,163 @@
+{
+ "//": "Lithuanian language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "New Alarm": "Naujas žadintuvas",
+ "(repeat)": "(pakartoti)",
+ "Alarm": "Signalizacija",
+ "Save": "Išsaugoti",
+ "New Timer": "Naujas laikmatis",
+ "Sleep": "Miegas",
+ "circle count": "ratų skaičius",
+ "Timer": "Laikmatis",
+ "week": "savaitė",
+ "Connected": "Prijungta",
+ "circle 2": "2 ratas",
+ "Auto snooze": "Automatinis snaudimas",
+ "circle 1": "1 ratas",
+ "show widgets": "rodyti valdiklius",
+ "Keep Msgs": "Laikyti Msgs",
+ "weather circle": "orų ratas",
+ "step length": "žingsnio ilgis",
+ "steps": "žingsniai",
+ "circle 3": "3 ratas",
+ "battery warn": "įspėjimas apie akumuliatorių",
+ "min. confidence": "min. pasitikėjimas",
+ "maximum": "didžiausias",
+ "valid period": "galiojantis laikotarpis",
+ "minimum": "minimalus",
+ "heartrate": "širdies ritmas",
+ "circle 4": "4 ratas",
+ "goal": "tikslas",
+ "data": "duomenys",
+ "distance goal": "atstumo tikslas",
+ "Steps": "Žingsniai",
+ "Heartrate": "Širdies ritmas",
+ "Show clocks": "Rodyti laikrodžius",
+ "View Message": "Peržiūrėti žinutę",
+ "color": "",
+ "colorize icon": "nuspalvinti piktogramą",
+ "Circle": "Apskritimas",
+ "Delete all messages": "Ištrinti visus pranešimus",
+ "Font": "Šriftas",
+ "TAP right top/bottom": "TAP dešinėje viršuje / apačioje",
+ "No Messages": "Jokių pranešimų",
+ "Launcher Settings": "Paleidimo programos nustatymai",
+ "App Source\nNot found": "Programėlės šaltinis\nNerastas",
+ "Loading": "Pakrovimas",
+ "Vector font size": "Vektorinio šrifto dydis",
+ "Music": "Muzika",
+ "Are you sure": "Ar tikrai",
+ "Delete All Messages": "Ištrinti visus pranešimus",
+ "Mark Unread": "Pažymėti Neskaityta",
+ "LCD": "LCD",
+ "Apps": "Programėlės",
+ "Record Run": "Rekordinis paleidimas",
+ "start&lap/reset, BTN1: EXIT": "start&lap/reset, BTN1: EXIT",
+ "Unread timer": "Neperskaitytas laikmatis",
+ "Bluetooth": "\"Bluetooth\"",
+ "BTNs 1:startlap 2:exit 3:reset": "BTNs 1:startlap 2:exit 3:reset",
+ "Dark BW": "Tamsus BW",
+ "Programmable": "Programuojamas",
+ "Make Connectable": "Sukurkite \"Connectable",
+ "BLE": "BLE",
+ "Passkey BETA": "Passkey BETA",
+ "HID": "HID",
+ "Utils": "Paslaugos",
+ "Quiet Mode": "Tylusis režimas",
+ "Beep": "Pyptelėjimas",
+ "Piezo": "Piezo",
+ "Vibration": "Vibracija",
+ "Background": "Pagrindinė informacija",
+ "Customize": "Tinkinti",
+ "Foreground": "Naujos žinios",
+ "Light BW": "Šviesus BW",
+ "Add Device": "Pridėti įrenginį",
+ "Remove": "Pašalinti",
+ "Wake on BTN1": "Pabusti dėl BTN1",
+ "Wake on BTN3": "Pabusti dėl BTN3",
+ "Highlight FG": "Pabrėžti FG",
+ "Highlight BG": "Išryškinti BG",
+ "Twist Max Y": "Twist Max Y",
+ "Foreground 2": "Pirmas planas 2",
+ "Background 2": "Pagrindinė informacija 2",
+ "Clock Style": "Laikrodžio stilius",
+ "Log": "Žurnalas",
+ "Debug Info": "Derinimo informacija",
+ "Time Zone": "Laiko juosta",
+ "Wake on Touch": "Pabudimas palietus",
+ "Twist Threshold": "Sukimo slenkstis",
+ "Wake on FaceUp": "Atsibusti \"FaceUp",
+ "Wake on BTN2": "Pabusti dėl BTN2",
+ "Wake on Twist": "Pabusti dėl Twist",
+ "LCD Brightness": "LCD ekrano ryškumas",
+ "Twist Timeout": "Twist Timeout",
+ "Compact Storage": "Kompaktiškas saugojimas",
+ "Storage": "Saugykla",
+ "Utilities": "Komunalinės paslaugos",
+ "Compacting...\nTakes approx\n1 minute": "Suspaudžiant...\nUžtrunka maždaug\n1 minutė",
+ "No Clocks Found": "Laikrodžių nerasta",
+ "Reset Settings": "Nustatymų atstatymas",
+ "Flatten Battery": "Išlyginti akumuliatorių",
+ "Connect device\nto add to\nwhitelist": "Prijungti įrenginį\npridėti prie\nbaltąjį sąrašą",
+ "LCD Timeout": "LCD ekrano laiko limitas",
+ "Hour": "Valanda",
+ "Second": "Antrasis",
+ "Date": "Data",
+ "Turn Off": "Išjungti",
+ "This will remove everything": "Tai pašalins viską.",
+ "Connectable": "Prijungiama",
+ "Stay Connectable": "Palaikykite ryšį",
+ "Left": "Kairėje pusėje",
+ "Right": "Dešinė",
+ "Side": "Šoninė pusė",
+ "Invalid settings": "Netinkami nustatymai",
+ "Month": "Mėnuo",
+ "Year": "Metai",
+ "App Settings": "Programėlės nustatymai",
+ "Sort Order": "Rūšiavimo tvarka",
+ "Minute": "Minutė",
+ "No app has settings": "Jokia programa neturi nustatymų",
+ "Rewrite Settings": "Perrašymo nustatymai",
+ "Reset All": "Iš naujo nustatyti viską",
+ "Reset": "Iš naujo nustatyti",
+ "Reset to Defaults": "Iš naujo nustatyti numatytąsias reikšmes",
+ "Hours": "Valandos",
+ "ALARM": "ALARMAS",
+ "TIMER": "LAIKMATIS",
+ "Widgets": "Valdikliai",
+ "Reset all widgets": "Iš naujo nustatyti visus valdiklius",
+ "Minutes": "Protokolas",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Akumuliatoriaus išlyginimas - tai gali užtrukti kelias valandas.\nIlgai paspauskite mygtuką, kad atšauktumėte",
+ "on": "svetainėje",
+ "off": "iš",
+ "Message": "Žinutė",
+ "Repeat": "Pakartokite",
+ "Delete": "Ištrinti",
+ "Enabled": "Įjungta",
+ "System": "Sistema",
+ "Theme": "Tema",
+ "Vibrate": "Vibruoti",
+ "Settings": "Nustatymai",
+ "Alerts": "Įspėjimai",
+ "Error in settings": "Klaida nustatymuose",
+ "Messages": "Žinutės",
+ "Set Time": "Nustatytas laikas",
+ "Locale": "Vietovė",
+ "Select Clock": "Pasirinkite laikrodį",
+ "Whitelist": "Baltasis sąrašas",
+ "Disable": "Išjungti",
+ "Factory Reset": "Gamyklinis atstatymas",
+ "Show": "Rodyti",
+ "Hide": "Paslėpti",
+ "Yes": "Taip",
+ "Ok": "Gerai",
+ "No": "Ne",
+ "On": "Svetainėje",
+ "Off": "Išjungta",
+ "Back": "Atgal"
+ },
+ "alarm": {
+ "//": "App-specific overrides"
+ }
+}
\ No newline at end of file
diff --git a/lang/lv_LV.json b/lang/lv_LV.json
new file mode 100644
index 000000000..41525891f
--- /dev/null
+++ b/lang/lv_LV.json
@@ -0,0 +1,163 @@
+{
+ "//": "Latvian language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "Save": "Saglabāt",
+ "Auto snooze": "Automātiskā snaudiena atlikšana",
+ "circle 1": "1 aplis",
+ "New Timer": "Jauns taimeris",
+ "New Alarm": "Jauns modinātājs",
+ "Sleep": "Miega režīms",
+ "circle count": "apļu skaits",
+ "Keep Msgs": "Glabāt Msgs",
+ "Timer": "Taimeris",
+ "week": "nedēļa",
+ "Connected": "Savienots",
+ "(repeat)": "(atkārtot)",
+ "circle 3": "aplis 3",
+ "circle 4": "4 aplis",
+ "Alarm": "Trauksmes signāls",
+ "steps": "soļi",
+ "heartrate": "sirdsdarbības ātrums",
+ "weather circle": "laikapstākļu aplis",
+ "circle 2": "2. aplis",
+ "minimum": "minimālais",
+ "battery warn": "brīdinājums par akumulatoru",
+ "min. confidence": "min. uzticēšanās",
+ "show widgets": "parādīt logrīkus",
+ "step length": "soļa garums",
+ "goal": "mērķis",
+ "distance goal": "attāluma mērķis",
+ "valid period": "derīguma termiņš",
+ "Circle": "Aplis",
+ "data": "dati",
+ "Steps": "Soļi",
+ "color": "krāsa",
+ "colorize icon": "iekrāsot ikonu",
+ "maximum": "maksimālais",
+ "Heartrate": "Sirdsdarbība",
+ "View Message": "Skatīt ziņojumu",
+ "start&lap/reset, BTN1: EXIT": "start&lap/reset, BTN1: EXIT",
+ "TAP right top/bottom": "TAP pa labi augšā/apakšā",
+ "Mark Unread": "Atzīmēt Neizlasīts",
+ "Delete all messages": "Dzēst visus ziņojumus",
+ "Vector font size": "Vektora fonta lielums",
+ "Loading": "Iekraušana",
+ "Show clocks": "Rādīt pulksteņus",
+ "Font": "Fonts",
+ "App Source\nNot found": "Lietotņu avots\nNav atrasts",
+ "Launcher Settings": "Palaidēja iestatījumi",
+ "Delete All Messages": "Dzēst visus ziņojumus",
+ "BTNs 1:startlap 2:exit 3:reset": "BTNs 1:startlap 2:izeja 3:resetēšana",
+ "Bluetooth": "Bluetooth",
+ "Are you sure": "Vai esat pārliecināts, ka",
+ "Utils": "Utils",
+ "Unread timer": "Neizlasīts taimeris",
+ "LCD": "LCD",
+ "Music": "Mūzika",
+ "No Messages": "Nav ziņojumu",
+ "Record Run": "Rekorda skrējiens",
+ "HID": "HID",
+ "Quiet Mode": "Klusais režīms",
+ "Highlight FG": "Izcelt FG",
+ "Programmable": "Programmējams",
+ "Passkey BETA": "Passkey BETA",
+ "Light BW": "Gaismas BW",
+ "Piezo": "Piezo",
+ "Make Connectable": "Padarīt savienojamu",
+ "Beep": "Pīkstiens",
+ "Dark BW": "Tumšs BW",
+ "Background": "Pamatinformācija",
+ "Vibration": "Vibrācija",
+ "Apps": "Aplikācijas",
+ "Foreground 2": "Priekšplāns 2",
+ "Background 2": "Pamatinformācija 2",
+ "Foreground": "Priekšplāns",
+ "Customize": "Pielāgojiet",
+ "Highlight BG": "Izcelt BG",
+ "BLE": "BLE",
+ "LCD Timeout": "LCD displeja laika ierobežojums",
+ "Twist Max Y": "Twist Max Y",
+ "Add Device": "Pievienot ierīci",
+ "Connect device\nto add to\nwhitelist": "Savienot ierīci\nlai pievienotu\nbalto sarakstu",
+ "Wake on Touch": "Pamosties pēc pieskāriena",
+ "Time Zone": "Laika josla",
+ "Wake on BTN3": "Wake par BTN3",
+ "Wake on BTN1": "Pamosties par BTN1",
+ "Wake on BTN2": "Wake par BTN2",
+ "LCD Brightness": "LCD ekrāna spilgtums",
+ "Remove": "Noņemt",
+ "Clock Style": "Pulksteņa stils",
+ "Debug Info": "Dzesēšanas informācija",
+ "Twist Timeout": "Twist laika ierobežojums",
+ "Wake on FaceUp": "Pamosties FaceUp",
+ "Twist Threshold": "Pagrieziena slieksnis",
+ "This will remove everything": "Tādējādi tiks noņemts viss",
+ "Utilities": "Komunālie pakalpojumi",
+ "Connectable": "Savienojams",
+ "Minute": "Minūtes",
+ "Stay Connectable": "Palieciet savienojami",
+ "Storage": "Uzglabāšana",
+ "Log": "Log",
+ "Wake on Twist": "Wake on Twist",
+ "Flatten Battery": "Izlīdzināt akumulatoru",
+ "Rewrite Settings": "Pārrakstīšanas iestatījumi",
+ "Compact Storage": "Kompakta uzglabāšana",
+ "Compacting...\nTakes approx\n1 minute": "Blīvēšanas...\nAizņem aptuveni\n1 minūte",
+ "Second": "Otrais",
+ "Reset Settings": "Iestatījumu atiestatīšana",
+ "Turn Off": "Izslēgt",
+ "Date": "Datums",
+ "Right": "Tiesības",
+ "Sort Order": "Kārtot pēc kārtas",
+ "No Clocks Found": "Nav atrasti pulksteņi",
+ "Reset to Defaults": "Atiestatīt noklusējuma iestatījumus",
+ "No app has settings": "Nevienā lietotnē nav iestatījumu",
+ "ALARM": "ALARM",
+ "Widgets": "Logrīki",
+ "off": "izslēgts",
+ "Invalid settings": "Nederīgi iestatījumi",
+ "Month": "Mēnesis",
+ "Side": "Sānu",
+ "Reset": "Atiestatīt",
+ "Reset All": "Atiestatīt visu",
+ "Hours": "Stundas",
+ "Repeat": "Atkārtojiet",
+ "Enabled": "Ieslēgts",
+ "Settings": "Iestatījumi",
+ "Message": "Ziņa",
+ "Minutes": "Protokols",
+ "App Settings": "Lietotņu iestatījumi",
+ "System": "Sistēma",
+ "Locale": "Vietne",
+ "Theme": "Tēma",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Akumulatora saplacināšana - tas var aizņemt vairākas stundas.\nIlgi nospiediet pogu, lai atceltu",
+ "Select Clock": "Izvēlieties pulksteni",
+ "Set Time": "Iestatītais laiks",
+ "Vibrate": "Vibrēt",
+ "Reset all widgets": "Visu logrīku atiestatīšana",
+ "Hour": "Stunda",
+ "Left": "Kreisā",
+ "TIMER": "TIMER",
+ "Year": "Gads",
+ "on": "vietnē",
+ "Alerts": "Brīdinājumi",
+ "Delete": "Dzēst",
+ "Whitelist": "Baltais saraksts",
+ "Messages": "Ziņojumi",
+ "Disable": "Atslēgt",
+ "Hide": "Paslēpt",
+ "Show": "Rādīt",
+ "On": "Uz",
+ "Factory Reset": "Rūpnīcas atiestatīšana",
+ "Error in settings": "Kļūda iestatījumos",
+ "Ok": "Labi",
+ "Yes": "Jā",
+ "No": "Nē",
+ "Back": "Atpakaļ",
+ "Off": "Izslēgts"
+ },
+ "alarm": {
+ "//": "App-specific overrides"
+ }
+}
\ No newline at end of file
diff --git a/lang/nl_NL.json b/lang/nl_NL.json
index a04e46928..0a39fefb2 100644
--- a/lang/nl_NL.json
+++ b/lang/nl_NL.json
@@ -1,21 +1,173 @@
{
- "//":"Dutch language translations",
- "GLOBAL": {
- "//":"Translations that apply for all apps",
- "Alarms" : "Alarmen",
- "Hours" : "Uren",
- "Minutes" : "Minuten",
- "Enabled" : "Geactiveerd",
- "New Alarm" : "Nieuw alarm",
- "Save" : "Opslaan",
- "Back" : "Terug",
- "Repeat" : "Herhalen",
- "Delete" : "Verwijderen",
- "ALARM!" : "ALARV.",
- "Sleep" : "Stand-by"
- },
- "alarm": {
- "//":"App-specific overrides",
- "rpt" : "herhalen"
- }
-}
+ "//": "Dutch language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "Alarms": "Alarmen",
+ "Hours": "Uren",
+ "Minutes": "Minuten",
+ "Enabled": "Geactiveerd",
+ "New Alarm": "Nieuw alarm",
+ "Save": "Opslaan",
+ "Back": "Terug",
+ "Repeat": "Herhalen",
+ "Delete": "Verwijderen",
+ "ALARM!": "ALARV.",
+ "Sleep": "Stand-by",
+ "New Timer": "Nieuwe Timer",
+ "(repeat)": "(herhaling)",
+ "music": "muziek",
+ "week": "week",
+ "Auto snooze": "Auto snooze",
+ "Keep Msgs": "Houd Msgs",
+ "circle count": "cirkeltelling",
+ "Heartrate": "Hartslag",
+ "weather circle": "weercirkel",
+ "circle 1": "cirkel 1",
+ "show widgets": "widgets tonen",
+ "circle 4": "cirkel 4",
+ "maximum": "maximum",
+ "circle 3": "cirkel 3",
+ "circle 2": "cirkel 2",
+ "minimum": "minimum",
+ "valid period": "geldige periode",
+ "heartrate": "hartslag",
+ "battery warn": "batterijwaarschuwing",
+ "data": "gegevens",
+ "step length": "staplengte",
+ "min. confidence": "min. vertrouwen",
+ "colorize icon": "pictogram inkleuren",
+ "distance goal": "afstandsdoel",
+ "Circle": "Cirkel",
+ "TAP right top/bottom": "TAP rechts boven/onder",
+ "start&lap/reset, BTN1: EXIT": "start&lap/reset, BTN1: EXIT",
+ "Are you sure": "Weet je het zeker?",
+ "Font": "Lettertype",
+ "App Source\nNot found": "App Bron\nNiet gevonden",
+ "Launcher Settings": "Launcher Instellingen",
+ "Yes\ndefinitely": "Ja\nzeker",
+ "STEPS": "STAPPEN",
+ "Show clocks": "Toon klokken",
+ "Record Run": "Record run",
+ "No Messages": "Geen berichten.",
+ "View Message": "Bekijk bericht",
+ "Piezo": "Piëzo",
+ "BTNs 1:startlap 2:exit 3:reset": "BTN's 1:startlap 2:exit 3:reset",
+ "Vector font size": "Vector lettergrootte",
+ "Mark Unread": "Markeer ongelezen",
+ "Delete all messages": "Alle berichten verwijderen",
+ "LCD": "LCD",
+ "Utils": "Utils",
+ "Bluetooth": "Bluetooth",
+ "Delete All Messages": "Alle berichten verwijderen",
+ "Unread timer": "Ongelezen timer",
+ "Make Connectable": "Maak Verbindbaar",
+ "Quiet Mode": "Rustige modus",
+ "BLE": "BLE",
+ "Dark BW": "Donker BW",
+ "Apps": "Apps",
+ "Programmable": "Programmeerbaar",
+ "Vibration": "Trilling",
+ "HID": "HID",
+ "Foreground 2": "Voorgrond 2",
+ "Passkey BETA": "Passkey BETA",
+ "Background": "Achtergrond",
+ "Light BW": "Licht BW",
+ "Customize": "Aanpassen",
+ "Background 2": "Achtergrond 2",
+ "Highlight FG": "Markeer FG",
+ "Highlight BG": "Markeer BG",
+ "Foreground": "Voorgrond",
+ "LCD Timeout": "LCD Timeout",
+ "LCD Brightness": "LCD-helderheid",
+ "Remove": "Verwijder",
+ "Add Device": "Apparaat toevoegen",
+ "Connect device\nto add to\nwhitelist": "Apparaat aansluiten\ntoe te voegen aan\nwhitelist",
+ "Wake on Twist": "Wake on Twist",
+ "Wake on BTN2": "Wake op BTN2",
+ "Wake on BTN1": "Wake op BTN1",
+ "Wake on FaceUp": "Wakker worden op FaceUp",
+ "Log": "Log",
+ "Debug Info": "Debug info",
+ "Wake on BTN3": "Wake op BTN3",
+ "Flatten Battery": "Batterij plat maken",
+ "Rewrite Settings": "Instellingen herschrijven",
+ "Compact Storage": "Compacte opslag",
+ "Utilities": "Nutsbedrijven",
+ "Clock Style": "Klok Stijl",
+ "Time Zone": "Tijdzone",
+ "Twist Timeout": "Time-out draaien",
+ "Twist Max Y": "Twist Max Y",
+ "Twist Threshold": "Twist Drempel",
+ "Wake on Touch": "Wakker worden bij aanraking",
+ "Compacting...\nTakes approx\n1 minute": "Verdichten...\nDuurt ongeveer\n1 minuut",
+ "Reset to Defaults": "Terugzetten op standaardwaarden",
+ "No Clocks Found": "Geen klokken gevonden",
+ "Month": "Maand",
+ "Minute": "Minuutje",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Batterij leegmaken - dit kan uren duren.\nDruk lang op de knop om te annuleren",
+ "Sleep Phase Alarm": "Slaapfase alarm",
+ "Second": "Tweede",
+ "Turn Off": "Zet uit.",
+ "Hour": "Uur",
+ "Storage": "Opslag",
+ "Date": "Datum",
+ "Reset Settings": "Reset Instellingen",
+ "This will remove everything": "Dit zal alles verwijderen",
+ "Connectable": "Aansluitbaar",
+ "App Settings": "App-instellingen",
+ "No app has settings": "Geen app heeft instellingen",
+ "Stay Connectable": "Blijf verbonden",
+ "on": "op",
+ "Sort Order": "Sorteer volgorde",
+ "Widgets": "Widgets",
+ "Invalid settings": "Ongeldige instellingen",
+ "Reset All": "Alles resetten",
+ "Reset all widgets": "Reset alle widgets",
+ "OFF": "UIT",
+ "Left": "Links",
+ "Right": "Rechts",
+ "Side": "Zijde",
+ "TIMER": "TIMER",
+ "Alarm": "Alarm",
+ "goal": "doel",
+ "Reset": "Reset",
+ "Beep": "Beep",
+ "System": "Systeem",
+ "Locale": "Locale",
+ "Vibrate": "Trillen",
+ "Message": "Bericht",
+ "Alerts": "Waarschuwingen",
+ "Select Clock": "Selecteer Klok",
+ "Timer": "Timer",
+ "ALARM": "ALARM",
+ "Factory Reset": "Fabrieks reset",
+ "Hide": "Verberg",
+ "Messages": "Berichten",
+ "Error in settings": "Fout in instellingen",
+ "BACK": "ACHTER",
+ "Whitelist": "Whitelist",
+ "Set Time": "Tijd instellen",
+ "Disable": "Uitschakelen",
+ "Connected": "Aangesloten",
+ "On": "Op",
+ "Show": "Toon",
+ "Ok": "Ok",
+ "No": "Geen",
+ "Settings": "Instellingen",
+ "Steps": "Stappen",
+ "steps": "stappen",
+ "back": "terug",
+ "Year": "Jaar",
+ "Yes": "Ja",
+ "Loading": "Laden",
+ "Music": "Muziek",
+ "color": "kleur",
+ "off": "van",
+ "Off": "Uit",
+ "Theme": "Thema"
+ },
+ "alarm": {
+ "//": "App-specific overrides",
+ "rpt": "herhalen"
+ }
+}
\ No newline at end of file
diff --git a/lang/pl_PL.json b/lang/pl_PL.json
new file mode 100644
index 000000000..b83d72600
--- /dev/null
+++ b/lang/pl_PL.json
@@ -0,0 +1,163 @@
+{
+ "//": "Polish language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "New Alarm": "Nowy Alarm",
+ "(repeat)": "(powtórzenie)",
+ "Connected": "Podłączony",
+ "Timer": "Timer",
+ "Alarm": "Alarm",
+ "New Timer": "Nowy zegar",
+ "Sleep": "Sen",
+ "Save": "Zapisz",
+ "circle 1": "krąg 1",
+ "circle 3": "krąg 3",
+ "circle count": "liczenie okręgów",
+ "week": "tydzień",
+ "circle 2": "krąg 2",
+ "Keep Msgs": "Keep Msgs",
+ "weather circle": "koło klimatyczne",
+ "circle 4": "krąg 4",
+ "heartrate": "częstość akcji serca",
+ "Heartrate": "Heartrate",
+ "maximum": "maksimum",
+ "min. confidence": "min. pewność siebie",
+ "valid period": "okres ważności",
+ "distance goal": "cel odległościowy",
+ "Circle": "Koło",
+ "step length": "długość kroku",
+ "Steps": "Kroki",
+ "show widgets": "wyświetlać widżety",
+ "steps": "kroki",
+ "battery warn": "ostrzeżenie o akumulatorze",
+ "minimum": "minimum",
+ "data": "dane",
+ "color": "kolor",
+ "goal": "bramka",
+ "Auto snooze": "Automatyczna drzemka",
+ "TAP right top/bottom": "TAP prawy górny/dolny",
+ "Font": "Czcionka",
+ "Launcher Settings": "Ustawienia programu uruchamiającego",
+ "Mark Unread": "Zaznacz nieprzeczytane",
+ "Loading": "Ładowanie",
+ "Vector font size": "Rozmiar czcionki wektorowej",
+ "Show clocks": "Pokaż zegary",
+ "App Source\nNot found": "Źródło aplikacji\nNie znaleziono",
+ "colorize icon": "ubarwiać ikonę",
+ "Delete all messages": "Usuń wszystkie wiadomości",
+ "No Messages": "Brak komunikatów",
+ "Delete All Messages": "Usuń wszystkie wiadomości",
+ "Are you sure": "Czy jesteś pewien, że",
+ "View Message": "Wyświetl wiadomość",
+ "Music": "Muzyka",
+ "Record Run": "Rekordowy bieg",
+ "Bluetooth": "Bluetooth",
+ "Unread timer": "Nieprzeczytany zegar",
+ "Quiet Mode": "Tryb cichy",
+ "Make Connectable": "Spraw, aby można było się połączyć",
+ "Utils": "Narzędzia",
+ "Beep": "Beep",
+ "Apps": "Aplikacje",
+ "Piezo": "Piezo",
+ "BLE": "BLE",
+ "LCD": "LCD",
+ "Vibration": "Wibracje",
+ "BTNs 1:startlap 2:exit 3:reset": "BTNs 1:startlap 2:exit 3:reset",
+ "start&lap/reset, BTN1: EXIT": "start&lap/reset, BTN1: WYJŚCIE",
+ "Foreground": "Foreground",
+ "Light BW": "Światło BW",
+ "HID": "HID",
+ "Dark BW": "Ciemna BW",
+ "Customize": "Dostosuj",
+ "Passkey BETA": "Passkey BETA",
+ "Background": "Tło",
+ "Background 2": "Tło 2",
+ "Highlight BG": "Podświetlenie BG",
+ "Foreground 2": "Nowa wiedza 2",
+ "Highlight FG": "Highlight FG",
+ "LCD Brightness": "Jasność LCD",
+ "Wake on Touch": "Wake on Touch",
+ "LCD Timeout": "LCD Timeout",
+ "Remove": "Usuń",
+ "Wake on Twist": "Wake on Twist",
+ "Wake on BTN3": "Wake na BTN3",
+ "Wake on BTN2": "Wake na BTN2",
+ "Connect device\nto add to\nwhitelist": "Podłącz urządzenie\ndodać do\nwhitelist",
+ "Wake on BTN1": "Wake na BTN1",
+ "Add Device": "Dodaj urządzenie",
+ "Programmable": "Programowalna strona",
+ "Wake on FaceUp": "Wake on FaceUp",
+ "Clock Style": "Styl zegara",
+ "Twist Threshold": "Próg skrętu",
+ "Time Zone": "Strefa czasowa",
+ "Twist Max Y": "Twist Max Y",
+ "Twist Timeout": "Twist Timeout",
+ "Utilities": "Narzędzia",
+ "Debug Info": "Debug Info",
+ "This will remove everything": "To spowoduje usunięcie wszystkiego",
+ "Compact Storage": "Kompaktowe przechowywanie",
+ "Flatten Battery": "Spłaszcz baterię",
+ "Log": "Dziennik Ustaw",
+ "Rewrite Settings": "Ustawienia przepisywania",
+ "Storage": "Przechowywanie",
+ "Reset Settings": "Resetuj ustawienia",
+ "Turn Off": "Wyłączyć",
+ "Minute": "Minuta",
+ "Stay Connectable": "Pozostań w kontakcie",
+ "Date": "Data",
+ "App Settings": "Ustawienia aplikacji",
+ "No app has settings": "Żadna aplikacja nie ma ustawień",
+ "Connectable": "Możliwość podłączenia",
+ "Year": "Rok",
+ "Second": "Drugi",
+ "No Clocks Found": "Nie znaleziono zegarów",
+ "Hour": "Godzina",
+ "Reset to Defaults": "Resetuj do ustawień domyślnych",
+ "Compacting...\nTakes approx\n1 minute": "Zagęszczanie...\nTrwa ok.\n1 minuta",
+ "Reset all widgets": "Wyzeruj wszystkie widżety",
+ "Right": "Prawo",
+ "Side": "Strona",
+ "TIMER": "TIMER",
+ "Sort Order": "Kolejność sortowania",
+ "Reset": "Reset",
+ "Invalid settings": "Nieprawidłowe ustawienia",
+ "Month": "Miesiąc",
+ "Widgets": "Widżety",
+ "Left": "Lewa",
+ "on": "na stronie",
+ "Delete": "Usuń",
+ "Hours": "Godziny",
+ "ALARM": "ALARM",
+ "Message": "Wiadomość",
+ "off": "poza",
+ "Reset All": "Resetuj wszystko",
+ "Minutes": "Protokół",
+ "Repeat": "Powtórz",
+ "Enabled": "Włączone",
+ "Vibrate": "Vibrate",
+ "Whitelist": "Whitelist",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Rozładowanie baterii - może to trwać godzinami.\nNaciśnij długo przycisk, aby anulować",
+ "Select Clock": "Wybierz zegar",
+ "Theme": "Temat",
+ "Locale": "Locale",
+ "Error in settings": "Błąd w ustawieniach",
+ "Disable": "Wyłącz",
+ "Settings": "Ustawienia",
+ "On": "Na stronie",
+ "Hide": "Ukryj",
+ "Messages": "Wiadomości",
+ "Factory Reset": "Reset fabryczny",
+ "System": "System",
+ "Alerts": "Wpisy",
+ "Set Time": "Ustawianie czasu",
+ "Ok": "Ok",
+ "Yes": "Tak",
+ "Show": "Pokaż",
+ "No": "Nie",
+ "Back": "Powrót",
+ "Off": "Poza"
+ },
+ "alarm": {
+ "//": "App-specific overrides"
+ }
+}
\ No newline at end of file
diff --git a/lang/pt_PT.json b/lang/pt_PT.json
new file mode 100644
index 000000000..837f7dab7
--- /dev/null
+++ b/lang/pt_PT.json
@@ -0,0 +1,167 @@
+{
+ "//": "Portuguese language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "New Timer": "Novo Temporizador",
+ "New Alarm": "Novo Alarme",
+ "Auto snooze": "Soneca automática",
+ "week": "semana",
+ "circle 3": "círculo 3",
+ "(repeat)": "(repetir)",
+ "Save": "Salvar",
+ "Keep Msgs": "Manter Msgs",
+ "music": "música",
+ "circle 4": "círculo 4",
+ "circle 2": "círculo 2",
+ "circle count": "contagem em círculo",
+ "circle 1": "círculo 1",
+ "battery warn": "aviso de bateria",
+ "show widgets": "widgets de exposição",
+ "data": "dados",
+ "heartrate": "banda funerária",
+ "distance goal": "golo da distância",
+ "Circle": "Círculo",
+ "colorize icon": "ícone colorir",
+ "min. confidence": "min. confiança",
+ "minimum": "mínimo",
+ "maximum": "máximo",
+ "Heartrate": "Banda cardíaca",
+ "weather circle": "círculo meteorológico",
+ "step length": "comprimento do passo",
+ "valid period": "período válido",
+ "TAP right top/bottom": "TAP superior/inferior direita",
+ "Vector font size": "Tamanho de letra vectorial",
+ "Yes\ndefinitely": "Sim\ndefinitivamente",
+ "BTNs 1:startlap 2:exit 3:reset": "BTNs 1:startlap 2:exit 3:reset",
+ "STEPS": "ETAPAS",
+ "Font": "Fonte",
+ "Show clocks": "Mostrar relógios",
+ "App Source\nNot found": "Fonte do aplicativo\nNão encontrado",
+ "Mark Unread": "Marcar como não lido",
+ "View Message": "Ver Mensagem",
+ "start&lap/reset, BTN1: EXIT": "start&lap/reset, BTN1: SAÍDA",
+ "Launcher Settings": "Configurações do lançador",
+ "Delete All Messages": "Apagar todas as mensagens",
+ "Delete all messages": "Apagar todas as mensagens",
+ "Utils": "Utils",
+ "LCD": "LCD",
+ "Apps": "Apps",
+ "Record Run": "Record Run",
+ "No Messages": "Sem Mensagens",
+ "Unread timer": "Temporizador não lido",
+ "Are you sure": "Tens a certeza",
+ "Make Connectable": "Tornar Conectável",
+ "Piezo": "Piezo",
+ "Bluetooth": "Bluetooth",
+ "BLE": "BLE",
+ "Programmable": "Programável",
+ "Vibration": "Vibração",
+ "Quiet Mode": "Modo Silencioso",
+ "Foreground": "Primeiro plano",
+ "Passkey BETA": "Passkey BETA",
+ "HID": "HID",
+ "Light BW": "BW Leve",
+ "Foreground 2": "Primeiro plano 2",
+ "Dark BW": "BW Escuro",
+ "Background": "Antecedentes",
+ "Highlight FG": "Destaque FG",
+ "Customize": "Personalizar",
+ "Background 2": "Antecedentes 2",
+ "Wake on BTN3": "Acorde no BTN3",
+ "Wake on BTN2": "Acorde no BTN2",
+ "Highlight BG": "Destaque BG",
+ "LCD Timeout": "Tempo limite do LCD",
+ "Wake on FaceUp": "Acorde no FaceUp",
+ "Wake on BTN1": "Acorde no BTN1",
+ "Wake on Twist": "Acorde na Twist",
+ "Wake on Touch": "Acorde ao Toque",
+ "Connect device\nto add to\nwhitelist": "Ligar dispositivo\npara adicionar a\nlista branca",
+ "Remove": "Remover",
+ "Add Device": "Adicionar dispositivo",
+ "LCD Brightness": "Luminosidade do LCD",
+ "Twist Max Y": "Torcer Max Y",
+ "Utilities": "Utilidades",
+ "Twist Threshold": "Limiar de Torção",
+ "Time Zone": "Fuso horário",
+ "Twist Timeout": "Twist Timeout",
+ "Clock Style": "Estilo Relógio",
+ "Debug Info": "Informação de Depuração",
+ "Log": "Diário de Bordo",
+ "Storage": "Armazenamento",
+ "Rewrite Settings": "Re-escrever configurações",
+ "Compacting...\nTakes approx\n1 minute": "A compactação...\nLeva aproximadamente\n1 minuto",
+ "Flatten Battery": "Bateria achatada",
+ "Reset Settings": "Redefinir configurações",
+ "Compact Storage": "Armazenamento compacto",
+ "Stay Connectable": "Fique Conectável",
+ "Turn Off": "Desligar",
+ "Connectable": "Conectável",
+ "This will remove everything": "Isto irá remover tudo",
+ "Date": "Data",
+ "Month": "Mês",
+ "Second": "Segundo",
+ "Minute": "Ata",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Bateria plana - isto pode demorar horas.\nBotão de pressão prolongada para cancelar",
+ "Reset to Defaults": "Redefinir para Padrões",
+ "Hour": "Hora",
+ "No Clocks Found": "Não foram encontrados relógios",
+ "Right": "Certo",
+ "No app has settings": "Nenhum aplicativo tem configurações",
+ "App Settings": "Configurações do aplicativo",
+ "OFF": "DESLIGADO",
+ "Side": "Lado",
+ "Left": "Esquerda",
+ "Sort Order": "Ordem de classificação",
+ "Widgets": "Widgets",
+ "Invalid settings": "Configurações inválidas",
+ "Sleep Phase Alarm": "Alarme da Fase do Sono",
+ "Alarm": "Alarme",
+ "Minutes": "Acta",
+ "TIMER": "TIMER",
+ "Hours": "Horário",
+ "on": "em",
+ "Reset All": "Reinicializar tudo",
+ "Repeat": "Repita",
+ "Delete": "Eliminar",
+ "Enabled": "Habilitado",
+ "Reset all widgets": "Redefinir todos os widgets",
+ "Reset": "Reinicialização",
+ "goal": "meta",
+ "Message": "Mensagem",
+ "Beep": "Bip",
+ "Vibrate": "Vibrar",
+ "System": "Sistema",
+ "Alerts": "Alertas",
+ "Locale": "Localização",
+ "Set Time": "Tempo Definido",
+ "Whitelist": "Lista branca",
+ "Select Clock": "Selecione Relógio",
+ "BACK": "VOLTAR",
+ "Timer": "Temporizador",
+ "Error in settings": "Erro nas configurações",
+ "Disable": "Desabilitar",
+ "Factory Reset": "Reinicialização de Fábrica",
+ "Connected": "Conectado",
+ "ALARM": "ALARME",
+ "Sleep": "Dormir",
+ "Messages": "Mensagens",
+ "Hide": "Esconder",
+ "Show": "Mostrar",
+ "On": "Em",
+ "Ok": "Ok",
+ "No": "Não",
+ "Settings": "Configurações",
+ "steps": "passos",
+ "back": "voltar",
+ "Steps": "Passos",
+ "Year": "Ano",
+ "Yes": "Sim",
+ "Loading": "Carregamento",
+ "Music": "Música",
+ "color": "cor",
+ "off": "em",
+ "Off": "Fora",
+ "Theme": "Tema",
+ "Back": "Voltar"
+ }
+}
\ No newline at end of file
diff --git a/lang/ro_RO.json b/lang/ro_RO.json
new file mode 100644
index 000000000..78ed27579
--- /dev/null
+++ b/lang/ro_RO.json
@@ -0,0 +1,163 @@
+{
+ "//": "Romanian language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "New Alarm": "Alarma nouă",
+ "New Timer": "Noul cronometru",
+ "(repeat)": "(repetă)",
+ "Save": "Salvați",
+ "Auto snooze": "Repaus automat",
+ "Timer": "Cronometru",
+ "Alarm": "Alarma",
+ "circle 2": "cercul 2",
+ "circle 1": "cercul 1",
+ "Sleep": "Somnul",
+ "week": "săptămâna",
+ "circle count": "număr de cercuri",
+ "Connected": "Conectat",
+ "steps": "etape",
+ "battery warn": "avertizare baterie",
+ "heartrate": "ritmul cardiac",
+ "show widgets": "arată widget-uri",
+ "Keep Msgs": "Păstrați Msgs",
+ "circle 4": "cercul 4",
+ "circle 3": "cercul 3",
+ "minimum": "minim",
+ "Heartrate": "Ritmul cardiac",
+ "min. confidence": "încredere minimă",
+ "distance goal": "obiectivul de distanță",
+ "Steps": "Pași",
+ "color": "culoare",
+ "Circle": "Cerc",
+ "step length": "lungimea pasului",
+ "data": "date",
+ "maximum": "maxim",
+ "valid period": "perioada de valabilitate",
+ "weather circle": "cercul meteorologic",
+ "goal": "obiectiv",
+ "App Source\nNot found": "Sursa aplicației\nNu a fost găsit",
+ "Vector font size": "Dimensiunea fontului vectorial",
+ "colorize icon": "colorați pictograma",
+ "Show clocks": "Arată ceasuri",
+ "Loading": "Încărcare",
+ "Launcher Settings": "Setări lansator",
+ "Font": "Font",
+ "TAP right top/bottom": "TAP dreapta sus/jos",
+ "View Message": "Vezi mesajul",
+ "LCD": "LCD",
+ "Beep": "Beep",
+ "Vibration": "Vibrații",
+ "Bluetooth": "Bluetooth",
+ "Utils": "Utils",
+ "start&lap/reset, BTN1: EXIT": "start&lap/reset, BTN1: EXIT",
+ "BTNs 1:startlap 2:exit 3:reset": "BTN-uri 1:startlap 2:exit 3:reset",
+ "Piezo": "Piezoelectrice",
+ "Customize": "Personalizați",
+ "Delete all messages": "Ștergeți toate mesajele",
+ "Apps": "Aplicații",
+ "Are you sure": "Ești sigur că",
+ "Music": "Muzică",
+ "Record Run": "Record Run",
+ "Mark Unread": "Marcați Unread",
+ "Foreground": "Prim-plan",
+ "Foreground 2": "Prim-plan 2",
+ "Background": "Fond",
+ "Passkey BETA": "Passkey BETA",
+ "Light BW": "Lumină BW",
+ "Dark BW": "Dark BW",
+ "Make Connectable": "Asigurați conectabilitatea",
+ "HID": "HID",
+ "Delete All Messages": "Ștergeți toate mesajele",
+ "No Messages": "Nu există mesaje",
+ "Unread timer": "Cronometru necitit",
+ "Quiet Mode": "Modul silențios",
+ "Programmable": "Programabil",
+ "BLE": "BLE",
+ "Highlight BG": "Evidențiați BG",
+ "Background 2": "Context 2",
+ "Highlight FG": "Evidențiați FG",
+ "Remove": "Eliminați",
+ "Connect device\nto add to\nwhitelist": "Conectați dispozitivul\npentru a adăuga la\nlista albă",
+ "LCD Brightness": "Luminozitatea LCD",
+ "Wake on FaceUp": "Trezirea pe FaceUp",
+ "LCD Timeout": "Timeout LCD",
+ "Add Device": "Adăugați dispozitiv",
+ "Wake on Touch": "Trezire la atingere",
+ "Wake on BTN1": "Trezirea pe BTN1",
+ "Wake on BTN3": "Trezirea pe BTN3",
+ "Debug Info": "Informații de depanare",
+ "Log": "Jurnal",
+ "Clock Style": "Stilul ceasului",
+ "Utilities": "Utilități",
+ "Wake on Twist": "Trezirea pe Twist",
+ "Wake on BTN2": "Trezirea pe BTN2",
+ "Twist Threshold": "Pragul de răsucire",
+ "Time Zone": "Fusul orar",
+ "Twist Timeout": "Twist Timeout",
+ "Twist Max Y": "Twist Max Y",
+ "Minute": "Minute",
+ "Month": "Luna",
+ "Second": "Al doilea",
+ "Hour": "Ora",
+ "Flatten Battery": "Aplatizare baterie",
+ "Storage": "Depozitare",
+ "Compact Storage": "Depozitare compactă",
+ "Reset Settings": "Resetare setări",
+ "Rewrite Settings": "Resetare Setări de rescriere",
+ "Stay Connectable": "Rămâneți conectați",
+ "No Clocks Found": "Nu s-au găsit ceasuri",
+ "Turn Off": "Oprire",
+ "This will remove everything": "Acest lucru va elimina totul",
+ "App Settings": "Setări aplicație",
+ "Year": "Anul",
+ "Connectable": "Conectabil",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Baterie de aplatizare - acest lucru poate dura ore.\nApăsați lung butonul pentru a anula",
+ "Compacting...\nTakes approx\n1 minute": "Compactarea...\nDurează aproximativ\n1 minut",
+ "Reset to Defaults": "Resetare la valorile implicite",
+ "Reset": "Resetare",
+ "Widgets": "Widgeturi",
+ "Reset all widgets": "Resetați toate widget-urile",
+ "No app has settings": "Nici o aplicație nu are setări",
+ "Left": "Stânga",
+ "Side": "Lateral",
+ "Date": "Data",
+ "Sort Order": "Ordinea de sortare",
+ "Invalid settings": "Setări nevalabile",
+ "Right": "Dreapta",
+ "Reset All": "Resetați toate",
+ "on": "pe",
+ "TIMER": "TIMER",
+ "off": "off",
+ "Message": "Mesaj",
+ "Vibrate": "Vibrare",
+ "ALARM": "ALARMĂ",
+ "Delete": "Ștergeți",
+ "Repeat": "Repetați",
+ "Enabled": "Activat",
+ "Settings": "Setări",
+ "Minutes": "Proces-verbal",
+ "Hours": "Ore",
+ "Theme": "Tema",
+ "Messages": "Mesaje",
+ "Hide": "Ascundeți",
+ "Alerts": "Alerte",
+ "Error in settings": "Eroare în setări",
+ "System": "Sistem",
+ "Disable": "Dezactivați",
+ "Set Time": "Set Time",
+ "Factory Reset": "Resetare din fabrică",
+ "Yes": "Da",
+ "Select Clock": "Selectați ceasul",
+ "Whitelist": "Lista albă",
+ "Locale": "Locale",
+ "Ok": "Ok",
+ "Show": "Arată",
+ "On": "Pe",
+ "No": "Nu",
+ "Off": "Off",
+ "Back": "Înapoi"
+ },
+ "alarm": {
+ "//": "App-specific overrides"
+ }
+}
\ No newline at end of file
diff --git a/lang/ru_RU.json b/lang/ru_RU.json
new file mode 100644
index 000000000..6bdf906fe
--- /dev/null
+++ b/lang/ru_RU.json
@@ -0,0 +1,167 @@
+{
+ "//": "Russian language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "New Alarm": "Новая сигнализация",
+ "(repeat)": "(повтор)",
+ "New Timer": "Новый таймер",
+ "Auto snooze": "Автоматическая дозагрузка",
+ "circle 4": "круг 4",
+ "Save": "Сохранить",
+ "Keep Msgs": "Сохраняйте сообщения",
+ "week": "неделя",
+ "circle count": "счётчик окружностей",
+ "circle 2": "круг 2",
+ "music": "музыка",
+ "battery warn": "предупреждение о разряде батареи",
+ "circle 1": "круг 1",
+ "maximum": "максимальный",
+ "min. confidence": "мин. уверенность",
+ "heartrate": "частота сердечных сокращений",
+ "Circle": "Круг",
+ "minimum": "минимум",
+ "Heartrate": "Пульс",
+ "show widgets": "показывать виджеты",
+ "weather circle": "метеорологический круг",
+ "data": "данные",
+ "step length": "длина шага",
+ "valid period": "период действия",
+ "distance goal": "дальняя цель",
+ "circle 3": "круг 3",
+ "TAP right top/bottom": "TAP справа сверху/снизу",
+ "Delete all messages": "Удалить все сообщения",
+ "Mark Unread": "Отметить непрочитанным",
+ "Unread timer": "Непрочитанный таймер",
+ "Launcher Settings": "Настройки запуска",
+ "start&lap/reset, BTN1: EXIT": "start&lap/reset, BTN1: EXIT",
+ "View Message": "Посмотреть сообщение",
+ "No Messages": "Нет сообщений",
+ "Are you sure": "Вы уверены",
+ "Vector font size": "Размер векторного шрифта",
+ "colorize icon": "раскрасить иконку",
+ "Yes\ndefinitely": "Да\nопределенно",
+ "BTNs 1:startlap 2:exit 3:reset": "BTNs 1:startlap 2:exit 3:reset",
+ "App Source\nNot found": "Источник приложения\nНе найдено",
+ "STEPS": "СТЕПЕНИ",
+ "Font": "Шрифт",
+ "Show clocks": "Показать часы",
+ "Vibration": "Вибрация",
+ "Bluetooth": "Bluetooth",
+ "Make Connectable": "Сделать соединяемым",
+ "Apps": "Приложения",
+ "Quiet Mode": "Тихий режим",
+ "LCD": "ЖК-ДИСПЛЕЙ",
+ "Programmable": "Программируемый",
+ "Passkey BETA": "Passkey BETA",
+ "Record Run": "Рекордный пробег",
+ "Delete All Messages": "Удалить все сообщения",
+ "Utils": "Утилиты",
+ "Piezo": "Пьезо",
+ "Foreground": "Передний план",
+ "Background": "Справочная информация",
+ "Dark BW": "Темный BW",
+ "HID": "HID",
+ "BLE": "BLE",
+ "Light BW": "Светлый BW",
+ "Highlight FG": "Выделите FG",
+ "Foreground 2": "Передний план 2",
+ "Customize": "Настроить",
+ "Wake on BTN2": "Вейк на BTN2",
+ "Wake on BTN1": "Проснись на BTN1",
+ "Wake on BTN3": "Уэйк на BTN3",
+ "Add Device": "Добавить устройство",
+ "LCD Brightness": "Яркость ЖК-дисплея",
+ "Wake on FaceUp": "Проснуться на FaceUp",
+ "Storage": "Хранение",
+ "Wake on Twist": "Проснуться на твисте",
+ "Connect device\nto add to\nwhitelist": "Подключить устройство\nдля добавления в\nбелый список",
+ "Background 2": "Справочная информация 2",
+ "Remove": "Удалить",
+ "Highlight BG": "Выделение BG",
+ "LCD Timeout": "Тайм-аут ЖК-дисплея",
+ "Twist Timeout": "Тайм-аут скручивания",
+ "Twist Threshold": "Порог скручивания",
+ "Wake on Touch": "Пробуждение при касании",
+ "Twist Max Y": "Twist Max Y",
+ "Stay Connectable": "Оставайтесь на связи",
+ "This will remove everything": "Это удалит все",
+ "Turn Off": "Выключить",
+ "Hour": "Час",
+ "Minute": "Минута",
+ "Reset to Defaults": "Сброс настроек по умолчанию",
+ "No Clocks Found": "Часы не найдены",
+ "Log": "Журнал",
+ "Debug Info": "Отладочная информация",
+ "Utilities": "Утилиты",
+ "Compact Storage": "Компактное хранение",
+ "Reset Settings": "Сброс настроек",
+ "Compacting...\nTakes approx\n1 minute": "Уплотнение...\nЗанимает приблизительно\n1 минута",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Сплющивание батареи - это может занять несколько часов.\nДлительное нажатие кнопки для отмены",
+ "Connectable": "Подключаемый",
+ "Clock Style": "Часовой стиль",
+ "Time Zone": "Часовой пояс",
+ "Flatten Battery": "Расплющить батарею",
+ "Rewrite Settings": "Настройки перезаписи",
+ "Sort Order": "Порядок сортировки",
+ "Right": "Справа",
+ "Left": "Слева",
+ "Side": "Сторона",
+ "Hours": "Часы",
+ "on": "на сайте",
+ "Widgets": "Виджеты",
+ "TIMER": "ТАЙМЕР",
+ "Date": "Дата",
+ "Month": "Месяц",
+ "OFF": "OFF",
+ "Reset All": "Сбросить все",
+ "Alarm": "Сигнализация",
+ "Reset all widgets": "Сброс всех виджетов",
+ "Delete": "Удалить",
+ "Invalid settings": "Недопустимые настройки",
+ "Second": "Второй",
+ "Sleep Phase Alarm": "Сигнализация фазы сна",
+ "No app has settings": "Ни одно приложение не имеет настроек",
+ "App Settings": "Настройки приложения",
+ "Repeat": "Повторите",
+ "System": "Система",
+ "Minutes": "Протоколы",
+ "Enabled": "Включено",
+ "Reset": "Сброс",
+ "Vibrate": "Вибрация",
+ "Alerts": "Оповещения",
+ "Select Clock": "Выберите часы",
+ "Set Time": "Установленное время",
+ "Locale": "Местность",
+ "Beep": "Звуковой сигнал",
+ "goal": "гол",
+ "Message": "Сообщение",
+ "ALARM": "АЛАРМ",
+ "Disable": "Отключить",
+ "Factory Reset": "Заводской сброс",
+ "Sleep": "Сон",
+ "Whitelist": "Белый список",
+ "Timer": "Таймер",
+ "Error in settings": "Ошибка в настройках",
+ "BACK": "BACK",
+ "Messages": "Сообщения",
+ "Show": "Показать",
+ "Hide": "Скрыть",
+ "Connected": "Подключено",
+ "On": "На сайте",
+ "No": "Нет",
+ "Ok": "Хорошо",
+ "Settings": "Настройки",
+ "steps": "шаги",
+ "back": "назад",
+ "Year": "Год",
+ "Steps": "Шаги",
+ "Yes": "Да",
+ "Loading": "Загрузка",
+ "color": "цвет",
+ "Music": "Музыка",
+ "Off": "На сайте",
+ "off": "отключен",
+ "Theme": "Тема",
+ "Back": "Назад"
+ }
+}
\ No newline at end of file
diff --git a/lang/sk_SK.json b/lang/sk_SK.json
new file mode 100644
index 000000000..6d7de7398
--- /dev/null
+++ b/lang/sk_SK.json
@@ -0,0 +1,163 @@
+{
+ "//": "Slovak language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "New Alarm": "Nový alarm",
+ "New Timer": "Nový časovač",
+ "(repeat)": "(opakovanie)",
+ "Alarm": "Alarm",
+ "Save": "Uložiť",
+ "week": "týždeň",
+ "circle count": "počet kruhov",
+ "Timer": "Časovač",
+ "Sleep": "Spánok",
+ "circle 1": "okruh 1",
+ "Connected": "Pripojené",
+ "Auto snooze": "Automatické odloženie",
+ "circle 4": "kruh 4",
+ "heartrate": "srdcová frekvencia",
+ "steps": "kroky",
+ "circle 2": "kruh 2",
+ "Keep Msgs": "Uchovávajte správy Msgs",
+ "goal": "cieľ",
+ "circle 3": "kruh 3",
+ "distance goal": "cieľ vzdialenosti",
+ "show widgets": "zobraziť widgety",
+ "maximum": "maximum",
+ "minimum": "minimálne",
+ "Circle": "Kruh",
+ "valid period": "obdobie platnosti",
+ "Steps": "Kroky",
+ "data": "údaje",
+ "min. confidence": "min. dôvera",
+ "battery warn": "upozornenie na batériu",
+ "Heartrate": "Srdcová frekvencia",
+ "weather circle": "kruh počasia",
+ "step length": "dĺžka kroku",
+ "colorize icon": "vyfarbenie ikony",
+ "color": "farba",
+ "TAP right top/bottom": "TAP vpravo hore/dole",
+ "App Source\nNot found": "Zdroj aplikácie\nNenájdené",
+ "Loading": "Načítavanie",
+ "Font": "Písmo",
+ "Unread timer": "Neprečítaný časovač",
+ "Music": "Hudba",
+ "Mark Unread": "Označiť neprečítané",
+ "View Message": "Zobraziť správu",
+ "Launcher Settings": "Nastavenia spúšťača",
+ "Delete All Messages": "Odstránenie všetkých správ",
+ "Vector font size": "Veľkosť vektorového písma",
+ "Delete all messages": "Odstránenie všetkých správ",
+ "BTNs 1:startlap 2:exit 3:reset": "BTNs 1:startlap 2:exit 3:reset",
+ "start&lap/reset, BTN1: EXIT": "start&lap/reset, BTN1: EXIT",
+ "Are you sure": "Ste si istý, že",
+ "Show clocks": "Zobraziť hodiny",
+ "No Messages": "Žiadne správy",
+ "Record Run": "Rekordný beh",
+ "Apps": "Aplikácie",
+ "Piezo": "Piezoelektrické zariadenie",
+ "LCD": "LCD",
+ "Programmable": "Programovateľné",
+ "Utils": "Utils",
+ "Foreground 2": "Popredie 2",
+ "HID": "HID",
+ "Vibration": "Vibrácie",
+ "Make Connectable": "Urobiť pripojiteľné",
+ "Bluetooth": "Bluetooth",
+ "Quiet Mode": "Tichý režim",
+ "Beep": "Pípnutie",
+ "Passkey BETA": "Passkey BETA",
+ "Dark BW": "Tmavá BW",
+ "Light BW": "Light BW",
+ "Foreground": "Prvé miesto",
+ "Customize": "Prispôsobenie stránky",
+ "Background": "Pozadie",
+ "BLE": "BLE",
+ "LCD Brightness": "Jas LCD displeja",
+ "LCD Timeout": "Časový limit LCD displeja",
+ "Add Device": "Pridať zariadenie",
+ "Connect device\nto add to\nwhitelist": "Pripojenie zariadenia\npridať do\nwhitelist",
+ "Remove": "Odstránenie stránky",
+ "Highlight FG": "Zvýraznenie FG",
+ "Wake on Touch": "Prebudenie na dotyk",
+ "Background 2": "Pozadie 2",
+ "Wake on BTN1": "Prebuďte sa na BTN1",
+ "Wake on BTN2": "Prebuďte sa na BTN2",
+ "Wake on BTN3": "Prebuďte sa na BTN3",
+ "Highlight BG": "Zvýraznenie BG",
+ "Wake on FaceUp": "Prebudiť sa na FaceUp",
+ "Wake on Twist": "Prebudiť sa na Twiste",
+ "Utilities": "Komunálne služby",
+ "Rewrite Settings": "Nastavenia prepísania",
+ "Log": "Prihlásiť sa",
+ "Debug Info": "Informácie o ladení",
+ "Storage": "Úložisko",
+ "Compact Storage": "Kompaktné úložisko",
+ "Twist Max Y": "Twist Max Y",
+ "Twist Timeout": "Twist Timeout",
+ "Time Zone": "Časové pásmo",
+ "Reset Settings": "Obnovenie nastavení",
+ "Clock Style": "Štýl hodín",
+ "Compacting...\nTakes approx\n1 minute": "Zhutňovanie...\nTrvá približne\n1 minúta",
+ "Twist Threshold": "Prahová hodnota Twist",
+ "Stay Connectable": "Zostaňte pripojení",
+ "Flatten Battery": "Sploštenie batérie",
+ "This will remove everything": "Tým sa odstráni všetko.",
+ "Connectable": "Pripojiteľné",
+ "Turn Off": "Vypnúť",
+ "Reset to Defaults": "Obnovenie predvolených nastavení",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Sploštenie batérie - môže trvať niekoľko hodín.\nDlhým stlačením tlačidla zrušíte",
+ "No Clocks Found": "Nenašli sa žiadne hodiny",
+ "Side": "Strana",
+ "Date": "Dátum",
+ "Second": "Druhý",
+ "Hour": "Hodina",
+ "Minute": "Minúta",
+ "Left": "Vľavo",
+ "Year": "Rok",
+ "App Settings": "Nastavenia aplikácie",
+ "Widgets": "Widgety",
+ "Month": "Mesiac",
+ "No app has settings": "Žiadna aplikácia nemá nastavenia",
+ "Invalid settings": "Neplatné nastavenia",
+ "Sort Order": "Poradie triedenia",
+ "Reset All": "Obnoviť všetky",
+ "Reset": "Obnovenie",
+ "TIMER": "ČASOVAČ",
+ "Right": "Vpravo",
+ "Reset all widgets": "Obnovenie všetkých widgetov",
+ "ALARM": "ALARM",
+ "Minutes": "Zápisnica",
+ "Delete": "Odstrániť",
+ "off": "mimo",
+ "on": "na stránke .",
+ "Repeat": "Opakujte",
+ "System": "Systém",
+ "Enabled": "Povolené",
+ "Vibrate": "Vibrovať",
+ "Hours": "Hodiny",
+ "Settings": "Nastavenia",
+ "Select Clock": "Vybrať hodiny",
+ "Alerts": "Upozornenia",
+ "Message": "Správa",
+ "Theme": "Téma",
+ "Set Time": "Nastavený čas",
+ "Locale": "Lokalita",
+ "Disable": "Zakázať",
+ "Messages": "Správy",
+ "Error in settings": "Chyba v nastaveniach",
+ "Hide": "Skryť",
+ "Show": "Zobraziť",
+ "On": "Na stránke",
+ "Whitelist": "Biela listina",
+ "Yes": "Áno",
+ "Ok": "Ok",
+ "Factory Reset": "Obnovenie továrenského nastavenia",
+ "No": "Nie",
+ "Off": "Vypnuté",
+ "Back": "Späť"
+ },
+ "alarm": {
+ "//": "App-specific overrides"
+ }
+}
\ No newline at end of file
diff --git a/lang/sl_SL.json b/lang/sl_SL.json
new file mode 100644
index 000000000..bcf873bdd
--- /dev/null
+++ b/lang/sl_SL.json
@@ -0,0 +1,163 @@
+{
+ "//": "Slovenian language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "Alarm": "Alarm",
+ "(repeat)": "(ponovitev)",
+ "New Timer": "Nov časovnik",
+ "New Alarm": "Nov alarm",
+ "Timer": "Časomer",
+ "Save": "Shrani",
+ "Connected": "Povezano",
+ "Keep Msgs": "Hranite sporočila Msgs",
+ "circle 4": "krog 4",
+ "circle 3": "krog 3",
+ "Auto snooze": "Samodejni dremež",
+ "circle 1": "krog 1",
+ "week": "teden",
+ "circle 2": "krog 2",
+ "Sleep": "Spanje",
+ "circle count": "štetje krogov",
+ "steps": "koraki",
+ "show widgets": "prikaži gradnike",
+ "heartrate": "srčni utrip",
+ "valid period": "veljavno obdobje",
+ "maximum": "največ",
+ "battery warn": "opozorilo o bateriji",
+ "weather circle": "vremenski krog",
+ "data": "podatki",
+ "goal": "cilj",
+ "step length": "dolžina koraka",
+ "minimum": "najmanjši",
+ "min. confidence": "min. zaupanje",
+ "Heartrate": "Srčni utrip",
+ "distance goal": "ciljna razdalja",
+ "Steps": "Koraki",
+ "color": "barva",
+ "colorize icon": "obarvanje ikone",
+ "App Source\nNot found": "Vir aplikacije\nNi najden",
+ "Show clocks": "Prikaži ure",
+ "TAP right top/bottom": "TAP desno zgoraj/spodaj",
+ "View Message": "Ogled sporočila",
+ "Circle": "Krog",
+ "Launcher Settings": "Nastavitve zaganjalnika",
+ "Vector font size": "Velikost vektorske pisave",
+ "Font": "Pisava",
+ "Loading": "Nalaganje",
+ "Delete all messages": "Brisanje vseh sporočil",
+ "No Messages": "Brez sporočil",
+ "BTNs 1:startlap 2:exit 3:reset": "BTNs 1:startlap 2:exit 3:reset",
+ "Are you sure": "Ste prepričani, da",
+ "start&lap/reset, BTN1: EXIT": "start&lap/reset, BTN1: EXIT",
+ "Mark Unread": "Označi neprebrano",
+ "Utils": "Utils",
+ "Record Run": "Rekordna vožnja",
+ "Delete All Messages": "Brisanje vseh sporočil",
+ "Unread timer": "Neprebrani časovnik",
+ "Music": "Glasba",
+ "LCD": "LCD",
+ "Apps": "Aplikacije",
+ "Bluetooth": "Bluetooth",
+ "Dark BW": "Temna BW",
+ "Vibration": "Vibracije",
+ "Quiet Mode": "Tihi način",
+ "Beep": "Beep",
+ "Passkey BETA": "Passkey BETA",
+ "Piezo": "Piezo",
+ "HID": "HID",
+ "Make Connectable": "Povežite se",
+ "BLE": "BLE",
+ "Programmable": "Programirljiv",
+ "Light BW": "Light BW",
+ "Background": "Ozadje",
+ "Customize": "Prilagodite",
+ "Background 2": "Ozadje 2",
+ "LCD Brightness": "Svetlost LCD-ja",
+ "Wake on BTN2": "Zbudi se na BTN2",
+ "Wake on BTN1": "Zbudite se na BTN1",
+ "LCD Timeout": "Časovna omejitev LCD",
+ "Twist Max Y": "Twist Max Y",
+ "Wake on Twist": "Prebudite se na Twist",
+ "Twist Threshold": "Prag zasuka",
+ "Foreground 2": "V ospredju 2",
+ "Foreground": "Novo okolje",
+ "Remove": "Odstranite",
+ "Time Zone": "Časovni pas",
+ "Wake on BTN3": "Wake na BTN3",
+ "Highlight FG": "Poudarite FG",
+ "Wake on Touch": "Zbujanje na dotik",
+ "Clock Style": "Stil ure",
+ "Highlight BG": "Poudarite BG",
+ "Add Device": "Dodajanje naprave",
+ "Connect device\nto add to\nwhitelist": "Povežite napravo\nza dodajanje v\nbeli seznam",
+ "Utilities": "Storitve",
+ "Wake on FaceUp": "Prebudite se v aplikaciji FaceUp",
+ "Compact Storage": "Kompaktno shranjevanje",
+ "Log": "Dnevnik",
+ "Debug Info": "Informacije o odpravljanju napak",
+ "Turn Off": "Izklopite",
+ "Flatten Battery": "Sploščena baterija",
+ "Reset to Defaults": "Ponastavitev na privzete nastavitve",
+ "Reset Settings": "Ponastavitev nastavitev",
+ "Twist Timeout": "Twist Timeout",
+ "This will remove everything": "To bo odstranilo vse",
+ "Rewrite Settings": "Nastavitve prepisovanja",
+ "Storage": "Shranjevanje",
+ "Compacting...\nTakes approx\n1 minute": "Zgoščevanje...\nVzame približno\n1 minuta",
+ "No Clocks Found": "Ure niso bile najdene",
+ "Stay Connectable": "Ostanite povezljivi",
+ "Minute": "Minuta",
+ "Connectable": "Povezljivost",
+ "Hour": "Ura",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Ploščati baterijo - to lahko traja več ur.\nDolgo pritisnite gumb za preklic",
+ "Second": "Drugi",
+ "Month": "Mesec",
+ "Date": "Datum",
+ "ALARM": "ALARM",
+ "Reset all widgets": "Ponastavitev vseh gradnikov",
+ "Reset All": "Ponastavi vse",
+ "TIMER": "TIMER",
+ "Widgets": "Pripomočki",
+ "Hours": "Ure",
+ "Minutes": "Zapisnik",
+ "Year": "Leto",
+ "No app has settings": "Nobena aplikacija nima nastavitev",
+ "App Settings": "Nastavitve aplikacije",
+ "Repeat": "Ponovite",
+ "Invalid settings": "Neveljavne nastavitve",
+ "Enabled": "Omogočeno",
+ "Reset": "Ponastavitev",
+ "off": "izklop",
+ "Side": "Stran",
+ "Sort Order": "Vrstni red",
+ "Left": "Leva stran",
+ "Right": "Desno",
+ "on": "na spletni strani .",
+ "Theme": "Tema",
+ "Locale": "Lokacija",
+ "Alerts": "Opozorila",
+ "Select Clock": "Izberite uro",
+ "System": "Sistem",
+ "Settings": "Nastavitve",
+ "Set Time": "Čas nastavitve",
+ "Whitelist": "Bela lista",
+ "Message": "Sporočilo",
+ "Vibrate": "Vibriranje",
+ "Delete": "Izbriši",
+ "Error in settings": "Napaka v nastavitvah",
+ "Messages": "Sporočila",
+ "Disable": "Onemogočite",
+ "Show": "Prikaži",
+ "Ok": "Ok",
+ "On": "Na spletni strani",
+ "Hide": "Skrij",
+ "Factory Reset": "Ponastavitev tovarniške nastavitve",
+ "Yes": "Da",
+ "No": "Ne",
+ "Off": "Izklopljeno",
+ "Back": "Nazaj"
+ },
+ "alarm": {
+ "//": "App-specific overrides"
+ }
+}
\ No newline at end of file
diff --git a/lang/sv_SE.json b/lang/sv_SE.json
index 3a006c2bf..6b35f5cdf 100644
--- a/lang/sv_SE.json
+++ b/lang/sv_SE.json
@@ -1,21 +1,173 @@
{
- "//":"Swedish language translations",
- "GLOBAL": {
- "//":"Translations that apply for all apps",
- "Alarms" : "Larm",
- "Hours" : "Timmar",
- "Minutes" : "Minuter",
- "Enabled" : "Aktiverad",
- "New Alarm" : "Ny alarm",
- "Save" : "Spara",
- "Back" : "Tillbaka",
- "Repeat" : "Upprepning",
- "Delete" : "Radera",
- "ALARM!" : "ALURH!",
- "Sleep" : "Sömn"
- },
- "alarm": {
- "//":"App-specific overrides",
- "rpt" : "uppr."
- }
-}
+ "//": "Swedish language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "Alarms": "Larm",
+ "Hours": "Timmar",
+ "Minutes": "Minuter",
+ "Enabled": "Aktiverad",
+ "New Alarm": "Ny alarm",
+ "Save": "Spara",
+ "Back": "Tillbaka",
+ "Repeat": "Upprepning",
+ "Delete": "Radera",
+ "ALARM!": "ALURH!",
+ "Sleep": "Sömn",
+ "circle 3": "cirkel 3",
+ "circle 1": "cirkel 1",
+ "music": "musik",
+ "week": "vecka",
+ "Keep Msgs": "Behåll meddelanden",
+ "Auto snooze": "Automatisk snooze",
+ "step length": "steglängd",
+ "Circle": "Cirkel",
+ "data": "uppgifter",
+ "colorize icon": "färglägga ikonen",
+ "min. confidence": "Min. förtroende",
+ "show widgets": "visa widgets",
+ "valid period": "giltig period",
+ "Heartrate": "Hjärtfrekvens",
+ "distance goal": "mål för distans",
+ "circle 4": "cirkel 4",
+ "circle count": "antal cirklar",
+ "minimum": "minimum",
+ "maximum": "maximal",
+ "New Timer": "Ny timer",
+ "battery warn": "batteri varning",
+ "heartrate": "hjärtfrekvens",
+ "circle 2": "cirkel 2",
+ "(repeat)": "(upprepning)",
+ "weather circle": "Vädercirkel",
+ "Delete All Messages": "Radera alla meddelanden",
+ "No Messages": "Inga meddelanden",
+ "Show clocks": "Visa klockor",
+ "STEPS": "STEG",
+ "TAP right top/bottom": "TAP höger upp/ner",
+ "View Message": "Visa meddelande",
+ "Mark Unread": "Markera oläst",
+ "Are you sure": "Är du säker på att",
+ "Delete all messages": "Radera alla meddelanden",
+ "Record Run": "Rekordkörning",
+ "Unread timer": "Oläst timer",
+ "Vibration": "Vibrationer",
+ "Utils": "Användaruppgifter",
+ "Quiet Mode": "Tyst läge",
+ "Passkey BETA": "Passkey BETA",
+ "Dark BW": "Mörk BW",
+ "BTNs 1:startlap 2:exit 3:reset": "BTN 1:startlap 2:exit 3:reset",
+ "start&lap/reset, BTN1: EXIT": "start&lap/återställning, BTN1: EXIT",
+ "BLE": "BLE",
+ "Programmable": "Programmerbar",
+ "Launcher Settings": "Inställningar för lanseringen",
+ "Vector font size": "Vektor teckensnittsstorlek",
+ "Font": "Typsnitt",
+ "Yes\ndefinitely": "Ja\ndefinitivt",
+ "App Source\nNot found": "App-källa\nEj funnen",
+ "Make Connectable": "Gör det möjligt att ansluta",
+ "HID": "HID",
+ "Bluetooth": "Bluetooth",
+ "Apps": "Appar",
+ "Piezo": "Piezo",
+ "LCD": "LCD",
+ "Foreground 2": "Förgrund 2",
+ "Light BW": "Ljus BW",
+ "Background": "Bakgrund",
+ "Remove": "Ta bort",
+ "Highlight BG": "Markera BG",
+ "Customize": "Anpassa",
+ "Highlight FG": "Highlight FG",
+ "Background 2": "Bakgrund 2",
+ "LCD Brightness": "Ljusstyrka på LCD-skärmen",
+ "Add Device": "Lägg till enhet",
+ "Wake on BTN1": "Vakna på BTN1",
+ "Wake on BTN2": "Vakna på BTN2",
+ "Twist Timeout": "Twist Timeout",
+ "Wake on Touch": "Vakna vid beröring",
+ "LCD Timeout": "LCD Timeout",
+ "Foreground": "Förgrund",
+ "Connect device\nto add to\nwhitelist": "Anslut enhet\nför att lägga till\nvitlista",
+ "Wake on FaceUp": "Vakna på FaceUp",
+ "Twist Threshold": "Tröskelvärde för vridning",
+ "Wake on BTN3": "Wake på BTN3",
+ "Clock Style": "Klockstil",
+ "Time Zone": "Tidszon",
+ "Twist Max Y": "Vridning Max Y",
+ "Stay Connectable": "Håll dig tillgänglig",
+ "This will remove everything": "Detta kommer att ta bort allt",
+ "Turn Off": "Stäng av",
+ "Connectable": "Anslutningsbar",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "Platta batterier - detta kan ta flera timmar.\nTryck länge på knappen för att avbryta",
+ "Reset to Defaults": "Återställ till standardvärden",
+ "Utilities": "Verktyg",
+ "Flatten Battery": "Platta batterier",
+ "Debug Info": "Info om felsökning",
+ "Reset Settings": "Återställa inställningar",
+ "Wake on Twist": "Väckning på Twist",
+ "Compact Storage": "Kompakt förvaring",
+ "Log": "Logg",
+ "Rewrite Settings": "Omskrivning av inställningar",
+ "Compacting...\nTakes approx\n1 minute": "Komprimering...\nTar ca.\n1 minut",
+ "Storage": "Lagring",
+ "Second": "Andra",
+ "App Settings": "App-inställningar",
+ "Invalid settings": "Ogiltiga inställningar",
+ "Minute": "Protokoll",
+ "Sleep Phase Alarm": "Larm om sömnfas",
+ "No app has settings": "Ingen app har inställningar",
+ "Hour": "Timme",
+ "No Clocks Found": "Inga klockor hittades",
+ "Date": "Datum",
+ "Month": "Månad",
+ "Alarm": "Larm",
+ "Reset": "Återställ",
+ "Reset all widgets": "Återställ alla widgetar",
+ "TIMER": "TIMER",
+ "on": "på",
+ "OFF": "OFF",
+ "Side": "Sidan",
+ "Sort Order": "Sortering",
+ "Left": "Vänster",
+ "Right": "Höger",
+ "Reset All": "Återställ alla",
+ "Widgets": "Widgets",
+ "goal": "mål",
+ "Vibrate": "Vibrera",
+ "Message": "Meddelande",
+ "Beep": "Piper",
+ "Disable": "Inaktivera",
+ "Select Clock": "Välj klocka",
+ "Locale": "Lokalisering",
+ "Alerts": "Varningar",
+ "System": "System",
+ "Set Time": "Ställ in tid",
+ "Factory Reset": "Fabriksåterställning",
+ "Messages": "Meddelanden",
+ "Timer": "Timer",
+ "BACK": "TILLBAKA",
+ "Error in settings": "Fel i inställningarna",
+ "Whitelist": "Whitelist",
+ "ALARM": "ALARM",
+ "Hide": "Dölj",
+ "Connected": "Ansluten",
+ "Show": "Visa",
+ "On": "På",
+ "Ok": "Ok",
+ "No": "Ingen",
+ "Settings": "Inställningar",
+ "steps": "steg",
+ "back": "tillbaka",
+ "Steps": "Steg",
+ "Year": "År",
+ "Yes": "Ja",
+ "Loading": "Laddar",
+ "Music": "Musik",
+ "color": "färg",
+ "off": "off",
+ "Off": "Av",
+ "Theme": "Tema"
+ },
+ "alarm": {
+ "//": "App-specific overrides",
+ "rpt": "uppr."
+ }
+}
\ No newline at end of file
diff --git a/lang/tr_TR.json b/lang/tr_TR.json
index c59bc7d6b..e153253df 100644
--- a/lang/tr_TR.json
+++ b/lang/tr_TR.json
@@ -1,21 +1,21 @@
{
- "//":"Turkish language translations",
- "GLOBAL": {
- "//":"Translations that apply for all apps",
- "Alarms" : "Alarmlar",
- "Hours" : "Saat",
- "Minutes" : "Dakika",
- "Enabled" : "Etkinleştirildi",
- "New Alarm" : "Yeni alarm",
- "Save" : "Sakla",
- "Back" : "Geriye",
- "Repeat" : "Yineleme",
- "Delete" : "Sil",
- "ALARM!" : "ALARM!",
- "Sleep" : "Uyku"
- },
- "alarm": {
- "//":"App-specific overrides",
- "rpt" : "yineleme"
- }
-}
+ "//": "Turkish language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "Alarms": "Alarmlar",
+ "Hours": "Saat",
+ "Minutes": "Dakika",
+ "Enabled": "Etkinleştirildi",
+ "New Alarm": "Yeni alarm",
+ "Save": "Sakla",
+ "Back": "Geriye",
+ "Repeat": "Yineleme",
+ "Delete": "Sil",
+ "ALARM!": "ALARM!",
+ "Sleep": "Uyku"
+ },
+ "alarm": {
+ "//": "App-specific overrides",
+ "rpt": "yineleme"
+ }
+}
\ No newline at end of file
diff --git a/lang/unicode-based/ja_JA.json b/lang/unicode-based/ja_JA.json
new file mode 100644
index 000000000..2852fd9e3
--- /dev/null
+++ b/lang/unicode-based/ja_JA.json
@@ -0,0 +1,167 @@
+{
+ "//": "Japanese language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "New Alarm": "新型アラーム",
+ "New Timer": "新型タイマー",
+ "Save": "保存",
+ "Keep Msgs": "Keep Msgs",
+ "circle count": "サークルカウント",
+ "(repeat)": "(繰り返し)",
+ "music": "音楽",
+ "Auto snooze": "オートスヌーズ",
+ "week": "ウィーク",
+ "circle 1": "サークル1",
+ "circle 3": "サークル3",
+ "circle 2": "サークル2",
+ "show widgets": "show widgets",
+ "heartrate": "心拍数",
+ "circle 4": "サークル4",
+ "battery warn": "バッテリー警告",
+ "valid period": "有効期間",
+ "maximum": "最大",
+ "weather circle": "ウェザーサークル",
+ "minimum": "ミニマム",
+ "step length": "ステップ長",
+ "distance goal": "距離目標",
+ "Circle": "サークル",
+ "min. confidence": "最低限の自信",
+ "colorize icon": "カラライズアイコン",
+ "Heartrate": "心拍数",
+ "data": "データ",
+ "Yes\ndefinitely": "はい。\n間違いなく",
+ "Launcher Settings": "ランチャー設定",
+ "TAP right top/bottom": "TAP右上/左下",
+ "Font": "フォント",
+ "Mark Unread": "マーク・アンリード",
+ "start&lap/reset, BTN1: EXIT": "スタート&ラップ&リセット、BTN1:EXIT",
+ "App Source\nNot found": "アプリソース\n見つからない",
+ "Show clocks": "時計の表示",
+ "STEPS": "ステップ",
+ "Vector font size": "ベクターのフォントサイズ",
+ "View Message": "メッセージを見る",
+ "Are you sure": "本当にいいの?",
+ "Bluetooth": "ブルートゥース",
+ "Unread timer": "未読のタイマー",
+ "Delete all messages": "すべてのメッセージの削除",
+ "No Messages": "メッセージなし",
+ "Record Run": "レコード・ラン",
+ "Apps": "アプリ",
+ "BTNs 1:startlap 2:exit 3:reset": "BTNs 1:startlap 2:exit 3:reset",
+ "Delete All Messages": "全メッセージの削除",
+ "Vibration": "振動",
+ "Utils": "ユーティライゼーション",
+ "Piezo": "ピエゾ",
+ "BLE": "BLE",
+ "Make Connectable": "接続可能にする",
+ "HID": "HID",
+ "Light BW": "ライトBW",
+ "LCD": "LCD",
+ "Background": "背景",
+ "Foreground": "フォアグラウンド",
+ "Programmable": "プログラム可能",
+ "Customize": "カスタマイズ",
+ "Dark BW": "ダークBW",
+ "Background 2": "背景2",
+ "Quiet Mode": "クワイエットモード",
+ "Highlight FG": "ハイライトFG",
+ "Foreground 2": "フォアグラウンド2",
+ "Remove": "削除",
+ "Passkey BETA": "Passkey BETA",
+ "Add Device": "デバイスの追加",
+ "LCD Timeout": "LCDタイムアウト",
+ "Highlight BG": "ハイライトBG",
+ "LCD Brightness": "液晶ディスプレイの明るさ",
+ "Connect device\nto add to\nwhitelist": "接続機器\nに追加します。\nホワイトリスト",
+ "Wake on BTN3": "Wake on BTN3",
+ "Wake on BTN2": "Wake on BTN2",
+ "Time Zone": "タイムゾーン",
+ "Wake on Touch": "ウェイクオンタッチ",
+ "Twist Timeout": "ツイストタイムアウト",
+ "Wake on Twist": "ウェイクオンツイスト",
+ "Wake on BTN1": "Wake on BTN1",
+ "Log": "ログ",
+ "Wake on FaceUp": "Wake on FaceUp",
+ "Twist Max Y": "ツイストマックスY",
+ "Utilities": "ユーティリティー",
+ "Clock Style": "クロックスタイル",
+ "Rewrite Settings": "リライト設定",
+ "Flatten Battery": "バッテリーを平らにする",
+ "Debug Info": "デバッグ情報",
+ "Storage": "ストレージ",
+ "Reset Settings": "設定のリセット",
+ "Twist Threshold": "ツイスト・スレッショルド",
+ "Turn Off": "電源オフ",
+ "Compact Storage": "コンパクトなストレージ",
+ "Reset to Defaults": "初期設定へのリセット",
+ "Second": "セカンド",
+ "Compacting...\nTakes approx\n1 minute": "コンパクトにして...。\n所要時間約\n1分",
+ "Date": "日付",
+ "Minute": "分",
+ "Connectable": "接続可能",
+ "Stay Connectable": "Stay Connectable",
+ "Hour": "時間",
+ "No Clocks Found": "No Clock Found",
+ "App Settings": "アプリの設定",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "バッテリーのフラット化 - これには数時間かかります。\nボタンの長押しでキャンセル",
+ "Month": "月",
+ "OFF": "OFF",
+ "Right": "右",
+ "Widgets": "ウィジェット",
+ "Left": "左",
+ "Sort Order": "並び替え",
+ "Side": "サイド",
+ "No app has settings": "設定のないアプリ",
+ "Sleep Phase Alarm": "スリープフェーズアラーム",
+ "Invalid settings": "無効な設定",
+ "TIMER": "TIMER",
+ "Reset All": "すべてをリセット",
+ "This will remove everything": "これにより、すべてのものが削除されます。",
+ "Alarm": "アラーム",
+ "on": "で",
+ "Minutes": "分",
+ "Reset all widgets": "全ウィジェットのリセット",
+ "Hours": "時間",
+ "Enabled": "有効",
+ "Repeat": "リピート",
+ "Delete": "削除",
+ "Reset": "リセット",
+ "goal": "ゴール",
+ "Beep": "ビープ",
+ "Message": "メッセージ",
+ "System": "システム",
+ "Select Clock": "セレクトクロック",
+ "Locale": "ロケール",
+ "Vibrate": "振動",
+ "Alerts": "アラート",
+ "Whitelist": "ホワイトリスト",
+ "Set Time": "セット時間",
+ "Disable": "Disable",
+ "BACK": "BACK",
+ "ALARM": "ALARM",
+ "Timer": "タイマー",
+ "Error in settings": "設定のエラー",
+ "Factory Reset": "ファクトリーリセット",
+ "Sleep": "睡眠",
+ "Connected": "コネクテッド",
+ "Messages": "メッセージ",
+ "Hide": "隠す",
+ "Show": "ショー",
+ "On": "オン",
+ "Ok": "OK",
+ "No": "いいえ",
+ "Settings": "設定",
+ "steps": "ステップ",
+ "back": "バック",
+ "Steps": "ステップ",
+ "Year": "年",
+ "Yes": "はい。",
+ "Loading": "ローディング",
+ "Music": "音楽",
+ "color": "カラー",
+ "off": "オフ",
+ "Off": "オフ",
+ "Theme": "テーマ",
+ "Back": "バック"
+ }
+}
\ No newline at end of file
diff --git a/lang/unicode-based/zh_ZH.json b/lang/unicode-based/zh_ZH.json
new file mode 100644
index 000000000..4ff134b04
--- /dev/null
+++ b/lang/unicode-based/zh_ZH.json
@@ -0,0 +1,167 @@
+{
+ "//": "Chinese language translations",
+ "GLOBAL": {
+ "//": "Translations that apply for all apps",
+ "music": "音乐",
+ "distance goal": "距离目标",
+ "Save": "拯救",
+ "circle 3": "第3圈",
+ "Show clocks": "显示时钟",
+ "data": "数据",
+ "battery warn": "电池警告",
+ "heartrate": "心率",
+ "circle 2": "第2圈",
+ "circle 1": "第1圈",
+ "STEPS": "步骤",
+ "step length": "步长",
+ "New Timer": "新的计时器",
+ "colorize icon": "给图标着色",
+ "Auto snooze": "自动休眠",
+ "maximum": "最大限度",
+ "View Message": "查看留言",
+ "show widgets": "显示小工具",
+ "weather circle": "气象圈",
+ "Delete all messages": "删除所有信息",
+ "Launcher Settings": "启动器设置",
+ "Circle": "圆圈",
+ "No Messages": "没有消息",
+ "min. confidence": "最低限度的信心",
+ "circle count": "圈数",
+ "Keep Msgs": "保持信息畅通",
+ "(repeat)": "(重复)",
+ "App Source\nNot found": "应用程序来源\n未找到",
+ "Mark Unread": "标记未读",
+ "week": "周",
+ "Delete All Messages": "删除所有信息",
+ "New Alarm": "新警报",
+ "minimum": "最低限度",
+ "Heartrate": "心率",
+ "circle 4": "第4圈",
+ "Font": "字体",
+ "Vector font size": "矢量字体大小",
+ "Bluetooth": "蓝牙",
+ "Record Run": "记录运行",
+ "Are you sure": "你确定吗?",
+ "Unread timer": "未读计时器",
+ "Apps": "应用",
+ "start&lap/reset, BTN1: EXIT": "开始&lap/复位,BTN1:EXIT",
+ "TAP right top/bottom": "右侧顶部/底部的TAP",
+ "Yes\ndefinitely": "是的\n绝对",
+ "valid period": "有效期限",
+ "Utils": "充分利用",
+ "Customize": "定制",
+ "Quiet Mode": "静音模式",
+ "LCD": "液晶显示器",
+ "Programmable": "可编程",
+ "Light BW": "轻型BW",
+ "Vibration": "震动",
+ "Passkey BETA": "通行证 BETA",
+ "Make Connectable": "使之成为可连接的",
+ "Background 2": "背景2",
+ "Background": "背景介绍",
+ "HID": "氙气灯",
+ "Remove": "移除",
+ "Add Device": "添加设备",
+ "Highlight FG": "亮点FG",
+ "BTNs 1:startlap 2:exit 3:reset": "BTNs 1:startlap 2:exit 3:reset",
+ "Highlight BG": "突出显示BG",
+ "Dark BW": "深色BW",
+ "Foreground 2": "前景2",
+ "Piezo": "压电式",
+ "Connect device\nto add to\nwhitelist": "连接设备\n来添加到\n白名单",
+ "LCD Brightness": "液晶显示器的亮度",
+ "LCD Timeout": "LCD超时",
+ "Wake on FaceUp": "在FaceUp上唤醒",
+ "Twist Timeout": "扭曲超时",
+ "Wake on BTN1": "在BTN1上唤醒",
+ "Wake on Twist": "在扭曲中醒来",
+ "Wake on Touch": "触摸时唤醒",
+ "Utilities": "公用事业",
+ "Twist Max Y": "扭转最大Y",
+ "Time Zone": "时区",
+ "Log": "纪录",
+ "Twist Threshold": "扭曲阈值",
+ "Wake on BTN3": "唤醒BTN3网站",
+ "Wake on BTN2": "在BTN2上唤醒",
+ "Debug Info": "调试信息",
+ "BLE": "BLE",
+ "Compact Storage": "紧凑型存储",
+ "Storage": "储存",
+ "Compacting...\nTakes approx\n1 minute": "压实...\n需要大约\n1分钟",
+ "Reset Settings": "重置设置",
+ "Clock Style": "钟表风格",
+ "Rewrite Settings": "重写设置",
+ "Flatten Battery": "扁平化电池",
+ "Foreground": "前景",
+ "Hour": "一小时",
+ "Reset to Defaults": "重置为默认值",
+ "Turn Off": "关掉",
+ "Connectable": "可连接",
+ "Stay Connectable": "保持联系",
+ "Minute": "分钟",
+ "Month": "月份",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "压扁电池 - 这可能需要几个小时。\n长按按钮可取消",
+ "Second": "第二次",
+ "This will remove everything": "这将删除一切",
+ "App Settings": "应用程序设置",
+ "Side": "侧面",
+ "No Clocks Found": "没有发现时钟",
+ "OFF": "关闭",
+ "Widgets": "小工具",
+ "Invalid settings": "无效的设置",
+ "Right": "对",
+ "No app has settings": "没有应用程序有设置",
+ "Left": "左边",
+ "Sleep Phase Alarm": "睡眠阶段报警",
+ "Sort Order": "排序顺序",
+ "Date": "日期",
+ "Reset all widgets": "重置所有小工具",
+ "on": "关于",
+ "Reset All": "全部重设",
+ "TIMER": "计时器",
+ "Hours": "小时",
+ "Alarm": "警报",
+ "Repeat": "重复进行",
+ "Reset": "复位",
+ "Minutes": "会议记录",
+ "Enabled": "已启用",
+ "goal": "目标",
+ "Beep": "哔哔声",
+ "Vibrate": "震动",
+ "Delete": "删除",
+ "Locale": "地区",
+ "System": "系统",
+ "Disable": "禁用",
+ "Select Clock": "选择时钟",
+ "Set Time": "设置时间",
+ "Alerts": "警报",
+ "Whitelist": "白名单",
+ "Error in settings": "设置中的错误",
+ "Factory Reset": "工厂重置",
+ "BACK": "返回",
+ "Timer": "计时器",
+ "Sleep": "睡眠",
+ "Messages": "留言",
+ "Hide": "隐藏",
+ "Connected": "已连接",
+ "ALARM": "警报",
+ "On": "在",
+ "Show": "显示",
+ "Ok": "好的",
+ "Message": "留言",
+ "steps": "步骤",
+ "No": "没有",
+ "Settings": "设置",
+ "back": "背面",
+ "Year": "年",
+ "Steps": "阶梯",
+ "Yes": "是",
+ "Loading": "负载",
+ "Music": "音乐",
+ "color": "颜色",
+ "off": "关闭",
+ "Off": "关闭",
+ "Theme": "主题",
+ "Back": "溯源"
+ }
+}
\ No newline at end of file
diff --git a/loader.js b/loader.js
index c6840cbb0..6b27736ae 100644
--- a/loader.js
+++ b/loader.js
@@ -179,6 +179,7 @@ window.addEventListener('load', (event) => {
} catch(e) {
console.error("lang/index.json Corrupted", e);
}
+ languages = languages.filter( l=> l.disabled===undefined );
function reloadLanguage() {
LANGUAGE = undefined;