代码拉取完成,页面将自动刷新
awesome-prometheus-alerts 翻译为中文
rules源仓库为https://github.com/samber/awesome-prometheus-alerts
使用百度API翻译为中文
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2024/4/17 11:20
# @Author : unclear
# @File : translate_prometheus_rule.py
"""
将普罗米修斯的rules翻译成中文
源目录: rules
目标目录:rules_zh
"""
import re
import os
import time
import requests
import yaml
import json
import hashlib
import random
def parse_yaml_file(yaml_file_path):
with open(yaml_file_path, 'r', encoding='utf-8') as stream:
try:
data = yaml.safe_load(stream)
return data
except yaml.YAMLError as exc:
print("Error parsing YAML file:", exc)
def write_to_yaml_file(data, output_file):
with open(output_file, 'w', encoding='utf-8') as file:
yaml.dump(data, file, allow_unicode=True, default_flow_style=False)
def baidu_translate(text, from_lang='en', to_lang='zh'):
# 创建盐值
salt = str(random.randint(32768, 65536))
app_id = 'xxx' # appid
secret_key = 'xx' # 密钥
# 取出模板变量
var_list = re.findall(r'{{[^}]+}}', text.split('\n')[0])
to_translate_text = re.sub(r'{{[^}]+}}', '#', text.split('\n')[0])
print(to_translate_text)
# 拼接待签名串
sign_str = app_id + to_translate_text + salt + secret_key
# MD5加密
m = hashlib.md5()
m.update(sign_str.encode('utf-8'))
sign = m.hexdigest()
# 构建请求参数
params = {
'appid': app_id,
'q': to_translate_text,
'from': from_lang,
'to': to_lang,
'salt': salt,
'sign': sign
}
# 发送GET请求
url = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
response = requests.get(url, params=params)
# 解析响应内容
result = json.loads(response.text)
# print(result)
if 'trans_result' in result and result['trans_result']:
# 免费版的api 1s只能请求1次
time.sleep(1.1)
# 取出翻译的第一个结果
translated_text = result['trans_result'][0]['dst']
print(translated_text, var_list)
# 换回变量
handled_text = '\n'.join([translated_text.replace('#', '{}').format(*var_list), *text.split('\n')[1:]])
return handled_text
else:
print(result)
raise Exception('Translation failed or no results returned.')
def traverse_directory_recursively(directory):
for entry in os.listdir(directory):
full_path = os.path.join(directory, entry)
print(full_path)
if os.path.isdir(full_path):
traverse_directory_recursively(full_path)
else:
content = parse_yaml_file(full_path)
zh_full_path = full_path.replace('rules', 'rules_zh')
if not os.path.exists(os.path.dirname(zh_full_path)):
os.makedirs(os.path.dirname(zh_full_path))
if os.path.isfile(zh_full_path):
print(zh_full_path)
continue
for one_rule in content['groups']:
if one_rule['rules']:
for one_alert in one_rule['rules']:
print(one_alert)
one_alert['annotations']['description'] = baidu_translate(one_alert['annotations']['description'])
one_alert['annotations']['summary'] = baidu_translate(one_alert['annotations']['summary'])
print(one_alert)
write_to_yaml_file(content, zh_full_path)
traverse_directory_recursively('rules')
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。