Automatically update translation report. Fixes #439
This commit is contained in:
parent
3edd75ed43
commit
3b8a2f61fc
3 changed files with 54 additions and 32 deletions
23
README.md
vendored
23
README.md
vendored
|
@ -153,24 +153,27 @@ If you'd like to add translations, take a look a look at the [English translatio
|
||||||
|
|
||||||
- Languages supported: English (`en`), Chinese (`zh`), Dutch (`nl`), Esperanto (`eo`), French (`fr`), Spanish (`es`), Swedish (`sv`), German (`de`), Russian (`ru`), Italian (`it`).
|
- Languages supported: English (`en`), Chinese (`zh`), Dutch (`nl`), Esperanto (`eo`), French (`fr`), Spanish (`es`), Swedish (`sv`), German (`de`), Russian (`ru`), Italian (`it`).
|
||||||
|
|
||||||
|
<!-- translations -->
|
||||||
|
|
||||||
lang | done | missing
|
lang | done | missing
|
||||||
--- | --- | ---
|
--- | --- | ---
|
||||||
de | 94% | avatar,upload_avatar,show_avatars,docs,old_password,send_notifications_to_email,downvotes_disabled,enable_downvotes,open_registration,registration_closed,enable_nsfw,email_already_exists
|
de | 93% | avatar,upload_avatar,show_avatars,docs,old_password,send_notifications_to_email,downvotes_disabled,enable_downvotes,open_registration,registration_closed,enable_nsfw,donate_to_lemmy,donate,email_already_exists
|
||||||
eo | 81% | number_of_communities,preview,upload_image,avatar,upload_avatar,show_avatars,formatting_help,view_source,sticky,unsticky,archive_link,stickied,delete_account,delete_account_confirm,banned,creator,number_online,docs,replies,mentions,old_password,forgot_password,reset_password_mail_sent,password_change,new_password,no_email_setup,send_notifications_to_email,language,browser_default,downvotes_disabled,enable_downvotes,open_registration,registration_closed,enable_nsfw,theme,are_you_sure,yes,no,email_already_exists
|
eo | 80% | number_of_communities,preview,upload_image,avatar,upload_avatar,show_avatars,formatting_help,view_source,sticky,unsticky,archive_link,stickied,delete_account,delete_account_confirm,banned,creator,number_online,docs,replies,mentions,old_password,forgot_password,reset_password_mail_sent,password_change,new_password,no_email_setup,send_notifications_to_email,language,browser_default,downvotes_disabled,enable_downvotes,open_registration,registration_closed,enable_nsfw,theme,donate_to_lemmy,donate,are_you_sure,yes,no,email_already_exists
|
||||||
es | 89% | avatar,upload_avatar,show_avatars,archive_link,docs,replies,mentions,old_password,forgot_password,reset_password_mail_sent,password_change,new_password,no_email_setup,send_notifications_to_email,language,browser_default,downvotes_disabled,enable_downvotes,open_registration,registration_closed,enable_nsfw,email_already_exists
|
es | 89% | avatar,upload_avatar,show_avatars,archive_link,docs,replies,mentions,old_password,forgot_password,reset_password_mail_sent,password_change,new_password,no_email_setup,send_notifications_to_email,language,browser_default,downvotes_disabled,enable_downvotes,open_registration,registration_closed,enable_nsfw,donate_to_lemmy,donate,email_already_exists
|
||||||
fr | 89% | avatar,upload_avatar,show_avatars,archive_link,docs,replies,mentions,old_password,forgot_password,reset_password_mail_sent,password_change,new_password,no_email_setup,send_notifications_to_email,language,browser_default,downvotes_disabled,enable_downvotes,open_registration,registration_closed,enable_nsfw,email_already_exists
|
fr | 89% | avatar,upload_avatar,show_avatars,archive_link,docs,replies,mentions,old_password,forgot_password,reset_password_mail_sent,password_change,new_password,no_email_setup,send_notifications_to_email,language,browser_default,downvotes_disabled,enable_downvotes,open_registration,registration_closed,enable_nsfw,donate_to_lemmy,donate,email_already_exists
|
||||||
it | 90% | avatar,upload_avatar,show_avatars,archive_link,docs,old_password,forgot_password,reset_password_mail_sent,password_change,new_password,no_email_setup,send_notifications_to_email,language,browser_default,downvotes_disabled,enable_downvotes,open_registration,registration_closed,enable_nsfw,email_already_exists
|
it | 89% | avatar,upload_avatar,show_avatars,archive_link,docs,old_password,forgot_password,reset_password_mail_sent,password_change,new_password,no_email_setup,send_notifications_to_email,language,browser_default,downvotes_disabled,enable_downvotes,open_registration,registration_closed,enable_nsfw,donate_to_lemmy,donate,email_already_exists
|
||||||
nl | 100% | email_already_exists
|
nl | 99% | donate_to_lemmy,donate,email_already_exists
|
||||||
ru | 77% | cross_posts,cross_post,number_of_communities,preview,upload_image,avatar,upload_avatar,show_avatars,formatting_help,view_source,sticky,unsticky,archive_link,stickied,delete_account,delete_account_confirm,banned,creator,number_online,docs,replies,mentions,old_password,forgot_password,reset_password_mail_sent,password_change,new_password,no_email_setup,send_notifications_to_email,language,browser_default,downvotes_disabled,enable_downvotes,open_registration,registration_closed,enable_nsfw,recent_comments,theme,monero,by,to,transfer_community,transfer_site,are_you_sure,yes,no,email_already_exists
|
ru | 77% | cross_posts,cross_post,number_of_communities,preview,upload_image,avatar,upload_avatar,show_avatars,formatting_help,view_source,sticky,unsticky,archive_link,stickied,delete_account,delete_account_confirm,banned,creator,number_online,docs,replies,mentions,old_password,forgot_password,reset_password_mail_sent,password_change,new_password,no_email_setup,send_notifications_to_email,language,browser_default,downvotes_disabled,enable_downvotes,open_registration,registration_closed,enable_nsfw,recent_comments,theme,donate_to_lemmy,donate,monero,by,to,transfer_community,transfer_site,are_you_sure,yes,no,email_already_exists
|
||||||
sv | 89% | avatar,upload_avatar,show_avatars,archive_link,docs,replies,mentions,old_password,forgot_password,reset_password_mail_sent,password_change,new_password,no_email_setup,send_notifications_to_email,language,browser_default,downvotes_disabled,enable_downvotes,open_registration,registration_closed,enable_nsfw,email_already_exists
|
sv | 89% | avatar,upload_avatar,show_avatars,archive_link,docs,replies,mentions,old_password,forgot_password,reset_password_mail_sent,password_change,new_password,no_email_setup,send_notifications_to_email,language,browser_default,downvotes_disabled,enable_downvotes,open_registration,registration_closed,enable_nsfw,donate_to_lemmy,donate,email_already_exists
|
||||||
zh | 75% | cross_posts,cross_post,users,number_of_communities,preview,upload_image,avatar,upload_avatar,show_avatars,formatting_help,view_source,sticky,unsticky,archive_link,settings,stickied,delete_account,delete_account_confirm,banned,creator,number_online,docs,replies,mentions,old_password,forgot_password,reset_password_mail_sent,password_change,new_password,no_email_setup,send_notifications_to_email,language,browser_default,downvotes_disabled,enable_downvotes,open_registration,registration_closed,enable_nsfw,recent_comments,nsfw,show_nsfw,theme,monero,by,to,transfer_community,transfer_site,are_you_sure,yes,no,email_already_exists
|
zh | 75% | cross_posts,cross_post,users,number_of_communities,preview,upload_image,avatar,upload_avatar,show_avatars,formatting_help,view_source,sticky,unsticky,archive_link,settings,stickied,delete_account,delete_account_confirm,banned,creator,number_online,docs,replies,mentions,old_password,forgot_password,reset_password_mail_sent,password_change,new_password,no_email_setup,send_notifications_to_email,language,browser_default,downvotes_disabled,enable_downvotes,open_registration,registration_closed,enable_nsfw,recent_comments,nsfw,show_nsfw,theme,donate_to_lemmy,donate,monero,by,to,transfer_community,transfer_site,are_you_sure,yes,no,email_already_exists
|
||||||
|
|
||||||
|
<!-- translationsstop -->
|
||||||
|
|
||||||
If you'd like to update this report, run:
|
If you'd like to update this report, run:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ui
|
cd ui
|
||||||
ts-node translation_report.ts > tmp # And replace the text above.
|
ts-node translation_report.ts
|
||||||
```
|
```
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
|
2
ui/package.json
vendored
2
ui/package.json
vendored
|
@ -57,7 +57,7 @@
|
||||||
"engineStrict": true,
|
"engineStrict": true,
|
||||||
"husky": {
|
"husky": {
|
||||||
"hooks": {
|
"hooks": {
|
||||||
"pre-commit": "cargo clippy --manifest-path ../server/Cargo.toml --all-targets --all-features -- -D warnings && lint-staged"
|
"pre-commit": "ts-node translation_report.ts && git add ../README.md && cargo clippy --manifest-path ../server/Cargo.toml --all-targets --all-features -- -D warnings && lint-staged"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lint-staged": {
|
"lint-staged": {
|
||||||
|
|
61
ui/translation_report.ts
vendored
61
ui/translation_report.ts
vendored
|
@ -8,32 +8,51 @@ import { sv } from './src/translations/sv';
|
||||||
import { ru } from './src/translations/ru';
|
import { ru } from './src/translations/ru';
|
||||||
import { nl } from './src/translations/nl';
|
import { nl } from './src/translations/nl';
|
||||||
import { it } from './src/translations/it';
|
import { it } from './src/translations/it';
|
||||||
|
import fs from 'fs';
|
||||||
|
|
||||||
let files = [
|
let readmePath = '../README.md';
|
||||||
{ t: de, n: 'de' },
|
|
||||||
{ t: eo, n: 'eo' },
|
|
||||||
{ t: es, n: 'es' },
|
|
||||||
{ t: fr, n: 'fr' },
|
|
||||||
{ t: it, n: 'it' },
|
|
||||||
{ t: nl, n: 'nl' },
|
|
||||||
{ t: ru, n: 'ru' },
|
|
||||||
{ t: sv, n: 'sv' },
|
|
||||||
{ t: zh, n: 'zh' },
|
|
||||||
];
|
|
||||||
let masterKeys = Object.keys(en.translation);
|
|
||||||
|
|
||||||
let report = 'lang | done | missing\n';
|
let open = '<!-- translations -->';
|
||||||
report += '--- | --- | ---\n';
|
let close = '<!-- translationsstop -->';
|
||||||
|
|
||||||
for (let file of files) {
|
let readmeTxt = fs.readFileSync(readmePath, { encoding: 'utf8' });
|
||||||
let keys = Object.keys(file.t.translation);
|
|
||||||
let pct: number = (keys.length / masterKeys.length) * 100;
|
let before = readmeTxt.split(open)[0];
|
||||||
let missing = difference(masterKeys, keys);
|
let after = readmeTxt.split(close)[1];
|
||||||
report += `${file.n} | ${pct.toFixed(0)}% | ${missing} \n`;
|
|
||||||
|
let report = buildReport();
|
||||||
|
|
||||||
|
let alteredReadmeTxt = `${before}${open}\n\n${report}\n${close}${after}`;
|
||||||
|
|
||||||
|
fs.writeFileSync(readmePath, alteredReadmeTxt);
|
||||||
|
|
||||||
|
function buildReport(): string {
|
||||||
|
let files = [
|
||||||
|
{ t: de, n: 'de' },
|
||||||
|
{ t: eo, n: 'eo' },
|
||||||
|
{ t: es, n: 'es' },
|
||||||
|
{ t: fr, n: 'fr' },
|
||||||
|
{ t: it, n: 'it' },
|
||||||
|
{ t: nl, n: 'nl' },
|
||||||
|
{ t: ru, n: 'ru' },
|
||||||
|
{ t: sv, n: 'sv' },
|
||||||
|
{ t: zh, n: 'zh' },
|
||||||
|
];
|
||||||
|
let masterKeys = Object.keys(en.translation);
|
||||||
|
|
||||||
|
let report = 'lang | done | missing\n';
|
||||||
|
report += '--- | --- | ---\n';
|
||||||
|
|
||||||
|
for (let file of files) {
|
||||||
|
let keys = Object.keys(file.t.translation);
|
||||||
|
let pct: number = (keys.length / masterKeys.length) * 100;
|
||||||
|
let missing = difference(masterKeys, keys);
|
||||||
|
report += `${file.n} | ${pct.toFixed(0)}% | ${missing} \n`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return report;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(report);
|
|
||||||
|
|
||||||
function difference(a: Array<string>, b: Array<string>): Array<string> {
|
function difference(a: Array<string>, b: Array<string>): Array<string> {
|
||||||
return a.filter(x => !b.includes(x));
|
return a.filter(x => !b.includes(x));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue