Files
coco 723ce1af5c a
2026-07-03 15:12:48 +08:00

83 lines
2.6 KiB
Python

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import svgwrite
import sys
from crowdin_api import CrowdinClient
project_id = 597587
token = sys.argv[1]
# https://developer.crowdin.com/api/v2/
def get_project_progress():
client = CrowdinClient(token=token)
languages = client.languages.list_supported_languages(limit=500)['data']
language_pairs = {}
for language in languages:
id = language['data']['id']
name = language['data']['name']
language_pairs[id] = name
languages = client.translation_status.get_project_progress(project_id, limit=100)['data']
for language in languages:
id = language['data']['languageId']
name = language_pairs.get(id)
if name == None:
name = id
language['data']['name'] = name
languages = list(map(lambda l: l['data'], languages))
languages = sorted(languages, key=lambda l: l['name'])
return languages
line_height = 26
svg_width = 500
def append_language_group(dwg, language, index):
label_width = 200
progress_width = 160
insert = 10
g = dwg.add(dwg.g(class_="font12", transform='translate(0,{})'.format(index * line_height)))
g.add(dwg.text(language['name'], insert=(label_width, 18), style='text-anchor:end;'))
translation_progress = language['translationProgress'] / 100.0
approval_progress = language['approvalProgress'] / 100.0
progress_insert = (label_width + insert, 11.4)
if translation_progress < 100:
g.add(dwg.rect(insert=progress_insert, size=(progress_width, 6), rx=3, ry=3, fill='#999',
style='filter:opacity(30%);'))
if translation_progress > 0 and approval_progress < 100:
g.add(dwg.rect(insert=progress_insert, size=(progress_width * translation_progress, 6),
rx=3, ry=3, fill='#5D89C3'))
if approval_progress > 0:
g.add(dwg.rect(insert=progress_insert, size=(progress_width * approval_progress, 6),
rx=3, ry=3, fill='#71C277'))
g.add(dwg.text('{}%'.format(language['translationProgress']),
insert=(progress_insert[0] + progress_width + insert, 18)))
return g
languages = get_project_progress()
print(languages)
dwg = svgwrite.Drawing('crowdin_project_progress.svg',
size=(svg_width, len(languages) * line_height))
# load web font by CSS @import
dwg.embed_stylesheet("""
@import url(https://fonts.googleapis.com/css?family=Noto+Sans);
.font12 {
font-family: "Noto Sans";
font-size: 12px;
fill: #999;
}
""")
for i in range(0, len(languages)):
append_language_group(dwg, languages[i], i)
dwg.save(pretty=True)