大佬教程收集整理的这篇文章主要介绍了为什么字典没有用 Flask-Babel 翻译,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在 Flask
编写网站。我使用 flask-babel
翻译成不同的语言。我使用 lazy_gettext
来翻译字典值。在网站上更改语言时,我包装的所有短语和句子都应翻译。除了 MgttTOAA 类中这个 mqtt.py 文件中包含的单词之外,所有内容都被翻译。告诉我可能是什么问题或建议其他一些翻译选项。谢谢
# mqtt.py
from app import socketio,app
from flask import request
from flask_mqtt import Mqtt
from flask_babel import lazy_gettext as _l
from app.tasks import schedulerTask
import Json
import copy
import logging
mqtt = Mqtt(app)
logger = logging.getLogger('flask.flask_mqtt')
logger.Disabled = True
class MqttTOAA(object):
# топик контроля воротами забора,топик данных воротами забора,топик контроля гаражными,топик данных гаражными
type_topic = ["/Control","/Data"]
m_request_state = {"comm": "3"} # запрос на получение статуса ворот
m_start = {"Gate": "Start"} # сообщение для открытия/закрытия ворот
m_stop = {"Gate": "Stop"} # сообщение для остановки ворот
qos_request = 1
qos_sub = 2
struct_state_devices = None # словарь информации о состоянии устройств
# состояние ворот: действие
# действие: статус,отображаемый на странице
# поля: текст кнопки,отображаемый статус,код устройства
# статус ворот # предыдущая позиция ворот и отметка о том,были ли отсановленны
Dict_gate = {"Dict_state_button": {'con_Clos': _l(u'Открыть'),'con_Open': _l(u'Закрыть'),"fl_OpenClos": (_l(u'Продолжить'),_l(u'Остановить'),_l(u'Прервать'))},"Dict_state_text": {_l(u'Открыть'): _l(u'закрыты'),_l(u'Закрыть'): _l(u'открыты'),_l(u'Продолжить'): _l(u'остановлены'),_l(u'Прервать'): _l(u'закрываются'),_l(u'Остановить'): (_l(u'открываются'),_l(u'закрываются'),_l(u'в движении'))},"Dict_type_element": {"button": u'',"text": u'',"device_code": u'',},"state_gate": {},"position": {"state": u'',"stop": falsE},"reverse": false,}
close_msg = _l(u'закрываются')
open_msg = _l(u'открываются')
POol_TIME = 2 # Интервал отправки запроса брокеру
end_publish = None
devices = None
app_Now = None
schedulers_List = List()
sch_task = None
code_List = List()
def __init__(self,devices,app):
mqtt._connect()
self.devices = devices
self.app_Now = app
self.sch_task = schedulerTask()
self.create_devices_Dict()
self.handle_mqtt_connect()
self.mqtt_onmessage = mqtt.on_message()(self._handle_mqtt_messagE)
self.mqtt_onlog = mqtt.on_log()(self._handle_logging)
self.socketio_error = socketio.on_error()(self._handle_error)
self.handle_change_state = socketio.on('change_state')(self._handle_change_statE)
self.handle_unsubscribe_all = socketio.on('unsubscribe_all')(self._handle_unsubscribe_all)
# ожидание подключения к брокеру,# затем подписка на топик и запуск потока для постоянной отсылки сообщений в топик Control
def handle_mqtt_connect(self):
task = None
for dev in self.devices:
if Dev.device_code not in self.code_List: # запущен ли уже поток с таким кодом
mqtt.subscribe("BK" + dev.device_code + self.type_topic[1],self.qos_sub)
self.code_List.append(dev.device_codE)
task = self.sch_task.add_scheduler_publish(dev.device_code,mqtt,"BK" + dev.device_code +
self.type_topic[0],self.m_request_state,self.qos_request,self.POol_TIME)
if task is not None:
self.schedulers_List.append(task)
if len(self.schedulers_List) > 0:
self.sch_task.start_schedulers()
self.code_List.clear()
# обработчик ошибок
@staticmethod
def _handle_error():
print(request.event["message"]) # "my error event"
print(request.event["args"]) # (data,)
# отмена подписки на топик
@staticmethod
def _handle_unsubscribe_all():
mqtt.unsubscribe_all()
# функция изменения состояния ворот по нажатию
def _handle_change_state(self,codE):
print(codE)
# print(self.struct_state_devices[code])
message = None
if code is not None:
try:
type_g = self.struct_state_devices[code]["state_gate"]
if type_g["fl_OpenClos"] == 1: # ворота в движении -> остановка
message = self.m_stop
else:
if self.struct_state_devices[code]["reverse"] is True:
# остановились и двигаются в обратном направлении -> остановка
if self.struct_state_devices[code]["position"]["state"] == self.close_msg:
message = self.m_stop
self.struct_state_devices[code]["position"]["state"] = self.open_msg
else:
message = self.m_start
else: # ворота остановленны -> продолжение движения
message = self.m_start
print("Msg:" + str(messagE))
except Exception as ex:
print(eX)
if message is not None:
mqtt.publish("BK" + code + self.type_topic[0],Json.dumps(messagE),self.qos_request)
else:
print("Error change state " + codE)
# обработка принятых сообщений от топика,на который подписан
def _handle_mqtt_message(self,clIEnt,userdata,messagE):
# print("Get message")
data = Dict(
topic=message.topic,payload=message.payload.decode(),qos=message.qos,)
try:
data = Json.loads(data['payload'])
self.gate_msg(data)
except Exception as ex:
print("Exception: " + str(eX))
# логирование
@staticmethod
def _handle_logging(self,level,buf):
print(level,buf)
pass
# создание словаря устройств
def create_devices_Dict(self):
if self.struct_state_devices is None:
self.struct_state_devices = Dict()
for dev in self.devices:
self.struct_state_devices[dev.device_code] = self.Dict_gate.copy() # добавление словаря устройства
if Dev.typedev.reverse:
self.struct_state_devices[dev.device_code]['reverse'] = True
# функция измения состояния гаражных ворот (с реверсом)
def gate_msg(self,data):
k = ""
code = data["esp_ID"][2:]
Dict_dev = copy.deepcopy(self.struct_state_devices[code])
Dict_dev["state_gate"] = data.copy()
try:
if Dict_dev["state_gate"]["con_Clos"] == 0: # ворота закрыты
# print("1")
k = "con_Clos"
Dict_dev["position"]["state"] = k
Dict_dev["position"]["stop"] = false
elif Dict_dev["state_gate"]["con_Open"] == 0: # ворота открыты
# print("2")
k = "con_Open"
Dict_dev["position"]["state"] = k
Dict_dev["position"]["stop"] = false
elif Dict_dev["state_gate"]["fl_OpenClos"] == 0: # ворота остановленны/движение прервано
# print("3")
k = "fl_OpenClos"
# обратный ход ворот при закрытии
if Dict_dev["position"]["state"] == self.close_msg and Dict_dev["reverse"] is True:
# print("4")
k1 = 1
k2 = 0
Dict_dev["Dict_type_element"]["text"] = \
Dict_dev["Dict_state_text"][Dict_dev["Dict_state_button"][k][k1]][k2]
Dict_dev["position"]["stop"] = false
else:
# print("5")
k1 = 0
Dict_dev["Dict_type_element"]["text"] = \
Dict_dev["Dict_state_text"][Dict_dev["Dict_state_button"][k][k1]]
Dict_dev["position"]["stop"] = True
elif Dict_dev["state_gate"]["fl_OpenClos"] == 1: # ворота в движении
# print("6")
k = "fl_OpenClos"
# Если невозможно определить открываются или закрываются ворота
if len(Dict_dev["position"]["state"]) == 0:
# print("7")
k1 = 1
k2 = 2
Dict_dev["Dict_type_element"]["text"] = \
Dict_dev["Dict_state_text"][Dict_dev["Dict_state_button"][k][k1]][k2]
# определение - закрываются или открываются ворота
elif Dict_dev["position"]["state"] == "con_Clos" or \
Dict_dev["position"]["state"] == self.open_msg:
if Dict_dev["position"]["stop"]:
# print("8")
k1 = 1
k2 = 1
Dict_dev["position"]["stop"] = false
Dict_dev["Dict_type_element"]["text"] = \
Dict_dev["Dict_state_text"][Dict_dev["Dict_state_button"][k][k1]][k2]
else:
# print("9")
k1 = 1
k2 = 0
Dict_dev["Dict_type_element"]["text"] = \
Dict_dev["Dict_state_text"][Dict_dev["Dict_state_button"][k][k1]][k2]
elif Dict_dev["position"]["state"] == "con_Open" or \
Dict_dev["position"]["state"] == self.close_msg:
if Dict_dev["reverse"]:
# print("10")
k1 = 2
Dict_dev["Dict_type_element"]["text"] = \
Dict_dev["Dict_state_text"][Dict_dev["Dict_state_button"][k][k1]]
else:
if Dict_dev["position"]["stop"]:
# print("11")
k1 = 1
k2 = 0
Dict_dev["position"]["stop"] = false
Dict_dev["Dict_type_element"]["text"] = \
Dict_dev["Dict_state_text"][Dict_dev["Dict_state_button"][k][k1]][k2]
else:
# print("12")
k1 = 1
k2 = 1
Dict_dev["Dict_type_element"]["text"] = \
Dict_dev["Dict_state_text"][Dict_dev["Dict_state_button"][k][k1]][k2]
if Dict_dev["position"]["state"] != Dict_dev["Dict_type_element"]["text"]:
# print("13")
Dict_dev["position"]["state"] = Dict_dev["Dict_type_element"]["text"]
if k == "fl_OpenClos":
Dict_dev["Dict_type_element"]["button"] = Dict_dev["Dict_state_button"][k][k1]
else:
Dict_dev["Dict_type_element"]["button"] = Dict_dev["Dict_state_button"][k]
Dict_dev["Dict_type_element"]["text"] = \
Dict_dev["Dict_state_text"][Dict_dev["Dict_state_button"][k]]
except Exception as ex:
print("Exception (gate_msg): " + str(eX))
Dict_dev["Dict_type_element"]["device_code"] = data["esp_ID"][2:]
Dict_dev["Dict_type_element"]["temp"] = data["temp_1"]
Dict_dev["Dict_type_element"]["button"] = copy.deepcopy(str(Dict_dev["Dict_type_element"]["button"]))
Dict_dev["Dict_type_element"]["text"] = copy.deepcopy(str(Dict_dev["Dict_type_element"]["text"]))
self.struct_state_devices[code] = copy.deepcopy(Dict_dev)
socketio.emit('mqtt_message',data=Dict_dev["Dict_type_element"])
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的为什么字典没有用 Flask-Babel 翻译全部内容,希望文章能够帮你解决为什么字典没有用 Flask-Babel 翻译所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。