merge upstream
17
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.
|
||||
|
||||
```
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
0.01: initial release
|
||||
1.00: first official release (also fixes bug in Customizer)
|
|
@ -321,7 +321,7 @@
|
|||
|
||||
function chosenClockHands () {
|
||||
switch (ClockHands) {
|
||||
case 'simple': return "require('https://raw.githubusercontent.com/rozek/banglejs-2-simpled-clock-hands/main/ClockHands.js')"
|
||||
case 'simple': return "require('https://raw.githubusercontent.com/rozek/banglejs-2-simple-clock-hands/main/ClockHands.js')"
|
||||
case 'rounded': return "require('https://raw.githubusercontent.com/rozek/banglejs-2-rounded-clock-hands/main/ClockHands.js')"
|
||||
case 'hollow': return "require('https://raw.githubusercontent.com/rozek/banglejs-2-hollow-clock-hands/main/ClockHands.js')"
|
||||
case 'custom': return "require('" + ClockHandsURL + "')"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{ "id": "ac_ac",
|
||||
"name": "A Configurable Analog Clock",
|
||||
"shortName":"Configurable Clock",
|
||||
"version":"0.03",
|
||||
"version":"1.00",
|
||||
"description": "AC-AC, a highly customizable analog clock with several clock faces, hands and complications to choose from",
|
||||
"icon": "app-icon.png",
|
||||
"type": "clock",
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
0.01: Display pressure as number and hand
|
||||
0.02: Use theme color
|
||||
|
|
|
@ -1,77 +1,77 @@
|
|||
const center = {
|
||||
var center = {
|
||||
x: g.getWidth()/2,
|
||||
y: g.getHeight()/2,
|
||||
};
|
||||
|
||||
const MIN = 940;
|
||||
const MAX = 1090;
|
||||
const NUMBER_OF_VALUES = MAX - MIN;
|
||||
const SCALE_TICK_STEP = 5;
|
||||
const SCALE_VALUES_STEP = 25;
|
||||
const NUMBER_OF_LABELS = NUMBER_OF_VALUES / SCALE_VALUES_STEP;
|
||||
const NUMBER_OF_TICKS = NUMBER_OF_VALUES / SCALE_TICK_STEP;
|
||||
const ZERO_OFFSET = (Math.PI / 4) * 3;
|
||||
const SCALE_SPAN = (Math.PI / 2) * 3;
|
||||
const TICK_LENGTH = 10;
|
||||
const HAND_LENGTH = 45;
|
||||
const HAND_WIDTH = 5;
|
||||
var MIN = 940;
|
||||
var MAX = 1090;
|
||||
var NUMBER_OF_VALUES = MAX - MIN;
|
||||
var SCALE_TICK_STEP = 5;
|
||||
var SCALE_VALUES_STEP = 25;
|
||||
var NUMBER_OF_LABELS = NUMBER_OF_VALUES / SCALE_VALUES_STEP;
|
||||
var NUMBER_OF_TICKS = NUMBER_OF_VALUES / SCALE_TICK_STEP;
|
||||
var ZERO_OFFSET = (Math.PI / 4) * 3;
|
||||
var SCALE_SPAN = (Math.PI / 2) * 3;
|
||||
var TICK_LENGTH = 10;
|
||||
var HAND_LENGTH = 45;
|
||||
var HAND_WIDTH = 5;
|
||||
|
||||
function generatePoly(radius, width, angle){
|
||||
const x = center.x + Math.cos(angle) * radius;
|
||||
const y = center.y + Math.sin(angle) * radius;
|
||||
const d = {
|
||||
var x = center.x + Math.cos(angle) * radius;
|
||||
var y = center.y + Math.sin(angle) * radius;
|
||||
var d = {
|
||||
x: width/2 * Math.cos(angle + Math.PI/2),
|
||||
y: width/2 * Math.sin(angle + Math.PI/2),
|
||||
};
|
||||
|
||||
const poly = [center.x - d.x, center.y - d.y, center.x + d.x, center.y + d.y, x + d.x, y + d.y, x - d.x, y - d.y];
|
||||
var poly = [center.x - d.x, center.y - d.y, center.x + d.x, center.y + d.y, x + d.x, y + d.y, x - d.x, y - d.y];
|
||||
|
||||
return poly;
|
||||
}
|
||||
|
||||
function drawHand(value){
|
||||
g.setColor(256, 0, 0);
|
||||
g.setColor(g.theme.fg2);
|
||||
|
||||
g.setFontAlign(0,0);
|
||||
g.setFont("Vector",15);
|
||||
g.drawString(value, center.x, center.y * 2 - 15, true);
|
||||
|
||||
const angle = SCALE_SPAN / NUMBER_OF_VALUES * (value - MIN) + ZERO_OFFSET;
|
||||
var angle = SCALE_SPAN / NUMBER_OF_VALUES * (value - MIN) + ZERO_OFFSET;
|
||||
g.fillPoly(generatePoly(HAND_LENGTH, HAND_WIDTH, angle), true);
|
||||
g.fillCircle(center.x ,center.y, 4);
|
||||
}
|
||||
|
||||
|
||||
function drawTicks(){
|
||||
g.setColor(1,1,1);
|
||||
g.setColor(g.theme.fg);
|
||||
for(let i= 0; i <= NUMBER_OF_TICKS; i++){
|
||||
const angle = (i * (SCALE_SPAN/NUMBER_OF_TICKS)) + ZERO_OFFSET;
|
||||
var angle = (i * (SCALE_SPAN/NUMBER_OF_TICKS)) + ZERO_OFFSET;
|
||||
|
||||
const tickWidth = i%5==0 ? 5 : 2;
|
||||
var tickWidth = i%5==0 ? 5 : 2;
|
||||
g.fillPoly(generatePoly(center.x, tickWidth, angle), true);
|
||||
}
|
||||
|
||||
g.setColor(0,0,0);
|
||||
g.setColor(g.theme.bg);
|
||||
g.fillCircle(center.x,center.y,center.x - TICK_LENGTH);
|
||||
}
|
||||
|
||||
|
||||
function drawScaleLabels(){
|
||||
g.setColor(1,1,1);
|
||||
g.setColor(g.theme.fg);
|
||||
g.setFont("Vector",12);
|
||||
|
||||
let label = MIN;
|
||||
for (let i=0;i <= NUMBER_OF_LABELS; i++){
|
||||
const angle = (i * (SCALE_SPAN/NUMBER_OF_LABELS)) + ZERO_OFFSET;
|
||||
const labelDimensions = g.stringMetrics(label);
|
||||
var angle = (i * (SCALE_SPAN/NUMBER_OF_LABELS)) + ZERO_OFFSET;
|
||||
var labelDimensions = g.stringMetrics(label);
|
||||
|
||||
const LABEL_PADDING = 5;
|
||||
const radius = center.x - TICK_LENGTH - LABEL_PADDING;
|
||||
const x = center.x + Math.cos(angle) * radius;
|
||||
const y = center.y + Math.sin(angle) * radius;
|
||||
var LABEL_PADDING = 5;
|
||||
var radius = center.x - TICK_LENGTH - LABEL_PADDING;
|
||||
var x = center.x + Math.cos(angle) * radius;
|
||||
var y = center.y + Math.sin(angle) * radius;
|
||||
|
||||
const visualX = x > center.x ? x - labelDimensions.width : x + labelDimensions.width > center.x ? x - (labelDimensions.width / 2) : x;
|
||||
const visualY = y >= center.y - labelDimensions.height / 2 ? y - labelDimensions.height / 2 : y;
|
||||
var visualX = x > center.x ? x - labelDimensions.width : x + labelDimensions.width > center.x ? x - (labelDimensions.width / 2) : x;
|
||||
var visualY = y >= center.y - labelDimensions.height / 2 ? y - labelDimensions.height / 2 : y;
|
||||
|
||||
g.drawString(label, visualX, visualY);
|
||||
|
||||
|
@ -80,29 +80,29 @@ function drawScaleLabels(){
|
|||
}
|
||||
|
||||
function drawIcons() {
|
||||
const sunIcon = {
|
||||
width : 24, height : 24, bpp : 4,
|
||||
var sunIcon = {
|
||||
width : 24, height : 24, bpp : 1,
|
||||
transparent : 0,
|
||||
buffer : require("heatshrink").decompress(atob("AAkP+ALeA40PAYf/BYv/CYYLBBwIICCQ4ACHI4ICEIgkEAg48GDApcFAoYPBBY5NDBZIjLHZpTLNZiDKTZSzMZZT7iA="))
|
||||
buffer : require("heatshrink").decompress(atob("gEYAQ0IgEQjkAnEMv0wgH/gEB4eAgcA4EHgHgg0AsHmgFnAQQICBwQUCDQQgCEwQsCGQQ+IA"))
|
||||
};
|
||||
g.drawImage(sunIcon, center.x + 15, center.y - 12);
|
||||
|
||||
const sunRainIcon = {
|
||||
width : 24, height : 24, bpp : 4,
|
||||
var sunRainIcon = {
|
||||
width : 24, height : 24, bpp : 1,
|
||||
transparent : 0,
|
||||
buffer : require("heatshrink").decompress(atob("AB/wBbEPBAoGEDI/wh4jJBQIMJEgUP///IpAJCBgf/+ALCAQRJFAoIHECgI7FIYwSEHAoGBEQwsEDIJdHCYYLLFwwTEQQwGFQQQACYpYpLf0AAEA"))
|
||||
buffer : require("heatshrink").decompress(atob("AAeAAQmEgEQhEAhIIBg1ggEEj8AhEw4HokFAglAnEGoEGgHAgcRgEBkQCBgQCBgcAgUBwARBv/4HAcgiAFDCoIAC"))
|
||||
};
|
||||
g.drawImage(sunRainIcon, center.x - 12, 30);
|
||||
|
||||
const rainIcon = {
|
||||
width : 24, height : 24, bpp : 4,
|
||||
var rainIcon = {
|
||||
width : 24, height : 24, bpp : 1,
|
||||
transparent : 0,
|
||||
buffer : require("heatshrink").decompress(atob("ADnwBRP/AIQAGh4ZKA4YLLh//EwoTFh4GCCIIfGDAQ5DIQ5bIBbQvII4gAGWLwzBOoarLCw4RKLBAAgA"))
|
||||
buffer : require("heatshrink").decompress(atob("AA0gAQPMgEBgUAgQCCgPwAgMYj0AhkQgEECwICGBYMIj//+ArFgURwAqBB4NEgEQghAJ"))
|
||||
};
|
||||
g.drawImage(rainIcon, center.x - 44, center.y - 12);
|
||||
}
|
||||
|
||||
g.setBgColor(0,0,0);
|
||||
g.setBgColor(g.theme.bg);
|
||||
g.clear();
|
||||
|
||||
drawTicks();
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{ "id": "barometer",
|
||||
"name": "Barometer",
|
||||
"shortName":"Barometer",
|
||||
"version":"0.01",
|
||||
"version":"0.02",
|
||||
"description": "A simple barometer that displays the current air pressure",
|
||||
"icon": "barometer.png",
|
||||
"tags": "tool,outdoors",
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
0.01: New app
|
||||
0.20: Settings menu, different fonts, inverse fonts
|
||||
0.21: Fixed settings menu, four more fonts
|
||||
0.22: Changed timing code, original "Nunito" Font is back!
|
||||
0.23: Customizer! Unused fonts no longer take up precious memory.
|
||||
|
|
|
@ -6,16 +6,6 @@ if (settings.fontIndex==undefined) {
|
|||
settings.fontIndex=0;
|
||||
require('Storage').writeJSON("myapp.json", settings);
|
||||
}
|
||||
require("FontTeletext10x18Ascii").add(Graphics);
|
||||
|
||||
function queueDraw() {
|
||||
if (drawTimeout) clearTimeout(drawTimeout);
|
||||
drawTimeout = setTimeout(function() {
|
||||
drawTimeout = undefined;
|
||||
draw();
|
||||
queueDraw();
|
||||
}, 60000 - (Date.now() % 60000));
|
||||
}
|
||||
|
||||
function draw() {
|
||||
var date = new Date();
|
||||
|
@ -28,9 +18,12 @@ function draw() {
|
|||
require('contourclock').drawClock(settings.fontIndex);
|
||||
}
|
||||
|
||||
require("FontTeletext10x18Ascii").add(Graphics);
|
||||
Bangle.setUI("clock");
|
||||
g.clear();
|
||||
Bangle.loadWidgets();
|
||||
Bangle.drawWidgets();
|
||||
draw();
|
||||
queueDraw();
|
||||
setTimeout(function() {
|
||||
setInterval(draw,60000);
|
||||
}, 60000 - Date.now() % 60000);
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
<html>
|
||||
<head>
|
||||
<link rel="stylesheet" href="../../css/spectre.min.css">
|
||||
</head>
|
||||
<body>
|
||||
<form>
|
||||
<input type="checkbox" id="BarlowCond">
|
||||
<label for="BarlowCond">Barlow Condensed</label><br>
|
||||
<input type="checkbox" id="BebasNeue">
|
||||
<label for="BebasNeue">Bebas Neue</label><br>
|
||||
<input type="checkbox" id="Dekko">
|
||||
<label for="Dekko">Dekko</label><br>
|
||||
<input type="checkbox" id="DinAlternate">
|
||||
<label for="DinAlternate">Din Alternate</label><br>
|
||||
<input type="checkbox" id="Dosis">
|
||||
<label for="Dosis">Dosis</label><br>
|
||||
<input type="checkbox" id="Impact">
|
||||
<label for="Impact">Impact</label><br>
|
||||
<input type="checkbox" id="Nunito">
|
||||
<label for="Nunito">Nunito</label><br>
|
||||
<input type="checkbox" id="OpenSansEC">
|
||||
<label for="OpenSansEC">Open Sans Extra Condensed</label><br>
|
||||
<input type="checkbox" id="Phosphate">
|
||||
<label for="Phosphate">Phosphate</label><br>
|
||||
<input type="checkbox" id="Quicksand">
|
||||
<label for="Quicksand">Quicksand</label><br>
|
||||
<input type="checkbox" id="SairaCond">
|
||||
<label for="SairaCond">Saira Condensed</label><br>
|
||||
<input type="checkbox" id="SairaEC">
|
||||
<label for="SairaEC">Saira Extra Condensed</label><br>
|
||||
<input type="checkbox" id="Teko">
|
||||
<label for="Teko">Teko</label><br>
|
||||
<input type="checkbox" id="Yumaro">
|
||||
<label for="Yumaro">Yumaro</label><br>
|
||||
<input type="checkbox" id="YuseiMagic">
|
||||
<label for="YuseiMagic">Yusei Magic</label><br>
|
||||
<p>Click <button id="upload" class="btn btn-primary">Upload</button></p>
|
||||
<script src="../../core/lib/customize.js"></script>
|
||||
<script>
|
||||
FontList = ["BarlowCond", "BebasNeue", "Dekko", "DinAlternate", "Dosis",
|
||||
"Impact", "Nunito", "OpenSansEC", "Phosphate", "Quicksand", "SairaCond", "SairaEC",
|
||||
"Yumaro", "YuseiMagic"]
|
||||
// When the 'upload' button is clicked...
|
||||
document.getElementById("upload").addEventListener("click", function() {
|
||||
var n=0;
|
||||
var fonts = [];
|
||||
for (fontName of FontList) {
|
||||
if (document.getElementById(fontName).checked==true) {
|
||||
var f = new Object();
|
||||
f.name="contourclock-"+n+".json";
|
||||
f.url="font-"+fontName+".json";
|
||||
//fonts.push({name:"contourclock-"+n+".json", url:"font-"+fontName+".json"});
|
||||
fonts.push(f);
|
||||
//console.log("contourclock-"+n+".json <- font-"+fontName+".json");
|
||||
n++;
|
||||
}
|
||||
}
|
||||
//console.log(fonts[0]);
|
||||
sendCustomizedApp(storage=fonts);
|
||||
/*sendCustomizedApp({
|
||||
storage:[
|
||||
{name:"myapp.app.js", url:"app.js", content:app},
|
||||
]
|
||||
});*/
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"name":"Nunito",
|
||||
"size":"80",
|
||||
"characters":[
|
||||
{"width" : "62", "buffer":"VVVVVVV//////9VVVVVVVVVVVVX////////1VVVVVVVVVVX/wAAAAAA/9VVVVVVVVVV/AAAAAAAAD/VVVVVVVVV/AAAAAAAAAA/VVVVVVVVfwAAAAAAAAAAP1VVVVVVXwAAAAAAAAAAAP1VVVVVV8AAAAAAAAAAAAD1VVVVVfAAAAAAAAAAAAAPVVVVVXwAAAAAAAAAAAAAPVVVVV8AAAAAAAAAAAAAAPVVVVXwAAAAAAAAAAAAAAPVVVV8AAAAAAAAAAAAAAA9VVVXwAAAAAAAAAAAAAAA9VVV8AAAAAAAAAAAAAAAD1VVXwAAAAAAAAAAAAAAAD1VV8AAAAAAAAAAAAAAAAPVVXwAAAAAAA/8AAAAAAAPVV8AAAAAAA//8AAAAAAA9VXwAAAAAAP1V8AAAAAAD1VfAAAAAAD1VV8AAAAAAD1XwAAAAAA9VVV8AAAAAAPVfAAAAAAD1VVV8AAAAAA9V8AAAAAA9VVVXwAAAAAD1XwAAAAAD1VVVfAAAAAAD18AAAAAAPVVVVfAAAAAAPXwAAAAAD1VVVV8AAAAAA9fAAAAAAPVVVVXwAAAAAD18AAAAAA9VVVVfAAAAAAPXwAAAAAD1VVVV8AAAAAAPfAAAAAAPVVVVXwAAAAAA98AAAAAA9VVVVXwAAAAAD/AAAAAAD1VVVVfAAAAAAP8AAAAAAPVVVVV8AAAAAA/wAAAAAA9VVVVXwAAAAAD/AAAAAAD1VVVVfAAAAAAP8AAAAAA9VVVVV8AAAAAA/wAAAAAD1VVVVXwAAAAAD/AAAAAAPVVVVVfAAAAAAP8AAAAAA9VVVVV8AAAAAA/wAAAAAD1VVVVXwAAAAAD/AAAAAAPVVVVVfAAAAAAP8AAAAAA9VVVVV8AAAAAA/wAAAAAA9VVVVXwAAAAAD/AAAAAAD1VVVVfAAAAAAP8AAAAAAPVVVVV8AAAAAA/wAAAAAA9VVVVXwAAAAAD3wAAAAAD1VVVVfAAAAAAPfAAAAAAPVVVVXwAAAAAA98AAAAAA9VVVVfAAAAAAD3wAAAAAD1VVVV8AAAAAA9fAAAAAAPVVVVXwAAAAAD18AAAAAA9VVVVfAAAAAAPXwAAAAAA9VVVV8AAAAAA9XwAAAAAD1VVVfAAAAAAD1fAAAAAAPVVVV8AAAAAA9V8AAAAAAPVVVXwAAAAAD1XwAAAAAA9VVV8AAAAAAPVXwAAAAAA9VVXwAAAAAA9VfAAAAAAA9VV8AAAAAAPVV8AAAAAAA9V/AAAAAAA9VV8AAAAAAA//wAAAAAAD1VXwAAAAAAA/wAAAAAAA9VVXwAAAAAAAAAAAAAAAD1VVfAAAAAAAAAAAAAAAA9VVV8AAAAAAAAAAAAAAAD1VVV8AAAAAAAAAAAAAAA9VVVV8AAAAAAAAAAAAAAD1VVVXwAAAAAAAAAAAAAA9VVVVXwAAAAAAAAAAAAAPVVVVVXwAAAAAAAAAAAAA9VVVVVXwAAAAAAAAAAAAPVVVVVVfwAAAAAAAAAAAD1VVVVVVfwAAAAAAAAAAD9VVVVVVVXwAAAAAAAAAA/VVVVVVVVX8AAAAAAAAA/VVVVVVVVVX/AAAAAAAA/1VVVVVVVVVV/8AAAAAD/1VVVVVVVVVVVf///////1VVVVVVVVVVVVV//////VVVVVVVQ=="},
|
||||
{"width" : "61", "buffer":"VVVVVVVVf////VVVVVVVVVVVVVVV/////9VVVVVVVVVVVVVX/AAAAD1VVVVVVVVVVVVf8AAAAAPVVVVVVVVVVVVfwAAAAAA9VVVVVVVVVVV/AAAAAAAPVVVVVVVVVVX/AAAAAAAA9VVVVVVVVVX8AAAAAAAAPVVVVVVVVVfwAAAAAAAAD1VVVVVVVVfwAAAAAAAAA9VVVVVVVV/AAAAAAAAAAPVVVVVVVV/AAAAAAAAAAD1VVVVVVX8AAAAAAAAAAA9VVVVVVX8AAAAAAAAAAAPVVVVVVXwAAAAAAAAAAAD1VVVVVXwAAAAAAAAAAAA9VVVVVXwAAAAAAAAAAAAPVVVVVV8AAAAAAAAAAAAD1VVVVVfAAAAAAAAAAAAA9VVVVVfAAAAAAAAAAAAAPVVVVVXwAAAAAAAAAAAAD1VVVVV8AAAAAAAAAAAAA9VVVVVfAAAAAAAAAAAAAPVVVVVXwAAAAAAAAAAAAD1VVVVVfAAAAAAAAAAAAA9VVVVVXwAAAAAAAAAAAAPVVVVVVfAAAAPAAAAAAAD1VVVVVXwAAA/8AAAAAAA9VVVVVVfAAD/XwAAAAAAPVVVVVVV///9V8AAAAAAD1VVVVVVX//1VfAAAAAAA9VVVVVVVVVVVXwAAAAAAPVVVVVVVVVVVV8AAAAAAD1VVVVVVVVVVVfAAAAAAA9VVVVVVVVVVVXwAAAAAAPVVVVVVVVVVVV8AAAAAAD1VVVVVVVVVVVfAAAAAAA9VVVVVVVVVVVXwAAAAAAPVVVVVVVVVVVV8AAAAAAD1VVVVVVVVVVVfAAAAAAA9VVVVVVVVVVVXwAAAAAAPVVVVVVVVVVVV8AAAAAAD1VVVVVVVVVVVfAAAAAAA9VVVVVVVVVVVXwAAAAAAPVVVVVVVVVVVV8AAAAAAD1VVVVVVVVVVVfAAAAAAA9VVVVVVVVVVVXwAAAAAAPVVVVVVVVVVVV8AAAAAAD1VVVVVVVVVVVfAAAAAAA9VVVVVVVVVVVXwAAAAAAPVVVVVVVVVVVV8AAAAAAD1VVVVVVVVVVVfAAAAAAA9VVVVVVVVVVVXwAAAAAAPVVVVVVVVVVVV8AAAAAAD1VVVVVVVVVVVfAAAAAAA9VVVVVVVVVVVXwAAAAAAPVVVVVVVVVVVV8AAAAAAD1VVVVVVVVVVVfAAAAAAA9VVVVVVVVVVVXwAAAAAAPVVVVVVVVX///wAAAAAAA///9VVVV////wAAAAAAAD////VVX/wAAAAAAAAAAAAAAP9VX8AAAAAAAAAAAAAAAAD1V8AAAAAAAAAAAAAAAAAPV8AAAAAAAAAAAAAAAAAD1fAAAAAAAAAAAAAAAAAAPfAAAAAAAAAAAAAAAAAAD3wAAAAAAAAAAAAAAAAAA98AAAAAAAAAAAAAAAAAAPfAAAAAAAAAAAAAAAAAAD3wAAAAAAAAAAAAAAAAAA98AAAAAAAAAAAAAAAAAAPXwAAAAAAAAAAAAAAAAAD18AAAAAAAAAAAAAAAAAD1fAAAAAAAAAAAAAAAAAA9V8AAAAAAAAAAAAAAAAAPVXwAAAAAAAAAAAAAAAA/VVf/////////////////VVV////////////////9VVVVVVVVVVVVVVVVVVVVVU="},
|
||||
{"width" : "61", "buffer":"VVVVV////////1VVVVVVVVVVf/////////9VVVVVVVVX/8AAAAAAAA/9VVVVVVVf/AAAAAAAAAAP9VVVVVV/wAAAAAAAAAAAP1VVVVV/AAAAAAAAAAAAAP1VVVV8AAAAAAAAAAAAAA/VVVV8AAAAAAAAAAAAAAA9VVV8AAAAAAAAAAAAAAAD1VVfAAAAAAAAAAAAAAAA9VVXwAAAAAAAAAAAAAAAD1VXwAAAAAAAAAAAAAAAA9VV8AAAAAAAAAAAAAAAAD1VfAAAAAAAAAAAAAAAAA9VXwAAAAAAAAAAAAAAAAD1VfAAAAAAAAAAAAAAAAA9VXwAAAAAAAAAAAAAAAAPVV8AAAAAD/8AAAAAAAAD1VXwAAAD////AAAAAAAAPVVfAAA//1Vf8AAAAAAAD1VV/wP/1VVVXwAAAAAAA9VVX//9VVVVVfAAAAAAAPVVVV/VVVVVVV8AAAAAAD1VVVVVVVVVVVfAAAAAAA9VVVVVVVVVVVV8AAAAAAPVVVVVVVVVVVVfAAAAAAD1VVVVVVVVVVVXwAAAAAA9VVVVVVVVVVVV8AAAAAAPVVVVVVVVVVVV8AAAAAAPVVVVVVVVVVVVfAAAAAAD1VVVVVVVVVVVXwAAAAAA9VVVVVVVVVVVXwAAAAAAPVVVVVVVVVVVXwAAAAAAPVVVVVVVVVVVV8AAAAAAD1VVVVVVVVVVV8AAAAAAA9VVVVVVVVVVV8AAAAAAA9VVVVVVVVVVV8AAAAAAAPVVVVVVVVVVV8AAAAAAAPVVVVVVVVVVV8AAAAAAAD1VVVVVVVVVV8AAAAAAAD1VVVVVVVVVV8AAAAAAAA9VVVVVVVVVV8AAAAAAAA9VVVVVVVVVV8AAAAAAAA9VVVVVVVVVV8AAAAAAAA9VVVVVVVVVV8AAAAAAAAPVVVVVVVVVV8AAAAAAAAPVVVVVVVVVVfAAAAAAAAPVVVVVVVVVVfAAAAAAAAPVVVVVVVVVVfAAAAAAAAPVVVVVVVVVVfAAAAAAAAPVVVVVVVVVVfAAAAAAAAPVVVVVVVVVVfAAAAAAAAPVVVVVVVVVVfAAAAAAAAPVVVVVVVVVVfAAAAAAAAPVVVVVVVVVVfAAAAAAAAPVVVVVVVVVVfAAAAAAAAPVVVVVVVVVVfAAAAAAAAPVVVVVVVVVVfAAAAAAAAPVVVVVVVVVVfAAAAAAAAPVVVVVVVVVVfAAAAAAAAA//////1VVVXwAAAAAAAAD//////9VVXwAAAAAAAAAAAAAAA/9VXwAAAAAAAAAAAAAAAAP1V8AAAAAAAAAAAAAAAAA9VfAAAAAAAAAAAAAAAAAD1XwAAAAAAAAAAAAAAAAA9XwAAAAAAAAAAAAAAAAAD18AAAAAAAAAAAAAAAAAA9fAAAAAAAAAAAAAAAAAAPXwAAAAAAAAAAAAAAAAAD18AAAAAAAAAAAAAAAAAA9XwAAAAAAAAAAAAAAAAAPV8AAAAAAAAAAAAAAAAAPVfAAAAAAAAAAAAAAAAAD1XwAAAAAAAAAAAAAAAAA9VfAAAAAAAAAAAAAAAAA9VV/AAAAAAAAAAAAAAAD9VVX////////////////9VVVX///////////////1VVVVVVVVVVVVVVVVVVVVVU="},
|
||||
{"width" : "60", "buffer":"VVVVVf///////9VVVVVVVVVV//////////9VVVVVVVVf/wAAAAAAAD/1VVVVVVf/AAAAAAAAAAD/VVVVVX/wAAAAAAAAAAAP9VVVVfwAAAAAAAAAAAAA/VVVV8AAAAAAAAAAAAAAD1VVV8AAAAAAAAAAAAAAA9VVXwAAAAAAAAAAAAAAAPVVXwAAAAAAAAAAAAAAAD1VXwAAAAAAAAAAAAAAAD1VXwAAAAAAAAAAAAAAAA9VXwAAAAAAAAAAAAAAAA9VXwAAAAAAAAAAAAAAAAPVXwAAAAAAAAAAAAAAAAPVXwAAAAAAAAAAAAAAAAPVXwAAAAAAAAAAAAAAAAPVV8AAAAAD/8AAAAAAAAD1VfAAAA////8AAAAAAAD1VXwAA//9VX/AAAAAAAD1VV////VVVVXwAAAAAAD1VVf//VVVVVV8AAAAAAD1VVVVVVVVVVVfAAAAAAD1VVVVVVVVVVVfAAAAAAD1VVVVVVVVVVVfAAAAAAD1VVVVVVVVVVVfAAAAAAD1VVVVVVVVVVVfAAAAAAPVVVVVVVVVVVVfAAAAAAPVVVVVVVVVVVX8AAAAAAPVVVVVVVVVVV/wAAAAAA9VVVVVVVX///8AAAAAAA9VVVVVVX////AAAAAAAD1VVVVVVf8AAAAAAAAAAD1VVVVVV8AAAAAAAAAAAPVVVVVVXwAAAAAAAAAAD9VVVVVVXwAAAAAAAAAAP1VVVVVVfAAAAAAAAAAA9VVVVVVVfAAAAAAAAAAD1VVVVVVVfAAAAAAAAAAD1VVVVVVVfAAAAAAAAAAA/VVVVVVVfAAAAAAAAAAAP1VVVVVVfAAAAAAAAAAAA/VVVVVVfAAAAAAAAAAAAP1VVVVVXwAAAAAAAAAAAA9VVVVVXwAAAAAAAAAAAAPVVVVVV8AAAAAAAAAAAAPVVVVVVfwAAAAAAAAAAAD1VVVVVX////8AAAAAAAD1VVVVVVf////8AAAAAAA9VVVVVVVVVVX/AAAAAAA9VVVVVVVVVVVXwAAAAAA9VVVVVVVVVVVV8AAAAAAPVVVVVVVVVVVV8AAAAAAPVVVVVVVVVVVVfAAAAAAPVVVVVVVVVVVVfAAAAAAPVVVVVVVVVVVVfAAAAAAPVVVVVVVVVVVVfAAAAAAPVVX/1VVVVVVV8AAAAAAPVX///1VVVVVXwAAAAAAPVf8AP/1VVVV/AAAAAAAPV8AAAP//9f/8AAAAAAAPXwAAAAP////AAAAAAAAPXwAAAAAADwAAAAAAAAAPfAAAAAAAAAAAAAAAAAA9fAAAAAAAAAAAAAAAAAA9fAAAAAAAAAAAAAAAAAA98AAAAAAAAAAAAAAAAAD18AAAAAAAAAAAAAAAAAD18AAAAAAAAAAAAAAAAAPVfAAAAAAAAAAAAAAAAAPVfAAAAAAAAAAAAAAAAA9VfAAAAAAAAAAAAAAAAD1VXwAAAAAAAAAAAAAAAPVVV8AAAAAAAAAAAAAAD9VVVfAAAAAAAAAAAAAA/1VVVX/AAAAAAAAAAAAP9VVVVV//AAAAAAAAAAD/VVVVVVV//wAAAAAAAP/1VVVVVVVV//////////9VVVVVVVVVVf///////1VVVVVV"},
|
||||
{"width" : "65", "buffer":"VVVVVVVVVVVVf///1VVVVVVVVVVVVVVVVf////9VVVVVVVVVVVVVVVX8AAAD9VVVVVVVVVVVVVVV8AAAAA9VVVVVVVVVVVVVVfAAAAAD1VVVVVVVVVVVVVXwAAAAAD1VVVVVVVVVVVVV8AAAAAAPVVVVVVVVVVVVVfAAAAAAA9VVVVVVVVVVVVV8AAAAAAD1VVVVVVVVVVVVfAAAAAAAPVVVVVVVVVVVVXwAAAAAAA9VVVVVVVVVVVVfAAAAAAAD1VVVVVVVVVVVXwAAAAAAAD1VVVVVVVVVVV8AAAAAAAAPVVVVVVVVVVVXwAAAAAAAA9VVVVVVVVVVV8AAAAAAAAD1VVVVVVVVVVfAAAAAAAAAPVVVVVVVVVVV8AAAAAAAAA9VVVVVVVVVVfAAAAAAAAAD1VVVVVVVVVXwAAAAAAAAAPVVVVVVVVVV8AAAAAAAAAA9VVVVVVVVVXwAAAAAAAAAD1VVVVVVVVV8AAAAAAAAAAPVVVVVVVVVfAAAAAAAAAAA9VVVVVVVVV8AAAAAAAAAAD1VVVVVVVVfAAAAAAAAAAAPVVVVVVVVXwAAAAAAAAAAA9VVVVVVVVfAAAAAAAAAAAD1VVVVVVVXwAAAAAAAAAAAPVVVVVVVV8AAAAAAAAAAAA9VVVVVVVXwAAAAAAAAAAAD1VVVVVVV8AAAAAAAAAAAAPVVVVVVVfAAAAAAAAAAAAA9VVVVVVV8AAAAAwAAAAAAD1VVVVVVfAAAAAPwAAAAAAPVVVVVVXwAAAAD3wAAAAAA9VVVVVVfAAAAA9fAAAAAAD1VVVVVXwAAAAD18AAAAAAPVVVVVV8AAAAA9XwAAAAAA9VVVVVfAAAAAPVfAAAAAAD1VVVVV8AAAAA9V8AAAAAAPVVVVVfAAAAAPVXwAAAAAA9VVVVXwAAAAD1VfAAAAAAD1VVVVfAAAAAPVV8AAAAAAPVVVVXwAAAAD1VXwAAAAAA9VVVV8AAAAAPVVfAAAAAAD1VVVXwAAAAD1VV8AAAAAAPVVVV8AAAAA9VVXwAAAAAA9VVVXwAAAAD1VVfAAAAAAD1VVV8AAAAAD///wAAAAAAD/1VXwAAAAAD//8AAAAAAAD//VfAAAAAAAAAAAAAAAAAAD/XwAAAAAAAAAAAAAAAAAAAPfAAAAAAAAAAAAAAAAAAAA98AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAA98AAAAAAAAAAAAAAAAAAAD3wAAAAAAAAAAAAAAAAAAAPX8AAAAAAAAAAAAAAAAAAD1X/AAAAAAAAAAAAAAAAAD9VV////////8AAAAAAAD//VVVf///////8AAAAAAA//VVVVVVVVVVVV8AAAAAAPVVVVVVVVVVVVVXwAAAAAD1VVVVVVVVVVVVVfAAAAAAPVVVVVVVVVVVVVV8AAAAAA9VVVVVVVVVVVVVV8AAAAAD1VVVVVVVVVVVVVXwAAAAAPVVVVVVVVVVVVVVfAAAAAA9VVVVVVVVVVVVVV8AAAAAPVVVVVVVVVVVVVVV8AAAAA9VVVVVVVVVVVVVVV8AAAAPVVVVVVVVVVVVVVVV/AAAP1VVVVVVVVVVVVVVVV////9VVVVVVVVVVVVVVVVVf//9VVVVVQ=="},
|
||||
{"width" : "60", "buffer":"VVVX///////////1VVVVVV///////////////VVVVX/8AAAAAAAAAAAP/9VVVfAAAAAAAAAAAAAAA/VVV8AAAAAAAAAAAAAAAPVVXwAAAAAAAAAAAAAAAD1VXwAAAAAAAAAAAAAAAD1VXwAAAAAAAAAAAAAAAA9VXwAAAAAAAAAAAAAAAA9VXwAAAAAAAAAAAAAAAA9VXwAAAAAAAAAAAAAAAA9VfAAAAAAAAAAAAAAAAA9VfAAAAAAAAAAAAAAAAA9VfAAAAAAAAAAAAAAAAA9VfAAAAAAAAAAAAAAAAD1VfAAAAAAAAAAAAAAAAD1VfAAAAAAAAAAAAAAAAPVVfAAAAAAAAAAAAAAAA/VVfAAAAAAAAAAAAAAP/1VVfAAAAAAA/////////VVVfAAAAAAD///////1VVVVfAAAAAAPVVVVVVVVVVVVfAAAAAAPVVVVVVVVVVVVfAAAAAAPVVVVVVVVVVVVfAAAAAAPVVVVVVVVVVVVfAAAAAAPVVVVVVVVVVVVfAAAAAAPVVVVVVVVVVVVfAAAAAAPVVVVVVVVVVVVfAAAAAAPV/////VVVVVVfAAAAAAD///////VVVVVfAAAAAAA/AAAAA/9VVVVfAAAAAAAAAAAAAA/1VVVfAAAAAAAAAAAAAAD9VVVfAAAAAAAAAAAAAAAP1VVfAAAAAAAAAAAAAAAD9VVfAAAAAAAAAAAAAAAAPVVfAAAAAAAAAAAAAAAAPVVfAAAAAAAAAAAAAAAAD1VfAAAAAAAAAAAAAAAAA9VfAAAAAAAAAAAAAAAAA9VfAAAAAAAAAAAAAAAAAPVfAAAAAAAAAAAAAAAAAD1XwAAAAAAAAAAAAAAAAD1XwAAAAAAAAAAAAAAAAD1XwAAAAAAAAAAAAAAAAA9XwAAAAAA//wAAAAAAAA9XwAAAAA////wAAAAAAA9XwAAAAP/VVf8AAAAAAA9V/AAAP/VVVVfAAAAAAAPVf////1VVVVXwAAAAAAPVV///1VVVVVV8AAAAAAPVVVVVVVVVVVV8AAAAAAPVVVVVVVVVVVV8AAAAAAPVVVVVVVVVVVV8AAAAAAPVVVVVVVVVVVV8AAAAAAPVVVVVVVVVVVV8AAAAAAPVVX1VVVVVVVV8AAAAAAPVX//1VVVVVVXwAAAAAAPV/8P/1VVVVVfAAAAAAA9X8AAP/9VVVX8AAAAAAA9fAAAAP//9//wAAAAAAA9fAAAAAD///8AAAAAAAA98AAAAAAADAAAAAAAAAD18AAAAAAAAAAAAAAAAAD18AAAAAAAAAAAAAAAAAD18AAAAAAAAAAAAAAAAAPV8AAAAAAAAAAAAAAAAAPV8AAAAAAAAAAAAAAAAA9V8AAAAAAAAAAAAAAAAD1V8AAAAAAAAAAAAAAAAD1V8AAAAAAAAAAAAAAAAPVVfAAAAAAAAAAAAAAAA9VVfAAAAAAAAAAAAAAAP1VVXwAAAAAAAAAAAAAA/VVVV/AAAAAAAAAAAAAP1VVVVf/AAAAAAAAAAAD/VVVVVV//AAAAAAAAAA/1VVVVVVV//wAAAAAAD/9VVVVVVVVV//////////VVVVVVVVVVVf//////9VVVVVVV"},
|
||||
{"width" : "62", "buffer":"VVVVVVVVX///////1VVVVVVVVVVVf/////////VVVVVVVVVV//AAAAAAAD/9VVVVVVVV/8AAAAAAAAAP/VVVVVVVfwAAAAAAAAAAA/VVVVVVfwAAAAAAAAAAAAPVVVVVX8AAAAAAAAAAAAAPVVVVV8AAAAAAAAAAAAAA9VVVVfAAAAAAAAAAAAAAD1VVVXwAAAAAAAAAAAAAAD1VVV8AAAAAAAAAAAAAAAPVVVfAAAAAAAAAAAAAAAA9VVXwAAAAAAAAAAAAAAAD1VV8AAAAAAAAAAAAAAAAPVVXwAAAAAAAAAAAAAAAA9VV8AAAAAAAAAAAAAAAAPVVfAAAAAAAAAAAAAAAAA9VV8AAAAAAAAD//AAAAAPVVfAAAAAAAAP////AAAA9VV8AAAAAAAP/VVf//AA/VVXwAAAAAAD9VVVVf///1VV8AAAAAAA9VVVVVVf/1VVXwAAAAAAPVVVVVVVVVVVV8AAAAAAD1VVVVVVVVVVVXwAAAAAA9VVVVVVVVVVVVfAAAAAAPVVVVVVVVVVVVV8AAAAAA9VVVX/VVVVVVVfAAAAAAPVVX////1VVVVV8AAAAAA9VX//AP/9VVVVXwAAAAAD1X/AAAAD/VVVVfAAAAAAPX/AAAAAA/VVVV8AAAAAD1/AAAAAAAP1VVXwAAAAAPfAAAAAAAAP1VV8AAAAAAPwAAAAAAAAD1VXwAAAAAAMAAAAAAAAAD1VfAAAAAAAAAAAAAAAAAPVV8AAAAAAAAAAAAAAAAAPVXwAAAAAAAAAAAAAAAAAPVfAAAAAAAAAAAAAAAAAA9V8AAAAAAAAAAAAAAAAAA9XwAAAAAAAAAAAAAAAAAD1fAAAAAAAAAAAAAAAAAAD18AAAAAAAAAAAAAAAAAAPXwAAAAAAAAA/AAAAAAAA9fAAAAAAAAA//wAAAAAAA98AAAAAAAA/1fwAAAAAAD3wAAAAAAAP1VXwAAAAAAPfAAAAAAAD1VVXwAAAAAA9fAAAAAAAPVVVXwAAAAAD18AAAAAAD1VVVXwAAAAAD3wAAAAAAPVVVVfAAAAAAPfAAAAAAA9VVVV8AAAAAA98AAAAAAD1VVVXwAAAAAD3wAAAAAAPVVVVfAAAAAAPXwAAAAAA9VVVV8AAAAAA9fAAAAAAD1VVVXwAAAAAPV8AAAAAAPVVVVfAAAAAA9XwAAAAAA9VVVV8AAAAAD1XwAAAAAA9VVVfAAAAAAPVfAAAAAAD1VVXwAAAAAA9V8AAAAAAD1VV8AAAAAAD1V8AAAAAAD9V/AAAAAAA9VXwAAAAAAD//wAAAAAAD1VXwAAAAAAA/wAAAAAAAPVVfAAAAAAAAAAAAAAAAD1VVfAAAAAAAAAAAAAAAAPVVV8AAAAAAAAAAAAAAAD1VVV8AAAAAAAAAAAAAAAPVVVV8AAAAAAAAAAAAAAD1VVVXwAAAAAAAAAAAAAAPVVVVXwAAAAAAAAAAAAAD1VVVVXwAAAAAAAAAAAAA9VVVVVXwAAAAAAAAAAAAPVVVVVVX8AAAAAAAAAAAD1VVVVVVX8AAAAAAAAAAD9VVVVVVVV/AAAAAAAAAD/VVVVVVVVV/8AAAAAAAD/VVVVVVVVVVf/wAAAAAD/VVVVVVVVVVVV////////VVVVVVVVVVVVVX//////VVVVVVQ=="},
|
||||
{"width" : "63", "buffer":"VVV//////////////1VVVVX/////////////////VVV//AAAAAAAAAAAAAAP/9VX8AAAAAAAAAAAAAAAAA/VXwAAAAAAAAAAAAAAAAAD1fAAAAAAAAAAAAAAAAAAD1fAAAAAAAAAAAAAAAAAAA98AAAAAAAAAAAAAAAAAAA98AAAAAAAAAAAAAAAAAAA98AAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAA98AAAAAAAAAAAAAAAAAAA9fAAAAAAAAAAAAAAAAAAA9fAAAAAAAAAAAAAAAAAAA9XwAAAAAAAAAAAAAAAAAA9X8AAAAAAAAAAAAAAAAAA9Vf/wAAAAAAAAAAAAAAAD1VX/////////wAAAAAAAD1VVVf///////8AAAAAAAPVVVVVVVVVVVVfAAAAAAAPVVVVVVVVVVVV8AAAAAAA9VVVVVVVVVVVV8AAAAAAA9VVVVVVVVVVVXwAAAAAAD1VVVVVVVVVVVXwAAAAAAD1VVVVVVVVVVVfAAAAAAAPVVVVVVVVVVVV8AAAAAAAPVVVVVVVVVVVV8AAAAAAA9VVVVVVVVVVVXwAAAAAAA9VVVVVVVVVVVXwAAAAAAD1VVVVVVVVVVVfAAAAAAAD1VVVVVVVVVVVfAAAAAAAPVVVVVVVVVVVV8AAAAAAA9VVVVVVVVVVVXwAAAAAAA9VVVVVVVVVVVXwAAAAAAD1VVVVVVVVVVVfAAAAAAAD1VVVVVVVVVVVfAAAAAAAPVVVVVVVVVVVV8AAAAAAAPVVVVVVVVVVVV8AAAAAAA9VVVVVVVVVVVXwAAAAAAA9VVVVVVVVVVVXwAAAAAAD1VVVVVVVVVVVfAAAAAAAPVVVVVVVVVVVV8AAAAAAAPVVVVVVVVVVVV8AAAAAAA9VVVVVVVVVVVXwAAAAAAA9VVVVVVVVVVVXwAAAAAAD1VVVVVVVVVVVfAAAAAAAD1VVVVVVVVVVVfAAAAAAAPVVVVVVVVVVVV8AAAAAAAPVVVVVVVVVVVXwAAAAAAA9VVVVVVVVVVVXwAAAAAAA9VVVVVVVVVVVfAAAAAAAD1VVVVVVVVVVVfAAAAAAAPVVVVVVVVVVVV8AAAAAAAPVVVVVVVVVVVV8AAAAAAA9VVVVVVVVVVVXwAAAAAAA9VVVVVVVVVVVXwAAAAAAD1VVVVVVVVVVVfAAAAAAAD1VVVVVVVVVVV8AAAAAAAPVVVVVVVVVVVV8AAAAAAAPVVVVVVVVVVVXwAAAAAAA9VVVVVVVVVVVXwAAAAAAA9VVVVVVVVVVVfAAAAAAAD1VVVVVVVVVVVfAAAAAAAPVVVVVVVVVVVV8AAAAAAAPVVVVVVVVVVVV8AAAAAAA9VVVVVVVVVVVXwAAAAAAA9VVVVVVVVVVVXwAAAAAAD1VVVVVVVVVVVXwAAAAAAD1VVVVVVVVVVVXwAAAAAAPVVVVVVVVVVVVfAAAAAAAPVVVVVVVVVVVVfAAAAAAA9VVVVVVVVVVVVXwAAAAAD1VVVVVVVVVVVVXwAAAAAD1VVVVVVVVVVVVXwAAAAAPVVVVVVVVVVVVVV8AAAAA9VVVVVVVVVVVVVVfwAAA/1VVVVVVVVVVVVVVX/////VVVVVVVVVVVVVVVVf///VVVVVVVVVVVVV"},
|
||||
{"width" : "64", "buffer":"VVVVVVX///////9VVVVVVVVVVVV//////////VVVVVVVVVVX/wAAAAAAAP/1VVVVVVVVf8AAAAAAAAAD/1VVVVVVV/wAAAAAAAAAAA/VVVVVVV/AAAAAAAAAAAAA/VVVVVV8AAAAAAAAAAAAAD9VVVVV8AAAAAAAAAAAAAAD1VVVV8AAAAAAAAAAAAAAAPVVVV8AAAAAAAAAAAAAAAD1VVV8AAAAAAAAAAAAAAAAPVVVfAAAAAAAAAAAAAAAAA9VVfAAAAAAAAAAAAAAAAAPVVXwAAAAAAAAAAAAAAAAD1VV8AAAAAAAAAAAAAAAAAPVV8AAAAAAAAAAAAAAAAAD1VfAAAAAAAD//wAAAAAAA9VXwAAAAAAD///wAAAAAAPVV8AAAAAAD1VV/AAAAAAA9VfAAAAAAD1VVV8AAAAAAPVXwAAAAAD1VVVfAAAAAAD1V8AAAAAD1VVVV8AAAAAA9VfAAAAAA9VVVVfAAAAAAPVXwAAAAAPVVVVXwAAAAAD1V8AAAAAD1VVVV8AAAAAD1VfAAAAAA9VVVVfAAAAAA9VXwAAAAAPVVVVXwAAAAAPVVfAAAAAA9VVVXwAAAAAD1VXwAAAAAD1VVXwAAAAAA9VV8AAAAAAPVVXwAAAAAA9VVXwAAAAAA///wAAAAAAPVVV8AAAAAAD//wAAAAAAPVVVXwAAAAAAAAAAAAAAAD1VVV8AAAAAAAAAAAAAAAD1VVVXwAAAAAAAAAAAAAAD1VVVVfAAAAAAAAAAAAAAD1VVVVV8AAAAAAAAAAAAAD1VVVVVXwAAAAAAAAAAAAD1VVVVVVfAAAAAAAAAAAAA9VVVVVVfAAAAAAAAAAAAAD1VVVVV/AAAAAAAAAAAAAAPVVVVV/AAAAAAAAAAAAAAA9VVVV8AAAAAAAAAAAAAAAD1VVV8AAAAAAAAAAAAAAAAPVVV8AAAAAAAAAAAAAAAAA9VVfAAAAAAAAAAAAAAAAAD1VfAAAAAAAAAAAAAAAAAA9VXwAAAAAAD///AAAAAAAD1XwAAAAAAP////AAAAAAA9V8AAAAAAP1VVX8AAAAAAD18AAAAAAPVVVVXwAAAAAA9fAAAAAAPVVVVVfAAAAAAPXwAAAAAPVVVVVV8AAAAAD18AAAAAD1VVVVVfAAAAAAPfAAAAAA9VVVVVV8AAAAAD3wAAAAAPVVVVVVfAAAAAA/wAAAAAD1VVVVVfAAAAAAP8AAAAAA9VVVVVXwAAAAAD/AAAAAAPVVVVVV8AAAAAA98AAAAAA9VVVVV8AAAAAAPfAAAAAAD1VVVV8AAAAAAD3wAAAAAAP9VVX8AAAAAAD18AAAAAAA////8AAAAAAA9fAAAAAAAAP//wAAAAAAAPV8AAAAAAAAAAAAAAAAAAD1fAAAAAAAAAAAAAAAAAAD1XwAAAAAAAAAAAAAAAAAA9VfAAAAAAAAAAAAAAAAAA9VV8AAAAAAAAAAAAAAAAAPVVfAAAAAAAAAAAAAAAAAPVVV8AAAAAAAAAAAAAAAAPVVVXwAAAAAAAAAAAAAAAD1VVVfAAAAAAAAAAAAAAAP1VVVV/AAAAAAAAAAAAAAP1VVVVX8AAAAAAAAAAAAA/VVVVVVX8AAAAAAAAAAAD/VVVVVVVf/AAAAAAAAAA/9VVVVVVVVf/8AAAAAAAP/1VVVVVVVVVX/////////9VVVVVVVVVVVVf///////VVVVVVU="},
|
||||
{"width" : "61", "buffer":"VVVVVV///////VVVVVVVVVVVVX////////1VVVVVVVVVVf8AAAAAAD/1VVVVVVVVV/wAAAAAAAA/1VVVVVVVX/AAAAAAAAAA/VVVVVVVX8AAAAAAAAAAA9VVVVVVXwAAAAAAAAAAAD9VVVVVXwAAAAAAAAAAAAP1VVVVXwAAAAAAAAAAAAAPVVVVXwAAAAAAAAAAAAAA9VVVV8AAAAAAAAAAAAAAPVVVV8AAAAAAAAAAAAAAA9VVV8AAAAAAAAAAAAAAAD1VVfAAAAAAAAAAAAAAAA9VVfAAAAAAAAAAAAAAAAD1VXwAAAAAAAAAAAAAAAA9VV8AAAAAAA//AAAAAAAD1V8AAAAAAA//8AAAAAAA9VfAAAAAAA9VXwAAAAAAD1XwAAAAAA9VVfAAAAAAA9XwAAAAAA9VVV8AAAAAAD18AAAAAA9VVVXwAAAAAA9fAAAAAAPVVVV8AAAAAAPXwAAAAAPVVVVXwAAAAAD18AAAAAD1VVVV8AAAAAAPfAAAAAA9VVVVfAAAAAAD3wAAAAAPVVVVXwAAAAAA98AAAAAD1VVVV8AAAAAAPfAAAAAA9VVVVfAAAAAAA/wAAAAAD1VVVfAAAAAAAP8AAAAAA9VVVXwAAAAAAD/AAAAAAD1VVV8AAAAAAA/wAAAAAA9VVV8AAAAAAAP8AAAAAAD9VV8AAAAAAAD/AAAAAAAP/f8AAAAAAAA98AAAAAAAP/8AAAAAAAAPfAAAAAAAADAAAAAAAAAD3wAAAAAAAAAAAAAAAAAA9fAAAAAAAAAAAAAAAAAAPXwAAAAAAAAAAAAAAAAAD1fAAAAAAAAAAAAAAAAAA9XwAAAAAAAAAAAAAAAAAPVfAAAAAAAAAAAAAAAAAD1XwAAAAAAAAAAAAAAAAA9VfAAAAAAAAAAAAAAAAAPVV8AAAAAAAAAMAAAAAAD1VXwAAAAAAAAPwAAAAAA9VVfAAAAAAAAPfAAAAAAPVVV/AAAAAAA/XwAAAAAD1VVX/AAAAAD/V8AAAAAA9VVVX/wAAAP9VfAAAAAA9VVVVX/////1VfAAAAAAPVVVVVV////VVXwAAAAAD1VVVVVVVVVVVV8AAAAAA9VVVVVVVVVVVV8AAAAAA9VVVVVVVVVVVV8AAAAAAPVVVVVVVVVVVVfAAAAAAD1VVVVVVVVVVVfAAAAAAA9VVf//VVVVVV/AAAAAAA9VV////1VVVX/AAAAAAAPVV/AAD//9f/8AAAAAAAPVV8AAAA////wAAAAAAAD1VfAAAAAAPAAAAAAAAAD1VfAAAAAAAAAAAAAAAAA9VXwAAAAAAAAAAAAAAAA9VV8AAAAAAAAAAAAAAAAPVVfAAAAAAAAAAAAAAAAPVVXwAAAAAAAAAAAAAAAPVVV8AAAAAAAAAAAAAAAPVVVfAAAAAAAAAAAAAAAD1VVXwAAAAAAAAAAAAAAP1VVV8AAAAAAAAAAAAAAP1VVVfAAAAAAAAAAAAAAPVVVVV8AAAAAAAAAAAAA/VVVVVXwAAAAAAAAAAAA/VVVVVVf8AAAAAAAAAAP9VVVVVVV/8AAAAAAAAA/9VVVVVVVVf/wAAAAAA//VVVVVVVVVVf////////9VVVVVVVVVVVV//////9VVVVVVVVU="},
|
||||
{"width" : "25", "buffer":"VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX//1VVVVf///9VVV/wAA/1VV/AAAAPVV8AAAAA9V8AAAAAD1fAAAAAA9fAAAAAAD3wAAAAAA/wAAAAAAP8AAAAAAD/AAAAAAA/wAAAAAAP8AAAAAAD/AAAAAAA/wAAAAAAPfAAAAAAD3wAAAAAA98AAAAAA9XwAAAAAPVfAAAAAPVV8AAAAPVVX/AAA/VVVf////VVVVX//9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf//VVVVX////1VVX/AAD/VVXwAAAA9VXwAAAAD1XwAAAAAPXwAAAAAD18AAAAAAPfAAAAAAD/AAAAAAA/wAAAAAAP8AAAAAAD/AAAAAAA/wAAAAAAP8AAAAAAD/AAAAAAA98AAAAAAPfAAAAAAD18AAAAAD1fAAAAAA9V8AAAAA9VXwAAAA9VVf8AAP9VVV////9VVVVf//VVU="}
|
||||
]
|
||||
}
|
|
@ -1,49 +1,49 @@
|
|||
exports.drawClock = function(fontIndex) {
|
||||
var digits = [];
|
||||
if (!require("Storage").read("contourclock-"+Math.abs(parseInt(fontIndex+0.5))+".json")) return (false);
|
||||
var font = JSON.parse(require("Storage").read("contourclock-"+Math.abs(parseInt(fontIndex+0.5))+".json"));
|
||||
var digits = [];
|
||||
fontFile=require("Storage").read("contourclock-"+Math.abs(parseInt(fontIndex+0.5))+".json");
|
||||
if (fontFile==undefined) return(false); //exit if font file not found
|
||||
var font = JSON.parse(fontFile);
|
||||
for (var n in font.characters) {
|
||||
digits.push({width: parseInt(font.characters[n].width),
|
||||
height: font.size,
|
||||
bpp: 2,
|
||||
transparent: 1,
|
||||
buffer:E.toArrayBuffer(atob(font.characters[n].buffer))});
|
||||
height: font.size,
|
||||
bpp: 2,
|
||||
transparent: 1,
|
||||
buffer:E.toArrayBuffer(atob(font.characters[n].buffer))});
|
||||
}
|
||||
if (n!=10) return (false); //font file seems to be invalid
|
||||
var x=0;
|
||||
var y = g.getHeight()/2-digits[0].height/2;
|
||||
var date = new Date();
|
||||
g.clearRect(0,38,g.getWidth()-1,138);
|
||||
d1=parseInt(date.getHours()/10);
|
||||
d2=parseInt(date.getHours()%10);
|
||||
d3=10;
|
||||
d4=parseInt(date.getMinutes()/10);
|
||||
d5=parseInt(date.getMinutes()%10);
|
||||
w1=digits[d1].width;
|
||||
w2=digits[d2].width;
|
||||
w3=digits[d3].width;
|
||||
w4=digits[d4].width;
|
||||
w5=digits[d5].width;
|
||||
squeeze=(g.getWidth()-w5)/(w1+w2+w3+w4);
|
||||
if (fontIndex<0) {
|
||||
fg=g.theme.fg;
|
||||
bg=g.theme.bg;
|
||||
g.setColor(bg);
|
||||
g.setBgColor(fg);
|
||||
}
|
||||
g.drawImage(digits[d1],x,y);
|
||||
x+=parseInt(w1*squeeze);
|
||||
g.drawImage(digits[d2],x,y);
|
||||
x+=parseInt(w2*squeeze);
|
||||
g.drawImage(digits[d3],x,y);
|
||||
x+=parseInt(w3*squeeze);
|
||||
g.drawImage(digits[d4],x,y);
|
||||
x+=parseInt(w4*squeeze);
|
||||
g.drawImage(digits[d5],x,y);
|
||||
if (fontIndex<0) {
|
||||
g.setColor(fg);
|
||||
g.setBgColor(bg);
|
||||
}
|
||||
return font.name;
|
||||
}
|
||||
var x=0;
|
||||
var y = g.getHeight()/2-digits[0].height/2;
|
||||
var date = new Date();
|
||||
//g.clearRect(0,24,g.getWidth()-1,137);
|
||||
|
||||
g.clearRect(0,38,g.getWidth()-1,138);
|
||||
d1=parseInt(date.getHours()/10);
|
||||
d2=parseInt(date.getHours()%10);
|
||||
d3=10;
|
||||
d4=parseInt(date.getMinutes()/10);
|
||||
d5=parseInt(date.getMinutes()%10);
|
||||
w1=digits[d1].width;
|
||||
w2=digits[d2].width;
|
||||
w3=digits[d3].width;
|
||||
w4=digits[d4].width;
|
||||
w5=digits[d5].width;
|
||||
squeeze=(g.getWidth()-w5)/(w1+w2+w3+w4);
|
||||
if (fontIndex<0) {
|
||||
fg=g.theme.fg;
|
||||
bg=g.theme.bg;
|
||||
g.setColor(bg);
|
||||
g.setBgColor(fg);
|
||||
}
|
||||
g.drawImage(digits[d1],x,y);
|
||||
x+=parseInt(w1*squeeze);
|
||||
g.drawImage(digits[d2],x,y);
|
||||
x+=parseInt(w2*squeeze);
|
||||
g.drawImage(digits[d3],x,y);
|
||||
x+=parseInt(w3*squeeze);
|
||||
g.drawImage(digits[d4],x,y);
|
||||
x+=parseInt(w4*squeeze);
|
||||
g.drawImage(digits[d5],x,y);
|
||||
if (fontIndex<0) {
|
||||
g.setColor(fg);
|
||||
g.setBgColor(bg);
|
||||
}
|
||||
return font.name;
|
||||
}
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
{ "id": "contourclock",
|
||||
"name": "Contour Clock",
|
||||
"shortName" : "Contour Clock",
|
||||
"version":"0.21",
|
||||
"version":"0.23",
|
||||
"icon": "app.png",
|
||||
"description": "A Minimalist clockface with large Digits. Now with more fonts!",
|
||||
"screenshots" : [{"url":"cc-screenshot-1.png"},{"url":"cc-screenshot-2.png"}],
|
||||
"tags": "clock",
|
||||
"custom": "custom.html",
|
||||
"allow_emulator":true,
|
||||
"supports" : ["BANGLEJS2"],
|
||||
"type": "clock",
|
||||
|
@ -13,20 +14,6 @@
|
|||
{"name":"contourclock.app.js","url":"app.js"},
|
||||
{"name":"contourclock.settings.js","url":"contourclock.settings.js"},
|
||||
{"name":"contourclock","url":"lib.js"},
|
||||
{"name":"contourclock-0.json","url":"font-Impact.json"},
|
||||
{"name":"contourclock-1.json","url":"font-Yumaro.json"},
|
||||
{"name":"contourclock-2.json","url":"font-DinAlternate.json"},
|
||||
{"name":"contourclock-3.json","url":"font-BebasNeue.json"},
|
||||
{"name":"contourclock-4.json","url":"font-Dekko.json"},
|
||||
{"name":"contourclock-5.json","url":"font-Dosis.json"},
|
||||
{"name":"contourclock-6.json","url":"font-Phosphate.json"},
|
||||
{"name":"contourclock-7.json","url":"font-Quicksand.json"},
|
||||
{"name":"contourclock-8.json","url":"font-SairaCond.json"},
|
||||
{"name":"contourclock-9.json","url":"font-YuseiMagic.json"},
|
||||
{"name":"contourclock-10.json","url":"font-BarlowCond.json"},
|
||||
{"name":"contourclock-11.json","url":"font-OpenSansEC.json"},
|
||||
{"name":"contourclock-12.json","url":"font-SairaEC.json"},
|
||||
{"name":"contourclock-13.json","url":"font-Teko.json"},
|
||||
{"name":"contourclock.img","url":"app-icon.js","evaluate":true}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"id": "floralclk",
|
||||
"name": "Floral Clock",
|
||||
"version": "0.01",
|
||||
"description": "A clock with a flower background by [Lillith May](https://www.instagram.com/_lilustrations_/). **Note: Works on any Bangle.js 2 but requires firmware 2v11 or later on Bangle.js 1**",
|
||||
"description": "A clock with a flower background by [Lillith May](https://www.instagram.com/_lilustrations_/)",
|
||||
"icon": "app.png",
|
||||
"screenshots": [{"url":"screenshot_floral.png"}],
|
||||
"type": "clock",
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"id": "health",
|
||||
"name": "Health Tracking",
|
||||
"version": "0.11",
|
||||
"description": "Logs health data and provides an app to view it (requires firmware 2v10.100 or later)",
|
||||
"description": "Logs health data and provides an app to view it",
|
||||
"icon": "app.png",
|
||||
"tags": "tool,system,health",
|
||||
"supports": ["BANGLEJS","BANGLEJS2"],
|
||||
|
|
|
@ -13,3 +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.
|
||||
0.17: Settings for mph/kph and other minor improvements.
|
|
@ -1,8 +1,9 @@
|
|||
# LCARS clock
|
||||
|
||||
A simple LCARS inspired clock.
|
||||
Note: To display the steps, the health app is required. If this app is not installed, the data will not be shown.
|
||||
To contribute you can open a PR at this [GitHub Repo]( https://github.com/peerdavid/BangleApps)
|
||||
Note: To display the steps, the wpedom app is required. To show weather data
|
||||
such as temperature, humidity or window you BangleJS must be connected
|
||||
with Gadgetbride and the weather app must be installed.
|
||||
|
||||
## Control
|
||||
* Tap left / right to change between screens.
|
||||
|
@ -19,12 +20,13 @@ To contribute you can open a PR at this [GitHub Repo]( https://github.com/peerda
|
|||
* 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. Set kph / mph in the settings.
|
||||
* Altitude - Shows the altitude in m.
|
||||
* CoreT - Temperature of device
|
||||
|
||||
|
@ -35,9 +37,6 @@ Access different screens via tap on the left/ right side of the screen
|
|||

|
||||
|
||||
|
||||
# Ideas
|
||||
- Tap top / bottom to disable steps (also icon) and start a timer
|
||||
|
||||
## Contributors
|
||||
- [David Peer](https://github.com/peerdavid).
|
||||
- [Adam Schmalhofer](https://github.com/adamschmalhofer).
|
||||
|
|
|
@ -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(79, y-2, 85 ,y+18);
|
||||
|
||||
g.setFontAlign(0,-1,0);
|
||||
g.drawString(value, 110, y);
|
||||
|
||||
// Print background
|
||||
g.setColor(c);
|
||||
g.setFontAlign(-1,-1,0);
|
||||
g.fillRect(133, y-2, 165 ,y+18);
|
||||
g.fillCircle(161, y+8, 10);
|
||||
g.fillRect(80, y-2, 165 ,y+18);
|
||||
g.fillCircle(163, y+8, 10);
|
||||
g.setColor(cBlack);
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -174,6 +179,11 @@ function _drawData(key, y, c){
|
|||
var weather = getWeather();
|
||||
value = weather.hum;
|
||||
|
||||
} else if (key == "WIND"){
|
||||
text = "WND";
|
||||
var weather = getWeather();
|
||||
value = weather.wind;
|
||||
|
||||
} else if (key == "ALTITUDE"){
|
||||
should_print= false;
|
||||
text = "ALT";
|
||||
|
@ -248,16 +258,16 @@ function drawState(){
|
|||
hours % 4 == 1 ? iconMars :
|
||||
hours % 4 == 2 ? iconMoon :
|
||||
iconEarth;
|
||||
g.drawImage(iconImg, 24, 118);
|
||||
g.drawImage(iconImg, 23, 118);
|
||||
g.setColor(cWhite);
|
||||
g.drawString("STATUS", 24+25, 108);
|
||||
g.drawString("STATUS", 23+26, 108);
|
||||
} else {
|
||||
// Alarm within symbol
|
||||
g.setColor(cOrange);
|
||||
g.drawString("ALARM", 24+25, 108);
|
||||
g.drawString("ALARM", 23+26, 108);
|
||||
g.setColor(cWhite);
|
||||
g.setFontAntonioLarge();
|
||||
g.drawString(getAlarmMinutes(), 24+25, 108+35);
|
||||
g.drawString(getAlarmMinutes(), 23+26, 108+35);
|
||||
}
|
||||
|
||||
g.setFontAlign(-1, -1, 0);
|
||||
|
@ -425,22 +435,22 @@ function drawPosition1(){
|
|||
}
|
||||
|
||||
function draw(){
|
||||
// First handle alarm to show this correctly afterwards
|
||||
handleAlarm();
|
||||
// Queue draw first to ensure that its called in one minute again.
|
||||
queueDraw();
|
||||
|
||||
// Next draw the watch face
|
||||
g.reset();
|
||||
g.clearRect(0, 0, g.getWidth(), g.getHeight());
|
||||
// First handle alarm to show this correctly afterwards
|
||||
handleAlarm();
|
||||
|
||||
// Draw current lcars position
|
||||
if(lcarsViewPos == 0){
|
||||
drawPosition0();
|
||||
} else if (lcarsViewPos == 1) {
|
||||
drawPosition1();
|
||||
}
|
||||
// Next draw the watch face
|
||||
g.reset();
|
||||
g.clearRect(0, 0, g.getWidth(), g.getHeight());
|
||||
|
||||
// Queue draw in one minute
|
||||
queueDraw();
|
||||
// Draw current lcars position
|
||||
if(lcarsViewPos == 0){
|
||||
drawPosition0();
|
||||
} else if (lcarsViewPos == 1) {
|
||||
drawPosition1();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -463,16 +473,16 @@ function getSteps() {
|
|||
|
||||
|
||||
function getWeather(){
|
||||
var weather;
|
||||
var weatherJson;
|
||||
|
||||
try {
|
||||
weather = require('weather').get();
|
||||
weatherJson = storage.readJSON('weather.json');
|
||||
} catch(ex) {
|
||||
// Return default
|
||||
}
|
||||
|
||||
if (weather === undefined){
|
||||
weather = {
|
||||
if(weatherJson === undefined){
|
||||
return {
|
||||
temp: "-",
|
||||
hum: "-",
|
||||
txt: "-",
|
||||
|
@ -480,12 +490,21 @@ function getWeather(){
|
|||
wdir: "-",
|
||||
wrose: "-"
|
||||
};
|
||||
} else {
|
||||
weather.temp = locale.temp(Math.round(weather.temp-273.15))
|
||||
weather.hum = weather.hum + "%";
|
||||
}
|
||||
|
||||
return weather;
|
||||
var weather = weatherJson.weather;
|
||||
|
||||
// Temperature
|
||||
weather.temp = locale.temp(weather.temp-273.15);
|
||||
|
||||
// Humidity
|
||||
weather.hum = weather.hum + "%";
|
||||
|
||||
// Wind
|
||||
var speedFactor = settings.speed == "kph" ? 1.60934 : 1.0;
|
||||
weather.wind = Math.round(weather.wind * speedFactor);
|
||||
|
||||
return weather
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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", "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),
|
||||
min: 0, max: 7,
|
||||
format: v => data_options[v],
|
||||
value: 0 | dataOptions.indexOf(settings.dataRow1),
|
||||
min: 0, max: 8,
|
||||
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),
|
||||
min: 0, max: 7,
|
||||
format: v => data_options[v],
|
||||
value: 0 | dataOptions.indexOf(settings.dataRow2),
|
||||
min: 0, max: 8,
|
||||
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),
|
||||
min: 0, max: 7,
|
||||
format: v => data_options[v],
|
||||
value: 0 | dataOptions.indexOf(settings.dataRow3),
|
||||
min: 0, max: 8,
|
||||
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();
|
||||
},
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"name": "LCARS Clock",
|
||||
"shortName":"LCARS",
|
||||
"icon": "lcars.png",
|
||||
"version":"0.15",
|
||||
"version":"0.17",
|
||||
"readme": "README.md",
|
||||
"supports": ["BANGLEJS2"],
|
||||
"description": "Library Computer Access Retrieval System (LCARS) clock.",
|
||||
|
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.1 KiB |
|
@ -10,6 +10,9 @@
|
|||
<select id="languages" class="form-select">
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input id="translations" type="checkbox" /> <label for="translations">Add common language translations like "Yes", "No", "On", "Off"<br/><i>(Not recommended. For translations use the option under <code>More...</code> in the app loader.</i></label>
|
||||
</div>
|
||||
<p>Then click <button id="upload" class="btn btn-primary">Upload</button></p>
|
||||
|
||||
<script src="../../core/lib/customize.js"></script>
|
||||
|
@ -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;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"name": "Pastel Clock",
|
||||
"shortName": "Pastel",
|
||||
"version": "0.14",
|
||||
"description": "A Configurable clock with custom fonts, background and weather display. Has a cyclic information line that includes, day, date, battery, sunrise and sunset times. Requires firmware 2.11.27",
|
||||
"description": "A Configurable clock with custom fonts, background and weather display. Has a cyclic information line that includes, day, date, battery, sunrise and sunset times",
|
||||
"icon": "pastel.png",
|
||||
"dependencies": {"mylocation":"app","weather":"app"},
|
||||
"screenshots": [{"url":"screenshot_pastel.png"}, {"url":"weather_icons.png"}],
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
1.0: Initial version of game
|
|
@ -0,0 +1,16 @@
|
|||
# Red 7 Card Game
|
||||
|
||||
Play the card game Red 7 on your Bangle.js.
|
||||
|
||||

|
||||
|
||||
For rules, see [here](https://asmadigames.com/Red7Rules.pdf).
|
||||
|
||||
## Usage
|
||||
|
||||
Current rule card is shown in center of screen when viewing your hand.
|
||||
Swipe left to see your palettes and right on the palette screen to go back to your hand. Tap on a card to see it's details and then swipe either left or right to play the card as a rule or a palette card.
|
||||
Press the watch button to bring up the menu, which you can undo your card plays, end your turn, or start a new game.
|
||||
|
||||
## Creator
|
||||
[Kevin Whitaker](https://www.eyecreate.org)
|
|
@ -0,0 +1 @@
|
|||
require("heatshrink").decompress(atob("mEwxH+AH4A/AH4A6gAAZFykrqwAXlYwTF4PXAC4v/F/4v/F/4v75O7ABfJF8O0ABfCF8PCABG7F4JfhABXCF4LvsRw4vmZIXQF9YuB3YJGF8heJF8u7LxAvkLwXJF9ZeKF8fQLxQvjLwO0BhIvhLwXCF9fCF4PQF9ReNF8JeNF8IuB3b8LF7/JF4PJF9ZeOF75ePF7/QAAIuMd8IAOF/4v/F/4vWwIAXF6gwBADIuTAH4A/AH4Al"))
|
After Width: | Height: | Size: 646 B |
|
@ -0,0 +1,16 @@
|
|||
{ "id": "red7game",
|
||||
"name": "Red 7 Card Game",
|
||||
"shortName" : "Red 7",
|
||||
"icon": "icon.png",
|
||||
"version":"1.0",
|
||||
"description": "An implementation of the card game Red 7 for your watch. Play against the AI and be the last player still in the game to win!",
|
||||
"tags": "game",
|
||||
"supports":["BANGLEJS2"],
|
||||
"readme": "README.md",
|
||||
"allow_emulator": true,
|
||||
"screenshots": [{"url":"screenshot.png"},{"url":"screenshot2.png"}],
|
||||
"storage": [
|
||||
{"name":"red7game.app.js","url":"red7.js"},
|
||||
{"name":"red7game.img","url":"app-icon.js","evaluate":true}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,781 @@
|
|||
const colors = ["red", "orange", "yellow", "green", "blue", "indigo", "violet"];
|
||||
const colorRank = {"red":6, "orange":5, "yellow":4, "green":3, "blue":2, "indigo":1, "violet":0};
|
||||
const colorsHex = ["#b01f26", "#d45727", "#cfb82e", "#309c47", "#36aeac", "#2c3a93", "#784298"];
|
||||
const colorsRules = ["high-\nest\n card", "most\none #", "most\none\ncolor", "most\nevens", "most\nunique\ncolors","most\nin a\nrow", "most\n< 4"];
|
||||
const numbers = [1,2,3,4,5,6,7];
|
||||
const handPos = [0,24,24*2,24*3,24*4,24*5,24*6];
|
||||
|
||||
function pointRectangleIntersection(p, r) {
|
||||
return p.x > r.x1 && p.x < r.x2 && p.y > r.y1 && p.y < r.y2;
|
||||
}
|
||||
|
||||
class Card {
|
||||
constructor(cardNum, cardColor) {
|
||||
this.cardNum = cardNum;
|
||||
this.cardColor = cardColor;
|
||||
this.selected = false;
|
||||
//this.rect = {};
|
||||
this.clippedRect = {};
|
||||
}
|
||||
get number() {
|
||||
return this.cardNum;
|
||||
}
|
||||
get color() {
|
||||
return this.cardColor;
|
||||
}
|
||||
set isSelected(sel) {
|
||||
this.selected = sel;
|
||||
}
|
||||
get isSelected() {
|
||||
return this.isSelected;
|
||||
}
|
||||
get fullRect() {
|
||||
return this.rect;
|
||||
}
|
||||
get clipRect() {
|
||||
return this.clippedRect;
|
||||
}
|
||||
draw(x,y,outlined) {
|
||||
this.rect = {x1: x, x2: x+80, y1: y, y2: y+100};
|
||||
this.clippedRect = {x1: x, x2: x+24, y1: y, y2: y+100};
|
||||
var colorIndex = colors.indexOf(this.cardColor);
|
||||
var colorArr = colorsHex[colorIndex];
|
||||
var colorRule = colorsRules[colorIndex];
|
||||
g.setColor(colorArr);
|
||||
g.setBgColor(colorArr);
|
||||
g.fillRect(x,y,x+80,y+100);
|
||||
if(outlined) {
|
||||
g.setColor(0,0,0);
|
||||
g.drawRect(x,y,x+80,y+100);
|
||||
}
|
||||
g.setColor(255,255,255);
|
||||
g.setFont("Vector:40");
|
||||
g.setFontAlign(0,0,0);
|
||||
//g.drawString(this.cardNum,x+40,y+70,true);
|
||||
g.setFont("6x8:3");
|
||||
g.drawString(this.cardNum, x+14, y+14, true);
|
||||
g.setFont("6x8:2");
|
||||
g.drawString(colorRule, x+45, y+50, true);
|
||||
g.flip();
|
||||
}
|
||||
drawBack(x,y,flipped) {
|
||||
this.rect = {x1: x, x2: x+80, y1: y, y2: y-100};
|
||||
this.clippedRect = {x1: x, x2: x+24, y1: y, y2: y-100};
|
||||
g.setColor(255,255,255);
|
||||
g.setBgColor(0,0,0);
|
||||
if(flipped) {
|
||||
g.fillRect(x,y,x+80,-100);
|
||||
g.setColor(0,0,0);
|
||||
g.drawRect(x,y,x+80,-100);
|
||||
g.setFontAlign(0,0,2);
|
||||
g.setColor(255,0,0);
|
||||
g.setBgColor(255,255,255);
|
||||
g.setFont("Vector:40");
|
||||
//g.drawString(7,x+40,y-40,true);
|
||||
} else {
|
||||
g.fillRect(x,y,x+80,y+100);
|
||||
g.setColor(0,0,0);
|
||||
g.drawRect(x,y,x+80,y+100);
|
||||
g.setFontAlign(0,0,0);
|
||||
g.setColor(255,0,0);
|
||||
g.setBgColor(255,255,255);
|
||||
g.setFont("Vector:40");
|
||||
//g.drawString(7,x+40,y+40,true);
|
||||
}
|
||||
g.flip();
|
||||
}
|
||||
drawRot(x,y) {
|
||||
this.rect = {x1: x, x2: x+45, y1: y, y2: y+110};
|
||||
var colorIndex = colors.indexOf(this.cardColor);
|
||||
var colorArr = colorsHex[colorIndex];
|
||||
var colorRule = colorsRules[colorIndex];
|
||||
g.setColor(colorArr);
|
||||
g.setBgColor(colorArr);
|
||||
g.fillRect(x,y,x+110,y+45);
|
||||
g.setColor(255,255,255);
|
||||
g.setFontAlign(0,0,0);
|
||||
g.setFont("6x8:2");
|
||||
g.drawString(colorRule, x+55, y+23, true);
|
||||
g.flip();
|
||||
}
|
||||
drawMicro(x,y) {
|
||||
this.rect = {x1: x, x2: x+20, y1: y, y2: y+20};
|
||||
var colorIndex = colors.indexOf(this.cardColor);
|
||||
var colorArr = colorsHex[colorIndex];
|
||||
g.setColor(colorArr);
|
||||
g.setBgColor(colorArr);
|
||||
g.fillRect(x,y,x+20,y+20);
|
||||
g.setFontAlign(0,0,0);
|
||||
g.setFont("6x8:2");
|
||||
g.setColor(255,255,255);
|
||||
g.drawString(this.cardNum, x+12, y+12, true);
|
||||
g.flip();
|
||||
}
|
||||
isHigher(card) {
|
||||
if(this.number > card.number) {
|
||||
return true;
|
||||
} else if(this.number === card.number) {
|
||||
if(colorRank[this.color] > colorRank[card.color]) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Hand {
|
||||
constructor(cards) {
|
||||
if(typeof cards === "undefined") {
|
||||
this.hand = [];
|
||||
} else {
|
||||
this.hand = cards;
|
||||
}
|
||||
}
|
||||
//Can be single card or array of cards
|
||||
addCard(card) {
|
||||
this.hand = this.hand.concat(card);
|
||||
}
|
||||
//removes card from hand and returns it
|
||||
removeCard(card) {
|
||||
var index = this.hand.indexOf(card);
|
||||
return this.hand.splice(index,1)[0];
|
||||
}
|
||||
get handCards() {
|
||||
return this.hand;
|
||||
}
|
||||
draw(y, outlined) {
|
||||
var count = 0;
|
||||
for(let c of this.hand) {
|
||||
c.draw(handPos[count],y, outlined);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
drawMicro(x, y) {
|
||||
var count = 0;
|
||||
for(let c of this.hand) {
|
||||
c.drawMicro(x+handPos[count],y);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
drawBacks(y, flipped) {
|
||||
var count = 0;
|
||||
for(let c of this.hand) {
|
||||
c.drawBack(handPos[count], y, flipped);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
checkForClick(cord) {
|
||||
for(let card of this.hand) {
|
||||
//If last card, you can check the whole rectangle
|
||||
if(this.hand.indexOf(card) === this.hand.length - 1) {
|
||||
if(pointRectangleIntersection(cord,card.fullRect)) {
|
||||
return card;
|
||||
}
|
||||
}
|
||||
else if(pointRectangleIntersection(cord,card.clippedRect)) {
|
||||
return card;
|
||||
}
|
||||
}
|
||||
}
|
||||
bestHighestCard() {
|
||||
if(this.hand.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
var highestCard = this.hand[0];
|
||||
this.hand.forEach(function(card){
|
||||
if(card.isHigher(highestCard)) {
|
||||
highestCard = card;
|
||||
}
|
||||
});
|
||||
return new Hand(highestCard);
|
||||
}
|
||||
allCardsMatchingNumber(number) {
|
||||
var matchingHand = new Hand();
|
||||
this.hand.forEach(function(card){
|
||||
if(card.number === number) {
|
||||
matchingHand.addCard(card);
|
||||
}
|
||||
});
|
||||
return matchingHand;
|
||||
}
|
||||
bestCardsOneNumber() {
|
||||
if(this.hand.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
var counts = {'1':0,'2':0,'3':0,'4':0,'5':0,'6':0,'7':0};
|
||||
this.hand.forEach(function(card){
|
||||
counts[card.number]++;
|
||||
});
|
||||
var highestNumber = '1';
|
||||
for(let n of Object.keys(counts)) {
|
||||
if(counts[n] > counts[highestNumber]) {
|
||||
highestNumber = n;
|
||||
}
|
||||
if(counts[n] === counts[highestNumber] && n != highestNumber) {
|
||||
if(n > highestNumber) {
|
||||
highestNumber = n;
|
||||
}
|
||||
}
|
||||
}
|
||||
return this.allCardsMatchingNumber(highestNumber);
|
||||
}
|
||||
allCardsMatchingColor(color) {
|
||||
var matchingHand = new Hand();
|
||||
this.hand.forEach(function(card) {
|
||||
if(card.color === color) {
|
||||
matchingHand.addCard(card);
|
||||
}
|
||||
});
|
||||
return matchingHand;
|
||||
}
|
||||
bestCardsOneColor() {
|
||||
if(this.hand.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
var counts = {'red':0, 'orange':0, 'yellow':0, 'green':0, 'blue':0, 'indigo':0, 'violet':0};
|
||||
this.hand.forEach(function(card){
|
||||
counts[card.color]++;
|
||||
});
|
||||
var highestColor = 'red';
|
||||
for(let n of Object.keys(counts)) {
|
||||
if(counts[n] > counts[highestColor]) {
|
||||
highestColor = n;
|
||||
}
|
||||
if(counts[n] === counts[highestColor] && n != highestColor && counts[highestColor] > 0) {
|
||||
var h1 = this.allCardsMatchingColor(n);
|
||||
var h2 = this.allCardsMatchingColor(highestColor);
|
||||
if(h1.bestHighestCard().handCards.isHigher(h2.bestHighestCard().handCards)) {
|
||||
highestColor = n;
|
||||
}
|
||||
}
|
||||
}
|
||||
return this.allCardsMatchingColor(highestColor);
|
||||
}
|
||||
bestEvenCards() {
|
||||
if(this.hand.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
var matchingHand = new Hand();
|
||||
this.hand.forEach(function(card){
|
||||
if(card.number % 2 === 0) {
|
||||
matchingHand.addCard(card);
|
||||
}
|
||||
});
|
||||
return matchingHand;
|
||||
}
|
||||
bestCardsDiffColors() {
|
||||
if(this.hand.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
var cloneHand = new Hand();
|
||||
for(let c of this.handCards) {
|
||||
cloneHand.addCard(c);
|
||||
}
|
||||
var diffHand = new Hand();
|
||||
diffHand.addCard(cloneHand.bestHighestCard().handCards);
|
||||
cloneHand.removeCard(cloneHand.bestHighestCard().handCards);
|
||||
while(cloneHand.handCards.length > 0) {
|
||||
var highCard = cloneHand.bestHighestCard().handCards;
|
||||
var colorExists = false;
|
||||
diffHand.handCards.forEach(function(card){
|
||||
if(card.color === highCard.color) {
|
||||
colorExists = true;
|
||||
}
|
||||
});
|
||||
if(!colorExists) {
|
||||
diffHand.addCard(highCard);
|
||||
}
|
||||
cloneHand.removeCard(highCard);
|
||||
}
|
||||
return diffHand;
|
||||
}
|
||||
bestRun() {
|
||||
if(this.hand.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
var runs = {1:0,2:0,3:0,4:0,5:0,6:0,7:0};
|
||||
var highestCard = {0:new Card(0,"violet"),1:new Card(0,"violet"),2:new Card(0,"violet"),3:new Card(0,"violet"),4:new Card(0,"violet"),5:new Card(0,"violet"),6:new Card(0,"violet"),7:new Card(0,"violet")};
|
||||
var hands = {0:new Hand(),1:new Hand(),2:new Hand(),3:new Hand(),4:new Hand(),5:new Hand(),6:new Hand(),7:new Hand()};
|
||||
for(let start = 1; start < 8; start++) {
|
||||
//check length of run starting from each number
|
||||
var currentLen = 0;
|
||||
var highCard = new Card(0,"violet");
|
||||
for(let num = start; num < 8; num++) {
|
||||
var hasNum = false;
|
||||
var matchingCard = undefined;
|
||||
this.hand.forEach(function(card){
|
||||
if(card.number === num) {
|
||||
hasNum = true;
|
||||
if(matchingCard != undefined) {
|
||||
if(card.isHigher(matchingCard)) {
|
||||
matchingCard = card;
|
||||
}
|
||||
} else {
|
||||
matchingCard = card;
|
||||
}
|
||||
}
|
||||
});
|
||||
if(hasNum) {
|
||||
currentLen++;
|
||||
hands[start].addCard(matchingCard);
|
||||
highCard = matchingCard;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
runs[start] = currentLen;
|
||||
highestCard[start] = highCard;
|
||||
}
|
||||
//determine best run
|
||||
var highestRun = 0;
|
||||
var highestCount = 0;
|
||||
for(let n = 1; n < 8; n++) {
|
||||
if(runs[n] > highestCount) {
|
||||
highestRun = n;
|
||||
highestCount = runs[n];
|
||||
} else if (runs[n] === highestCount) {
|
||||
if(highestCard[n].isHigher(highestCard[highestRun])) {
|
||||
highestRun = n;
|
||||
highestCount = runs[n];
|
||||
}
|
||||
}
|
||||
}
|
||||
return hands[highestRun];
|
||||
}
|
||||
bestCardsBelow4() {
|
||||
if(this.hand.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
var matchingHand = new Hand();
|
||||
this.hand.forEach(function(card){
|
||||
if(card.number < 4) {
|
||||
matchingHand.addCard(card);
|
||||
}
|
||||
});
|
||||
return matchingHand;
|
||||
}
|
||||
}
|
||||
|
||||
function isWinningCombo(ruleCard, palette, otherPalette) {
|
||||
//The rules of red7 say that you are winning if you match the rule better than anyone else(more cards match rule with highest card in match breaking ties).
|
||||
switch(ruleCard.color) {
|
||||
case "red":
|
||||
if(palette.bestHighestCard().handCards.isHigher(otherPalette.bestHighestCard().handCards)) return true;
|
||||
break;
|
||||
case "orange":
|
||||
var best1 = palette.bestCardsOneNumber();
|
||||
var best2 = otherPalette.bestCardsOneNumber();
|
||||
if(best1.handCards.length >= best2.handCards.length) {
|
||||
if(best1.handCards.length === best2.handCards.length) {
|
||||
if(best1.bestHighestCard().handCards.isHigher(best2.bestHighestCard().handCards)) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "yellow":
|
||||
var best1 = palette.bestCardsOneColor();
|
||||
var best2 = otherPalette.bestCardsOneColor();
|
||||
if(best1.handCards.length >= best2.handCards.length) {
|
||||
if(best1.handCards.length === best2.handCards.length) {
|
||||
if(best1.bestHighestCard().handCards.isHigher(best2.bestHighestCard().handCards)) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "green":
|
||||
var best1 = palette.bestEvenCards();
|
||||
var best2 = otherPalette.bestEvenCards();
|
||||
if(best1.handCards.length >= best2.handCards.length) {
|
||||
if(best1.handCards.length === best2.handCards.length) {
|
||||
if(best1.handCards.length === 0) {
|
||||
return false;
|
||||
}
|
||||
else if(best1.bestHighestCard().handCards.isHigher(best2.bestHighestCard().handCards)) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "blue":
|
||||
var best1 = palette.bestCardsDiffColors();
|
||||
var best2 = otherPalette.bestCardsDiffColors();
|
||||
if(best1.handCards.length >= best2.handCards.length) {
|
||||
if(best1.handCards.length === best2.handCards.length) {
|
||||
if(best1.bestHighestCard().handCards.isHigher(best2.bestHighestCard().handCards)) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "indigo":
|
||||
var best1 = palette.bestRun();
|
||||
var best2 = otherPalette.bestRun();
|
||||
if(best1.handCards.length >= best2.handCards.length) {
|
||||
if(best1.handCards.length === best2.handCards.length) {
|
||||
if(best1.bestHighestCard().handCards.isHigher(best2.bestHighestCard().handCards)) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "violet":
|
||||
var best1 = palette.bestCardsBelow4();
|
||||
var best2 = otherPalette.bestCardsBelow4();
|
||||
if(best1.handCards.length >= best2.handCards.length) {
|
||||
if(best1.handCards.length === best2.handCards.length) {
|
||||
if(best1.handCards.length === 0) {
|
||||
return false;
|
||||
}
|
||||
else if(best1.bestHighestCard().handCards.isHigher(best2.bestHighestCard().handCards)) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function canPlay(hand, palette, otherPalette) {
|
||||
var clonePalette = new Hand();
|
||||
for(let c of palette) {
|
||||
clonePalette.addCard(c);
|
||||
}
|
||||
//Check if any card to palette can win first.
|
||||
for(let c of hand.handCards) {
|
||||
clonePalette.addCard(c);
|
||||
if(isWinningCombo(ruleCards.handCards[ruleCards.handCards.length-1],clonePalette, otherPalette)) {
|
||||
return true;
|
||||
}
|
||||
clonePalette.removeCard(c);
|
||||
}
|
||||
//Next check for wins with rule change.
|
||||
for(let c of hand.handCards) {
|
||||
if(isWinningCombo(c, clonePalette, otherPalette)) {
|
||||
return true;
|
||||
} else {
|
||||
//Check if any palette play can win with rule.
|
||||
for(let h of hand.handCards) {
|
||||
if(h === c) {}
|
||||
else {
|
||||
clonePalette.addCard(c);
|
||||
if(isWinningCombo(c, clonePalette, otherPalette)) {
|
||||
return true;
|
||||
}
|
||||
clonePalette.removeCard(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
class AI {
|
||||
constructor(hand, palette) {
|
||||
this.hand = hand;
|
||||
this.palette = palette;
|
||||
}
|
||||
takeTurn(ruleStack, otherPalette) {
|
||||
var clonePalette = new Hand();
|
||||
for(let c of this.palette) {
|
||||
clonePalette.addCard(c);
|
||||
}
|
||||
//Check if any card to palette can win first.
|
||||
for(let c of this.hand.handCards) {
|
||||
clonePalette.addCard(c);
|
||||
if(isWinningCombo(ruleStack.handCards[ruleStack.handCards.length-1],clonePalette, otherPalette)) {
|
||||
//Play card that wins
|
||||
this.palette.addCard(c);
|
||||
this.hand.removeCard(c);
|
||||
return true;
|
||||
}
|
||||
clonePalette.removeCard(c);
|
||||
}
|
||||
//Next check for wins with rule change.
|
||||
for(let c of this.hand.handCards) {
|
||||
if(isWinningCombo(c, clonePalette, otherPalette)) {
|
||||
//Play rule card that wins
|
||||
ruleStack.addCard(c);
|
||||
this.hand.removeCard(c);
|
||||
return true;
|
||||
} else {
|
||||
//Check if any palette play can win with rule.
|
||||
for(let h of this.hand.handCards) {
|
||||
if(h === c) {}
|
||||
else {
|
||||
clonePalette.addCard(c);
|
||||
if(isWinningCombo(c, clonePalette, otherPalette)) {
|
||||
ruleStack.addCard(c);
|
||||
this.hand.removeCard(c);
|
||||
this.palette.addCard(h);
|
||||
this.hand.removeCard(h);
|
||||
return true;
|
||||
}
|
||||
clonePalette.removeCard(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function shuffleDeck(deckArray) {
|
||||
E.srand(Date.now());
|
||||
deckArray.sort(() => Math.random() - 0.5);
|
||||
}
|
||||
|
||||
var deck = [];
|
||||
var screen = 1;
|
||||
var startedGame = false;
|
||||
var playerHand = new Hand();
|
||||
var playerPalette = new Hand();
|
||||
var AIhand = new Hand();
|
||||
var AIPalette = new Hand();
|
||||
var ruleCards = new Hand();
|
||||
var undoStack = [];
|
||||
var aiPlayer = new AI(AIhand, AIPalette);
|
||||
|
||||
function drawScreen1_2(card) {
|
||||
Bangle.removeAllListeners("touch");
|
||||
Bangle.removeAllListeners("swipe");
|
||||
//determine what actions can be taken
|
||||
var playedRule = false;
|
||||
var playedPalette = false;
|
||||
for(let stack of undoStack) {
|
||||
if(stack.to === ruleCards) {
|
||||
playedRule = true;
|
||||
}
|
||||
if(stack.to === playerPalette) {
|
||||
playedPalette = true;
|
||||
}
|
||||
}
|
||||
Bangle.on('swipe', function(direction){
|
||||
if(direction === -1 && !playedRule) {
|
||||
undoStack.push({from:playerHand,to:ruleCards,card:card});
|
||||
ruleCards.addCard(card);
|
||||
playerHand.removeCard(card);
|
||||
drawScreen1();
|
||||
}
|
||||
if(direction === 1 && !playedPalette) {
|
||||
undoStack.push({from:playerHand,to:playerPalette,card:card});
|
||||
playerPalette.addCard(card);
|
||||
playerHand.removeCard(card);
|
||||
drawScreen1();
|
||||
}
|
||||
});
|
||||
Bangle.on("touch", function(z,cord){
|
||||
if(!pointRectangleIntersection(cord, card.fullRect)) {
|
||||
drawScreen1();
|
||||
}
|
||||
});
|
||||
//draw elements
|
||||
g.setBgColor(0,0,0);
|
||||
g.clear();
|
||||
playerHand.draw(130, true);
|
||||
AIhand.drawBacks(40, true);
|
||||
card.draw(47,47,true);
|
||||
g.setColor(255,255,255);
|
||||
if(!playedRule) g.fillPoly([20,50,20,70,40,70,40,90,20,90,20,110,0,80]);
|
||||
if(!playedPalette) g.fillPoly([155,50,155,70,135,70,135,90,155,90,155,110,175,80]);
|
||||
g.setFont("4x6:1");
|
||||
g.setBgColor(255,255,255);
|
||||
g.setColor(0,0,0);
|
||||
if(!playedRule) g.drawString("Rule", 20,80, true);
|
||||
if(!playedPalette) g.drawString("Palette", 155,80, true);
|
||||
}
|
||||
|
||||
function drawScreen1() {
|
||||
Bangle.removeAllListeners("touch");
|
||||
Bangle.removeAllListeners("swipe");
|
||||
Bangle.on('swipe', function(direction){
|
||||
if(direction === -1) {
|
||||
drawScreen2();
|
||||
screen = 2;
|
||||
} else if(direction === 1) {
|
||||
drawScreen1();
|
||||
screen = 1;
|
||||
}
|
||||
});
|
||||
g.setBgColor(0,0,0);
|
||||
g.clear();
|
||||
playerHand.draw(130, true);
|
||||
Bangle.on("touch", function(z,cord){
|
||||
var card = playerHand.checkForClick(cord);
|
||||
if (card !== undefined) {
|
||||
drawScreen1_2(card);
|
||||
}
|
||||
});
|
||||
AIhand.drawBacks(40, true);
|
||||
//Draw win indicator
|
||||
var winning = isWinningCombo(ruleCards.handCards[ruleCards.handCards.length-1], playerPalette, AIPalette);
|
||||
winning ? g.setColor(0,255,0) : g.setColor(255,0,0);
|
||||
g.fillEllipse(50,50,130,70);
|
||||
g.setFont("4x6:2");
|
||||
g.setFontAlign(0,0,0);
|
||||
g.setColor(255,255,255);
|
||||
winning ? g.setBgColor(0,255,0) : g.setBgColor(255,0,0);
|
||||
g.drawString(winning ? "Winning" : "Losing", 90,60, true);
|
||||
//Draw current rule
|
||||
var rules = ruleCards.handCards;
|
||||
if(rules.length > 0) {
|
||||
rules[rules.length-1].drawRot(40,80);
|
||||
}
|
||||
}
|
||||
|
||||
function drawScreen2() {
|
||||
Bangle.removeAllListeners("touch");
|
||||
g.setBgColor(0,0,0);
|
||||
g.clear();
|
||||
g.setColor(255,255,255);
|
||||
g.setFont("6x8:2");
|
||||
g.setFontAlign(0,0,0);
|
||||
g.drawString("AI Palette",85,40,false);
|
||||
g.drawString("Your Palette", 85, 130, false);
|
||||
playerPalette.drawMicro(5,150);
|
||||
AIPalette.drawMicro(5,0);
|
||||
}
|
||||
|
||||
function drawScreenHelp() {
|
||||
E.showAlert("Rules can be found on asmadigames.com").then(function(){drawMainMenu();});
|
||||
}
|
||||
|
||||
function drawGameOver(win) {
|
||||
E.showAlert(win ? "AI has given up. You Win!" : "You cannot play. AI wins.").then(function(){
|
||||
startedGame = false;
|
||||
undoStack = [];
|
||||
drawMainMenu();
|
||||
});
|
||||
}
|
||||
|
||||
function finishTurn() {
|
||||
undoStack = [];
|
||||
//Check if AI has cards
|
||||
if(AIhand.handCards.length === 0) {
|
||||
drawGameOver(true);
|
||||
} else {
|
||||
var takenTurn = aiPlayer.takeTurn(ruleCards, playerPalette);
|
||||
//Check if game over conditions met.
|
||||
if(!takenTurn) {
|
||||
drawGameOver(true);
|
||||
} else if(playerHand.handCards.length === 0) {
|
||||
drawGameOver(false);
|
||||
} else if(!canPlay(playerHand, playerPalette, AIPalette)) {
|
||||
console.log("no play");
|
||||
//drawGameOver(false);
|
||||
drawScreen1();
|
||||
} else {
|
||||
E.showMenu();
|
||||
drawScreen1();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function resetToNewGame() {
|
||||
g.setBgColor(0,0,0);
|
||||
g.clear();
|
||||
deck = [];
|
||||
//Fill deck with cards
|
||||
for(let c of colors) {
|
||||
for(let n of numbers) {
|
||||
deck.push(new Card(n,c));
|
||||
}
|
||||
}
|
||||
shuffleDeck(deck);
|
||||
playerHand = new Hand();
|
||||
playerHand.addCard(deck.pop());
|
||||
playerHand.addCard(deck.pop());
|
||||
playerHand.addCard(deck.pop());
|
||||
playerHand.addCard(deck.pop());
|
||||
playerHand.addCard(deck.pop());
|
||||
playerHand.addCard(deck.pop());
|
||||
playerHand.addCard(deck.pop());
|
||||
playerPalette = new Hand();
|
||||
playerPalette.addCard(deck.pop());
|
||||
|
||||
AIhand = new Hand();
|
||||
AIhand.addCard(deck.pop());
|
||||
AIhand.addCard(deck.pop());
|
||||
AIhand.addCard(deck.pop());
|
||||
AIhand.addCard(deck.pop());
|
||||
AIhand.addCard(deck.pop());
|
||||
AIhand.addCard(deck.pop());
|
||||
AIhand.addCard(deck.pop());
|
||||
AIPalette = new Hand();
|
||||
AIPalette.addCard(deck.pop());
|
||||
ruleCards = new Hand();
|
||||
ruleCards.addCard(new Card(0,"red"));
|
||||
undoStack = [];
|
||||
startedGame = true;
|
||||
aiPlayer = new AI(AIhand, AIPalette);
|
||||
//determine first player
|
||||
if(isWinningCombo(new Card(0,"red"), playerPalette, AIPalette)) {
|
||||
//AI needs to play first
|
||||
finishTurn();
|
||||
} else {
|
||||
drawScreen1();
|
||||
}
|
||||
}
|
||||
|
||||
function drawMainMenu() {
|
||||
Bangle.removeAllListeners("touch");
|
||||
Bangle.removeAllListeners("swipe");
|
||||
var menu = {"": {"title":"Red 7"}};
|
||||
if(startedGame === true) {
|
||||
menu["Continue"] = function(){
|
||||
E.showMenu();
|
||||
drawScreen1();
|
||||
};
|
||||
if(undoStack.length > 0) {
|
||||
menu["Undo Turn"] = function(){
|
||||
for(let stack of undoStack) {
|
||||
stack.from.addCard(stack.card);
|
||||
stack.to.removeCard(stack.card);
|
||||
}
|
||||
undoStack = [];
|
||||
E.showMenu();
|
||||
drawScreen1();
|
||||
};
|
||||
}
|
||||
if(isWinningCombo(ruleCards.handCards[ruleCards.handCards.length-1], playerPalette, AIPalette)) {
|
||||
menu["Finish Turn"] = function(){
|
||||
finishTurn();
|
||||
};
|
||||
}
|
||||
}
|
||||
menu["New Game"] = function() {
|
||||
E.showMenu();
|
||||
resetToNewGame();
|
||||
};
|
||||
menu["Help"] = function() {
|
||||
drawScreenHelp();
|
||||
};
|
||||
menu["Exit"] = function() {
|
||||
E.showMenu();
|
||||
setTimeout(load,300);
|
||||
};
|
||||
E.showMenu(menu);
|
||||
}
|
||||
|
||||
drawMainMenu();
|
||||
setWatch(function(){
|
||||
drawMainMenu();
|
||||
},BTN, {edge: "rising", debounce: 50, repeat: true});
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 2.1 KiB |
|
@ -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)
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
<li>Go to <a href="https://umap.openstreetmap.fr/en/">https://umap.openstreetmap.fr/en/</a></li>
|
||||
<li>Create a map</li>
|
||||
<li>Draw a polyline (right hand side)</li>
|
||||
<li>Embed and share (leb>ft hand side)</li>
|
||||
<li>Embed and share (left hand side)</li>
|
||||
<li>Download data as KML</li>
|
||||
</ul>
|
||||
|
||||
|
@ -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<coords.length;i+=2) {
|
||||
var c = {x:coords[i],y:coords[i+1]};
|
||||
var s = toScr(c);
|
||||
gcoords[i ] = s.x;
|
||||
gcoords[i+1] = s.y;
|
||||
if (last) {
|
||||
var dx = c.x-last.x;
|
||||
var dy = c.y-last.y;
|
||||
totalDistance += Math.sqrt(dx*dx+dy*dy)*coordScale;
|
||||
coordDistance[i/2] = totalDistance;
|
||||
}
|
||||
last = c;
|
||||
}
|
||||
var fix, lastFix;
|
||||
var nextPtIdx = 0; // 2x the number of points
|
||||
var nextPt = {x:coords[nextPtIdx], y:coords[nextPtIdx+1]};
|
||||
var nextAngle = 0;
|
||||
var nextDist = 0;
|
||||
var currentDist = 0;
|
||||
|
||||
|
||||
|
||||
function drawMap() {
|
||||
g.clearRect(0,0,239,120);
|
||||
g.setFontAlign(0,0);
|
||||
g.setColor(1,1,0);
|
||||
g.setFontVector(40);
|
||||
g.drawString((currentDist===undefined)?"?":(Math.round(currentDist)+"m"), 160, 30);
|
||||
g.setColor(1,1,1);
|
||||
g.setFont("6x8",2);
|
||||
g.drawString(Math.round(totalDistance)+"m", 160, 70);
|
||||
g.drawString((nextPtIdx/2)+"/"+coordDistance.length, 50, 20);
|
||||
if (!fix.fix) {
|
||||
g.setColor(1,1,0);
|
||||
g.drawString("No GPS", 50, 50);
|
||||
g.setFont("6x8",1);
|
||||
g.drawString(fix.satellites+" Sats", 50, 70);
|
||||
function toScr(p) {
|
||||
return {
|
||||
x : 10 + (p.x-min.x)*100/(max.x-min.x),
|
||||
y : H - 10 - (p.y-min.y)*100/(max.y-min.y)
|
||||
};
|
||||
}
|
||||
|
||||
if (lastFix && lastFix.fix) {
|
||||
g.setColor(0,0,0);
|
||||
g.drawCircle(lastFix.s.x,lastFix.s.y,10);
|
||||
var last;
|
||||
var totalDistance = 0;
|
||||
for (var i=0;i<coords.length;i+=2) {
|
||||
var c = {x:coords[i],y:coords[i+1]};
|
||||
var s = toScr(c);
|
||||
gcoords[i ] = s.x;
|
||||
gcoords[i+1] = s.y;
|
||||
if (last) {
|
||||
var dx = c.x-last.x;
|
||||
var dy = c.y-last.y;
|
||||
totalDistance += Math.sqrt(dx*dx+dy*dy)*coordScale;
|
||||
coordDistance[i/2] = totalDistance;
|
||||
}
|
||||
last = c;
|
||||
}
|
||||
var c1 = g.toColor(1,1,0);
|
||||
var c2 = g.toColor(0.7,0.7,0.7);
|
||||
for (var i=0;i<gcoords.length;i+=2)
|
||||
g.setColor((i<=nextPtIdx) ? c1 : c2).fillRect(gcoords[i]-2,gcoords[i+1]-2,gcoords[i]+2,gcoords[i+1]+2);
|
||||
g.setColor(1,1,0); // first part of path
|
||||
g.drawPoly(new Uint8Array(gcoords.buffer, 0, nextPtIdx+2));
|
||||
g.setColor(1,1,1); // remaining part of path
|
||||
g.drawPoly(new Uint8Array(gcoords.buffer, nextPtIdx));
|
||||
var fix, lastFix;
|
||||
var nextPtIdx = 0; // 2x the number of points
|
||||
var nextPt = {x:coords[nextPtIdx], y:coords[nextPtIdx+1]};
|
||||
var nextAngle = 0;
|
||||
var nextDist = 0;
|
||||
var currentDist = 0;
|
||||
|
||||
if (fix && fix.fix) {
|
||||
g.setColor(1,1,0);
|
||||
g.drawCircle(fix.s.x,fix.s.y,10);
|
||||
|
||||
|
||||
function drawMap() {
|
||||
var R = W*180/240;
|
||||
var L = W*50/240;
|
||||
|
||||
g.clearRect(0,0,W,H/2);
|
||||
g.setFontAlign(0,0);
|
||||
g.setColor(colHL);
|
||||
g.setFontVector(40);
|
||||
g.drawString((currentDist===undefined)?"?":(Math.round(currentDist)+"m"), R, 30);
|
||||
g.setColor(g.theme.fg);
|
||||
g.setFont("6x8",2);
|
||||
g.drawString(Math.round(totalDistance)+"m", R, 70);
|
||||
g.drawString((nextPtIdx/2)+"/"+coordDistance.length, L, 20);
|
||||
if (!fix.fix) {
|
||||
g.setColor(colHL);
|
||||
g.drawString("No GPS", L, 50);
|
||||
g.setFont("6x8",1);
|
||||
g.drawString(fix.satellites+" Sats", L, 70);
|
||||
}
|
||||
|
||||
if (lastFix && lastFix.fix) {
|
||||
g.setColor(g.theme.bg);
|
||||
g.drawCircle(lastFix.s.x,lastFix.s.y,10);
|
||||
}
|
||||
var c1 = g.toColor(colHL);
|
||||
var c2 = g.toColor("#888");
|
||||
for (var i=0;i<gcoords.length;i+=2)
|
||||
g.setColor((i<=nextPtIdx) ? c1 : c2).fillRect(gcoords[i]-2,gcoords[i+1]-2,gcoords[i]+2,gcoords[i+1]+2);
|
||||
g.setColor(colHL); // first part of path
|
||||
g.drawPoly(new Uint8Array(gcoords.buffer, 0, nextPtIdx+2));
|
||||
g.setColor(g.theme.fg); // remaining part of path
|
||||
g.drawPoly(new Uint8Array(gcoords.buffer, nextPtIdx));
|
||||
|
||||
if (fix && fix.fix) {
|
||||
g.setColor(colHL);
|
||||
g.drawCircle(fix.s.x,fix.s.y,10);
|
||||
}
|
||||
lastFix = fix;
|
||||
}
|
||||
lastFix = fix;
|
||||
}
|
||||
|
||||
function getNextPtInfo() {
|
||||
var dx = nextPt.x - fix.p.x;
|
||||
var dy = nextPt.y - fix.p.y;
|
||||
nextAngle = Math.atan2(dx,dy)*180/Math.PI;
|
||||
nextDist = Math.sqrt(dx*dx+dy*dy)*coordScale;
|
||||
}
|
||||
function getNextPtInfo() {
|
||||
var dx = nextPt.x - fix.p.x;
|
||||
var dy = nextPt.y - fix.p.y;
|
||||
nextAngle = Math.atan2(dx,dy)*180/Math.PI;
|
||||
nextDist = Math.sqrt(dx*dx+dy*dy)*coordScale;
|
||||
}
|
||||
|
||||
function onGPS(f) {
|
||||
fix = f;
|
||||
fix.p = Bangle.project(fix);
|
||||
fix.s = toScr(fix.p);
|
||||
getNextPtInfo();
|
||||
if ((nextDist < PT_DISTANCE) &&
|
||||
(nextPtIdx < coords.length)) {
|
||||
nextPtIdx+=2;
|
||||
nextPt = {x:coords[nextPtIdx], y:coords[nextPtIdx+1]};
|
||||
function onGPS(f) {
|
||||
fix = f;
|
||||
fix.p = Bangle.project(fix);
|
||||
fix.s = toScr(fix.p);
|
||||
getNextPtInfo();
|
||||
}
|
||||
// work out how far we are (based on distance to next point)
|
||||
if (!fix.fix) {
|
||||
currentDist = undefined
|
||||
} else if (nextPtIdx+2 < coordDistance.length) {
|
||||
currentDist = coordDistance[1+(nextPtIdx/2)] - nextDist;
|
||||
} else if (nextPtIdx+2 == coordDistance.length) {
|
||||
currentDist = totalDistance - nextDist;
|
||||
} else {
|
||||
currentDist = totalDistance;
|
||||
if ((nextDist < PT_DISTANCE) &&
|
||||
(nextPtIdx < coords.length)) {
|
||||
nextPtIdx+=2;
|
||||
nextPt = {x:coords[nextPtIdx], y:coords[nextPtIdx+1]};
|
||||
getNextPtInfo();
|
||||
}
|
||||
// work out how far we are (based on distance to next point)
|
||||
if (!fix.fix) {
|
||||
currentDist = undefined
|
||||
} else if (nextPtIdx+2 < coordDistance.length) {
|
||||
currentDist = coordDistance[1+(nextPtIdx/2)] - nextDist;
|
||||
} else if (nextPtIdx+2 == coordDistance.length) {
|
||||
currentDist = totalDistance - nextDist;
|
||||
} else {
|
||||
currentDist = totalDistance;
|
||||
}
|
||||
|
||||
if (!Bangle.isLCDOn()) return;
|
||||
drawMap();
|
||||
}
|
||||
|
||||
if (!Bangle.isLCDOn()) return;
|
||||
drawMap();
|
||||
}
|
||||
function arrow(r,c) {
|
||||
r=r*Math.PI/180;
|
||||
var p = Math.PI*3/4;
|
||||
g.setColor(c);
|
||||
g.fillPoly([
|
||||
180+40*Math.sin(r), 180-40*Math.cos(r),
|
||||
180+20*Math.sin(r+p), 180-20*Math.cos(r+p),
|
||||
180-10*Math.sin(r), 180+10*Math.cos(r),
|
||||
180+20*Math.sin(r+-p), 180-20*Math.cos(r-p),
|
||||
]);
|
||||
}
|
||||
|
||||
function arrow(r,c) {
|
||||
r=r*Math.PI/180;
|
||||
var p = Math.PI*3/4;
|
||||
g.setColor(c);
|
||||
g.fillPoly([
|
||||
180+40*Math.sin(r), 180-40*Math.cos(r),
|
||||
180+20*Math.sin(r+p), 180-20*Math.cos(r+p),
|
||||
180-10*Math.sin(r), 180+10*Math.cos(r),
|
||||
180+20*Math.sin(r+-p), 180-20*Math.cos(r-p),
|
||||
]);
|
||||
}
|
||||
function onCompass(m) {
|
||||
if (!Bangle.isLCDOn()) return;
|
||||
|
||||
function onCompass(m) {
|
||||
if (!Bangle.isLCDOn()) return;
|
||||
|
||||
arrow(oldHeading,0);
|
||||
var heading = m.heading + nextAngle;
|
||||
arrow(heading,0xF800);
|
||||
oldHeading = heading;
|
||||
}
|
||||
arrow(oldHeading,g.theme.bg);
|
||||
var heading = m.heading + nextAngle;
|
||||
arrow(heading,"#f00");
|
||||
oldHeading = heading;
|
||||
}
|
||||
|
||||
|
||||
// draw the heading
|
||||
var oldHeading = 0;
|
||||
Bangle.on('GPS', onGPS);
|
||||
Bangle.on('mag', onCompass);
|
||||
Bangle.setGPSPower(1);
|
||||
Bangle.setCompassPower(1);
|
||||
g.clear();
|
||||
// draw the heading
|
||||
var oldHeading = 0;
|
||||
Bangle.on('GPS', onGPS);
|
||||
Bangle.on('mag', onCompass);
|
||||
Bangle.setGPSPower(1);
|
||||
Bangle.setCompassPower(1);
|
||||
g.clear();
|
||||
`;
|
||||
|
||||
sendCustomizedApp({
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
{
|
||||
"id": "route",
|
||||
"name": "Route Viewer",
|
||||
"version": "0.02",
|
||||
"version": "0.03",
|
||||
"description": "Upload a KML file of a route, and have your watch display a map with how far around it you are",
|
||||
"icon": "app.png",
|
||||
"tags": "",
|
||||
"supports": ["BANGLEJS"],
|
||||
"supports": ["BANGLEJS","BANGLEJS2"],
|
||||
"custom": "custom.html",
|
||||
"storage": [
|
||||
{"name":"route.app.js"},
|
||||
|
|
|
@ -188,7 +188,7 @@ function showBLEMenu() {
|
|||
},
|
||||
/*LANG*/'HID': {
|
||||
value: Math.max(0,0 | hidV.indexOf(settings.HID)),
|
||||
min: 0, max: 3,
|
||||
min: 0, max: hidN.length-1,
|
||||
format: v => hidN[v],
|
||||
onchange: v => {
|
||||
settings.HID = hidV[v];
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
0.01: New App!
|
||||
0.02: Fix crash on start
|
|
@ -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)
|
|
@ -0,0 +1 @@
|
|||
require("heatshrink").decompress(atob("mEw4cA///4H8m2ZtVN/nl1P9vXXBoJT/AGcbtuwCJ3btu2CBsG7fZ23ACJk2CIXYCBcB2w1C7YRO/oR/CKp9CCIJ9MUIQRBUI8CpMgYpwRGdJQRGABQRUhdtCJ9btugCJsiM4O0kmSpICFCKJUCCMpZDCJx9CCJsyBIQRxBpACDyAR/CJZeCAA8BCPIA/AFQ"))
|
|
@ -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();
|
After Width: | Height: | Size: 698 B |
|
@ -0,0 +1,140 @@
|
|||
// 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 logContent = storage.read(this.logfile) || "";
|
||||
|
||||
// parse previous logfile
|
||||
var log = JSON.parse(logContent.length > 0 ? atob(logContent) : "[]") ;
|
||||
|
||||
// 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();
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
};
|
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"id":"sleeplog",
|
||||
"name":"Sleep Log",
|
||||
"shortName": "SleepLog",
|
||||
"version": "0.02",
|
||||
"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"}
|
||||
]
|
||||
}
|
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 4.0 KiB |
|
@ -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();
|
||||
})
|
|
@ -3,3 +3,4 @@
|
|||
0.03: Bangle.js 2 support
|
||||
0.04: Adds costumizable colours and the respective settings menu
|
||||
0.05: "Chime the time" (buzz or beep) with up/down swipe added
|
||||
0.06: Redraw widgets when time is updated
|
||||
|
|
|
@ -80,6 +80,8 @@ function draw() {
|
|||
pushCommand(drawVectorText, dateText, dateFontSize, x + width/2, y, 0, -1, datecol);
|
||||
|
||||
executeCommands();
|
||||
|
||||
Bangle.drawWidgets();
|
||||
}
|
||||
|
||||
var timeout;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "vectorclock",
|
||||
"name": "Vector Clock",
|
||||
"version": "0.05",
|
||||
"version": "0.06",
|
||||
"description": "A digital clock that uses the built-in vector font.",
|
||||
"icon": "app.png",
|
||||
"type": "clock",
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"id": "waveclk",
|
||||
"name": "Wave Clock",
|
||||
"version": "0.02",
|
||||
"description": "A clock using a wave image by [Lillith May](https://www.instagram.com/_lilustrations_/). **Note: Works on any Bangle.js 2, but requires firmware 2v11 or later on Bangle.js 1**",
|
||||
"description": "A clock using a wave image by [Lillith May](https://www.instagram.com/_lilustrations_/)",
|
||||
"icon": "app.png",
|
||||
"screenshots": [{"url":"screenshot.png"}],
|
||||
"type": "clock",
|
||||
|
|
|
@ -5,6 +5,6 @@ A simple widget that shows the on/off status of the GPS.
|
|||
The GPS can quickly run the battery down if it is on all the time so
|
||||
it is useful to know if it has been switched on or not.
|
||||
|
||||
- Uses Bangle.isGPSOn(), requires firmware v2.08.167 or later
|
||||
- Uses Bangle.isGPSOn()
|
||||
- Shows in grey when the GPS is off
|
||||
- Shows in amber when the GPS is on
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
"type": "widget",
|
||||
"supports": ["BANGLEJS", "BANGLEJS2"],
|
||||
"readme": "README.md",
|
||||
"description": "Displays the current step count from `Bangle.getHealthStatus(\"day\").steps` in 12x16 font, requires firmware v2.11.21 or later",
|
||||
"description": "Displays the current step count from `Bangle.getHealthStatus(\"day\").steps` in 12x16 font",
|
||||
"tags": "widget,battery",
|
||||
"storage": [
|
||||
{"name":"widpa.wid.js","url":"widpa.wid.js"}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
"type": "widget",
|
||||
"supports": ["BANGLEJS", "BANGLEJS2"],
|
||||
"readme": "README.md",
|
||||
"description": "Displays the current step count from `Bangle.getHealthStatus(\"day\").steps` in the Lato font, requires firmware v2.11.21 or later",
|
||||
"description": "Displays the current step count from `Bangle.getHealthStatus(\"day\").steps` in the Lato font",
|
||||
"tags": "widget,battery",
|
||||
"storage": [
|
||||
{"name":"widpb.wid.js","url":"widpb.wid.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(`(.*)((?<!\/\*LANG\*\/)["|']${str}[^A-Z].*)`, 'gi');
|
||||
const result = data.replace(regex, '$1/*LANG*/$2');
|
||||
console.log(str, file);
|
||||
fs.writeFile(file, result, 'utf8', function (err) {
|
||||
if (err) return console.log(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
var report = "";
|
||||
|
||||
log("Translated Strings that are not tagged with LANG");
|
||||
|
@ -144,8 +187,15 @@ log("=================================================================");
|
|||
log("");
|
||||
log("Maybe we should add /*LANG*/ to these automatically?");
|
||||
log("");
|
||||
log(untranslatedStrings.filter(e => 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.");
|
||||
|
|
|
@ -144,7 +144,7 @@
|
|||
<div class="form-group">
|
||||
<select class="form-select form-inline" id="settings-lang" style="width: 10em">
|
||||
<option value="">None (English)</option>
|
||||
</select> <span>Translations (<a href="https://github.com/espruino/BangleApps/issues/1311" target="_blank">BETA - more info</a>)</span>
|
||||
</select> <span>Translations (<a href="https://github.com/espruino/BangleApps/issues/1311" target="_blank">BETA - more info</a>). Any apps that are uploaded to Bangle.js after changing this will have any text automatically translated.</span>
|
||||
</div>
|
||||
<button class="btn" id="defaultsettings">Default settings</button>
|
||||
</div>
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
234
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?"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
197
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."
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
197
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."
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
190
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"
|
||||
}
|
||||
}
|
190
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."
|
||||
}
|
||||
}
|
190
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"
|
||||
}
|
||||
}
|
|
@ -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"}
|
||||
]
|
||||
|
|
330
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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
190
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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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": "Назад"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
190
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."
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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": "バック"
|
||||
}
|
||||
}
|
|
@ -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": "溯源"
|
||||
}
|
||||
}
|