Merge pull request #1726 from sir-indy/master

[fuzzyw] Moving translations for Fuzzy Work Clock
pull/1743/head^2
Gordon Williams 2022-04-25 11:49:09 +01:00 committed by GitHub
commit bca890eb30
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 183 additions and 269 deletions

View File

@ -1 +1,2 @@
0.01: First release
0.02: Move translations to locale module (removed watch settings, now pick language in Bangle App Loader, More..., Settings)

View File

@ -4,12 +4,11 @@ An imprecise clock for when you're not in a rush.
This clock is a remake of one of my favourite Pebble watchfaces, Fuzzy Text International. I use this watch for weekends and holidays, when 'within 5 minutes of the actual time' is close enough!
By default it will use the language set on the watch, go to settings to pick:
* en_GB - English
* en_US - American
Translations are supported to get the time in the language of your choice! To choose language, in the Bangle App Loader, navigate to the 'More...' tab and pick language under 'Settings'. Currently supported languages are below, but if you want to contribution a translation please feel free!:
* en_GB - English (Default)
* es_ES - Spanish
* fr_FR - French
* no_NO - Norwegian
* nn_NO - Norwegian Nynorsk (thank you zerodogg)
* sv_SE - Swedish
* de_DE - German

View File

@ -1,186 +0,0 @@
{
"en_GB":{
"hours":[
"midnight", "one", "two", "three", "four", "five",
"six", "seven", "eight", "nine", "ten", "eleven",
"twelve", "one", "two", "three", "four", "five",
"six", "seven", "eight", "nine", "ten", "eleven"
],
"minutes":[
"*$1 o'clock",
"five past *$1",
"ten past *$1",
"quarter past *$1",
"twenty past *$1",
"twenty five past *$1",
"half past *$1",
"twenty five to *$2",
"twenty to *$2",
"quarter to *$2",
"ten to *$2",
"five to *$2"
],
"text_scale":3.5
},
"en_US":{
"hours":[
"midnight", "one", "two", "three", "four", "five",
"six", "seven", "eight", "nine", "ten", "eleven",
"twelve", "one", "two", "three", "four", "five",
"six", "seven", "eight", "nine", "ten", "eleven"
],
"minutes":[
"*$1 o'clock",
"five after *$1",
"ten after *$1",
"quarter after *$1",
"twenty after *$1",
"twenty five after *$1",
"half past *$1",
"twenty five to *$2",
"twenty to *$2",
"quarter to *$2",
"ten to *$2",
"five to *$2"
],
"text_scale":3.5
},
"es_ES":{
"hours":[
"doce", "una", "dos", "tres", "cuatro", "cinco",
"seis", "siete", "ocho", "nueve", "diez", "once",
"doce", "una", "dos", "tres", "cuatro", "cinco",
"seis", "siete", "ocho", "nueve", "diez", "once"
],
"minutes":[
"*$1 en punto",
"*$1 y cinco",
"*$1 y diez",
"*$1 y cuarto",
"*$1 y veinte",
"*$1 y veinti- cinco",
"*$1 y media",
"*$2 menos veinti- cinco",
"*$2 menos veinte",
"*$2 menos cuarto",
"*$2 menos diez",
"*$2 menos cinco"
],
"text_scale":3.5
},
"fr_FR":{
"hours":[
"douze", "une", "deux", "trois", "quatre", "cinq",
"six", "sept", "huit", "neuf", "dix", "onze",
"douze", "une", "deux", "trois", "quatre", "cinq",
"six", "sept", "huit", "neuf", "dix", "onze"
],
"minutes":[
"*$1 heures",
"*$1 heures cinq",
"*$1 heures dix",
"*$1 heures et quart",
"*$1 heures vingt",
"*$1 heures vingt- cinq",
"*$1 heures et demie",
"*$2 moins vingt- cinq",
"*$2 heures moins vingt",
"*$2 moins le quart",
"*$2 heures moins dix",
"*$2 heures moins cinq"
],
"text_scale":3.5
},
"no_NB":{
"hours":[
"tolv", "ett", "to", "tre", "fire", "fem",
"seks", "sju", "åtte", "ni", "ti", "elleve",
"tolv", "ett", "to", "tre", "fire", "fem",
"seks", "sju", "åtte", "ni", "ti", "elleve"
],
"minutes":[
"klokka er *$1",
"fem over *$1",
"ti over *$1",
"kvart over *$1",
"ti på halv *$2",
"fem på halv *$2",
"halv *$2",
"fem over halv *$2",
"ti over halv *$2",
"kvart på *$2",
"ti på *$2",
"fem på *$2"
],
"text_scale":3.5
},
"nn_NO":{
"hours":[
"tolv", "eitt", "to", "tre", "fire", "fem",
"seks", "sju", "åtte", "ni", "ti", "elleve",
"tolv", "eitt", "to", "tre", "fire", "fem",
"seks", "sju", "åtte", "ni", "ti", "elleve"
],
"minutes":[
"klokka er *$1",
"fem over *$1",
"ti over *$1",
"kvart over *$1",
"ti på halv *$2",
"fem på halv *$2",
"halv *$2",
"fem over halv *$2",
"ti over halv *$2",
"kvart på *$2",
"ti på *$2",
"fem på *$2"
],
"text_scale":3.5
},
"sv_SE":{
"hours":[
"tolv", "ett", "två", "tre", "fyra", "fem",
"sex", "sju", "åtta", "nio", "tio", "elva",
"tolv", "ett", "två", "tre", "fyra", "fem",
"sex", "sju", "åtta", "nio", "tio", "elva"
],
"minutes":[
"*$1",
"fem över *$1",
"tio över *$1",
"kvart över *$1",
"tjugo över *$1",
"fem i halv *$2",
"halv *$2",
"fem över halv *$2",
"tjugo i *$2",
"kvart i *$2",
"tio i *$2",
"fem i *$2"
],
"text_scale":3.5
},
"de_DE":{
"hours":[
"zwölf", "eins", "zwei", "drei", "vier", "fünf",
"sechs", "sieben", "acht", "neun", "zehn", "elf",
"zwölf", "eins", "zwei", "drei", "vier", "fünf",
"sechs", "sieben", "acht", "neun", "zehn", "elf"
],
"minutes":[
"*$1 uhr",
"fünf nach *$1",
"zehn nach *$1",
"viertel nach *$1",
"zwanzig nach *$1",
"fünf for halb *$2",
"halb *$2",
"fünf nach halb *$2",
"zwanzig vor *$2",
"viertel vor *$2",
"zehn vor *$2",
"fünf vor *$2"
],
"text_scale":3.5
}
}

View File

@ -1,15 +1,37 @@
// adapted from https://github.com/hallettj/Fuzzy-Text-International/
const fuzzy_strings = require("Storage").readJSON("fuzzy_strings.json");
const SETTINGS_FILE = "fuzzyw.settings.json";
let settings = require("Storage").readJSON(SETTINGS_FILE,1)|| {'language': 'System', 'alignment':'Centre'};
if (settings.language == 'System') {
settings.language = require('locale').name;
}
let fuzzy_string = fuzzy_strings[settings.language];
let fuzzy_string = {
"hours":[
/*LANG*/"twelve",
/*LANG*/"one",
/*LANG*/"two",
/*LANG*/"three",
/*LANG*/"four",
/*LANG*/"five",
/*LANG*/"six",
/*LANG*/"seven",
/*LANG*/"eight",
/*LANG*/"nine",
/*LANG*/"ten",
/*LANG*/"eleven"
],
"minutes":[
/*LANG*/"*$1 o'clock",
/*LANG*/"five past *$1",
/*LANG*/"ten past *$1",
/*LANG*/"quarter past *$1",
/*LANG*/"twenty past *$1",
/*LANG*/"twenty five past *$1",
/*LANG*/"half past *$1",
/*LANG*/"twenty five to *$2",
/*LANG*/"twenty to *$2",
/*LANG*/"quarter to *$2",
/*LANG*/"ten to *$2",
/*LANG*/"five to *$2"
]
};
let text_scale = 3.5;
let timeout = 2.5*60;
let drawTimeout;
@ -24,24 +46,15 @@ function queueDraw(seconds) {
const h = g.getHeight();
const w = g.getWidth();
let align_mode = 0;
let align_pos = w/2;
if (settings.alignment =='Left') {
align_mode = -1;
align_pos = 0;
} else if (settings.alignment == 'Right') {
align_mode = 1;
align_pos = w;
}
function getTimeString(date) {
let segment = Math.round((date.getMinutes()*60 + date.getSeconds() + 1)/300);
let hour = date.getHours() + Math.floor(segment/12);
f_string = fuzzy_string.minutes[segment % 12];
if (f_string.includes('$1')) {
f_string = f_string.replace('$1', fuzzy_string.hours[(hour) % 24]);
f_string = f_string.replace('$1', fuzzy_string.hours[(hour) % 12]);
} else {
f_string = f_string.replace('$2', fuzzy_string.hours[(hour + 1) % 24]);
f_string = f_string.replace('$2', fuzzy_string.hours[(hour + 1) % 12]);
}
return f_string;
}
@ -49,11 +62,11 @@ function getTimeString(date) {
function draw() {
let time_string = getTimeString(new Date()).replace('*', '');
// print(time_string);
g.setFont('Vector', (h-24*2)/fuzzy_string.text_scale);
g.setFontAlign(align_mode, 0);
g.setFont('Vector', (h-24*2)/text_scale);
g.setFontAlign(0, 0);
g.clearRect(0, 24, w, h-24);
g.setColor(g.theme.fg);
g.drawString(g.wrapString(time_string, w).join("\n"), align_pos, h/2);
g.drawString(g.wrapString(time_string, w).join("\n"), w/2, h/2);
queueDraw(timeout);
}

View File

@ -1,46 +0,0 @@
(function(back) {
const SETTINGS_FILE = "fuzzyw.settings.json";
var align_options = ['Left','Centre','Right'];
var language_options = ['System', 'en_GB', 'en_US', 'es_ES', 'fr_FR', 'no_NO', 'sv_SE', 'de_DE'];
// initialize with default settings...
let s = {'language': 'System', 'alignment': 'Centre'};
// ...and overwrite them with any saved values
// This way saved values are preserved if a new version adds more settings
const storage = require('Storage')
let settings = storage.readJSON(SETTINGS_FILE, 1) || s;
const saved = settings || {}
for (const key in saved) {
s[key] = saved[key]
}
function save() {
settings = s
storage.write(SETTINGS_FILE, settings)
}
E.showMenu({
'': { 'title': 'Fuzzy Text Clock' },
'< Back': back,
'Language': {
value: 0 | language_options.indexOf(s.language),
min: 0, max: language_options.length - 1,
format: v => language_options[v],
onchange: v => {
s.language = language_options[v];
save();
}
},
'Alignment': {
value: 0 | align_options.indexOf(s.alignment),
min: 0, max: align_options.length - 1,
format: v => align_options[v],
onchange: v => {
s.alignment = align_options[v];
save();
}
},
});
})

View File

@ -2,7 +2,7 @@
"id":"fuzzyw",
"name":"Fuzzy Text Clock",
"shortName": "Fuzzy Text",
"version": "0.01",
"version": "0.02",
"description": "An imprecise clock for when you're not in a rush",
"readme": "README.md",
"icon":"fuzzyw.png",
@ -13,8 +13,6 @@
"allow_emulator": true,
"storage": [
{"name":"fuzzyw.app.js","url":"fuzzyw.app.js"},
{"name":"fuzzyw.settings.js","url":"fuzzyw.settings.js"},
{"name":"fuzzyw.img","url":"fuzzyw.icon.js","evaluate":true},
{"name":"fuzzy_strings.json","url":"fuzzy_strings.json"}
{"name":"fuzzyw.img","url":"fuzzyw.icon.js","evaluate":true}
]
}

View File

@ -164,10 +164,37 @@
"Music": "Musik",
"color": "Farbe",
"off": "aus",
"Theme": "Thema"
"Theme": "Thema",
"one": "eins",
"two": "zwei",
"three": "drei",
"four": "vier",
"five": "fünf",
"six": "sechs",
"seven": "sieben",
"eight": "acht",
"nine": "neun",
"ten": "zehn",
"eleven": "elf",
"twelve": "zwölf"
},
"alarm": {
"//": "App-specific overrides",
"rpt": "Wdh."
},
"fuzzyw": {
"//": "App-specific overrides",
"*$1 o'clock": "*$1 uhr",
"five past *$1": "fünf nach *$1",
"ten past *$1": "zehn nach *$1",
"quarter past *$1": "viertel nach *$1",
"twenty past *$1": "zwanzig nach *$1",
"twenty five past *$1": "fünf for halb *$2",
"half past *$1": "halb *$2",
"twenty five to *$2": "fünf nach halb *$2",
"twenty to *$2": "zwanzig vor *$2",
"quarter to *$2": "viertel vor *$2",
"ten to *$2": "zehn vor *$2",
"five to *$2": "fünf vor *$2"
}
}
}

View File

@ -164,10 +164,37 @@
"Music": "Música",
"color": "color",
"off": "fuera de",
"Theme": "Tema"
"Theme": "Tema",
"one": "una",
"two": "dos",
"three": "tres",
"four": "cuatro",
"five": "cinco",
"six": "seis",
"seven": "siete",
"eight": "ocho",
"nine": "nueve",
"ten": "diez",
"eleven": "once",
"twelve": "doce"
},
"alarm": {
"//": "App-specific overrides",
"rpt": "rep."
},
"fuzzyw": {
"//": "App-specific overrides",
"*$1 o'clock": "*$1 en punto",
"five past *$1": "*$1 y cincq",
"ten past *$1": "*$1 y diez",
"quarter past *$1": "*$1 y cuarto",
"twenty past *$1": "*$1 y veinte",
"twenty five past *$1": "*$1 y veinti- cinco",
"half past *$1": "*$1 y media",
"twenty five to *$2": "*$2 menos veinti- cinco",
"twenty to *$2": "*$2 menos veinte",
"quarter to *$2": "*$2 menos cuarto",
"ten to *$2": "*$2 menos diez",
"five to *$2": "*$2 menos cinco"
}
}

View File

@ -164,10 +164,37 @@
"color": "couleur",
"Off": "Off",
"off": "off",
"Theme": "Thème"
"Theme": "Thème",
"one": "une",
"two": "deux",
"three": "trois",
"four": "quatre",
"five": "cinq",
"six": "six",
"seven": "sept",
"eight": "huit",
"nine": "neuf",
"ten": "dix",
"eleven": "onze",
"twelve": "douze"
},
"alarm": {
"//": "App-specific overrides",
"rpt": "rép."
},
"fuzzyw": {
"//": "App-specific overrides",
"*$1 o'clock": "*$1 heures",
"five past *$1": "*$1 heures cinq",
"ten past *$1": "*$1 heures dix",
"quarter past *$1": "*$1 heures et quart",
"twenty past *$1": "*$1 heures vingt",
"twenty five past *$1": "*$1 heures vingt- cinq",
"half past *$1": "*$1 heures et demie",
"twenty five to *$2": "*$2 moins vingt- cinq",
"twenty to *$2": "*$2 heures moins vingt",
"quarter to *$2": "*$2 moins le quart",
"ten to *$2": "*$2 heures moins dix",
"five to *$2": "*$2 heures moins cinq"
}
}

View File

@ -239,6 +239,33 @@
"Su color": "Su farge",
"filled": "fylt",
"Mrk.Color": "Mrk.Farge",
"Mrk.Size": "Mrk.Storleik"
"Mrk.Size": "Mrk.Storleik",
"one": "eitt",
"two": "to",
"three": "tre",
"four": "fire",
"five": "fem",
"six": "seks",
"seven": "sju",
"eight": "åtte",
"nine": "ni",
"ten": "ti",
"eleven": "elleve",
"twelve": "tolv"
},
"fuzzyw": {
"//": "App-specific overrides",
"*$1 o'clock": "klokka er *$1",
"five past *$1": "fem over *$1",
"ten past *$1": "ti over *$1",
"quarter past *$1": "kvart over *$1",
"twenty past *$1": "ti på halv *$2",
"twenty five past *$1": "fem på halv *$2",
"half past *$1": "halv *$2",
"twenty five to *$2": "fem over halv *$2",
"twenty to *$2": "ti over halv *$2",
"quarter to *$2": "kvart på *$2",
"ten to *$2": "ti på *$2",
"five to *$2": "fem på *$2"
}
}

View File

@ -164,10 +164,37 @@
"color": "färg",
"off": "off",
"Off": "Av",
"Theme": "Tema"
"Theme": "Tema",
"one": "ett",
"two": "två",
"three": "tre",
"four": "fyra",
"five": "fem",
"six": "sex",
"seven": "sju",
"eight": "åtta",
"nine": "nio",
"ten": "tio",
"eleven": "elva",
"twelve": "tolv"
},
"alarm": {
"//": "App-specific overrides",
"rpt": "uppr."
},
"fuzzyw": {
"//": "App-specific overrides",
"*$1 o'clock": "*$1",
"five past *$1": "fem över *$1",
"ten past *$1": "tio över *$1",
"quarter past *$1": "kvart över *$1",
"twenty past *$1": "tjugo över *$1",
"twenty five past *$1": "fem i halv *$2",
"half past *$1": "halv *$2",
"twenty five to *$2": "fem över halv *$2",
"twenty to *$2": "tjugo i *$2",
"quarter to *$2": "kvart i *$2",
"ten to *$2": "tio i *$2",
"five to *$2": "fem i *$2"
}
}