Django:不工作的字符串翻译

时间:2018-03-08 00:53:20

标签: python django

我正在研究Django并面临翻译字符串的问题。此代码是Telegram bot的发送键盘。在代码中,您将看到SQL请求,因为机器人是在clear python上编写的。我需要翻译键盘文字" ru"或" en" (默认)取决于用户发送的文本。

def bot_message(request):
    def settinngs(chat_id, message):
       con = lite.connect('db.sqlite3')
       cur = con.cursor()
       sql = "SELECT City, Lang FROM Userprofile WHERE Id={} ".format(chat_id)
       cur.execute(sql)
       result = cur.fetchall()[0]

       keyboard = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
       button_change_city = types.KeyboardButton(text=_('Change name city'))
       button_subs = types.KeyboardButton(text=_('Subscriptions'))
       button_change_language = types.KeyboardButton(text=_('Change language'))
       backs_button = types.KeyboardButton(text=_('Back'))
       keyboard.add(button_change_city, button_subs, button_change_language, backs_button)
       bot.send_message(message.chat.id,
                     '{}{}\n{}{}'.format(_('Your city: '), result[0].capitalize(), _('Language: '),
                                         result[1]), reply_markup=keyboard)

我在.po和compilemessages .mo文件中创建了翻译

LANGUAGES = (
    ('ru', 'Russian'),
    ('en', 'English'),
)

USE_I18N = True
LOCALE_PATHS = (
     os.path.join(BASE_DIR, 'locale'),
) 

并在MIDDLEWARE中设置

MIDDLEWARE = [
   'django.middleware.locale.LocaleMiddleware',
   'django.middleware.security.SecurityMiddleware',
   'django.contrib.sessions.middleware.SessionMiddleware',
   'django.middleware.common.CommonMiddleware',
   'django.middleware.csrf.CsrfViewMiddleware',
   'django.contrib.auth.middleware.AuthenticationMiddleware',
   'django.contrib.messages.middleware.MessageMiddleware',
   'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

我做错了什么?

1 个答案:

答案 0 :(得分:0)

不完全理解你的问题,你可以稍微描述一下,但是当你按照翻译模块时,代码应该有用。

正如我在您的代码中看到的,代码中缺少一些设置:

# in your setting file
# define default language code 'ru' or 'en'

LANGUAGE_CODE = 'en'

在您的视图或控制器中,不要忘记导入翻译模块 -

# for translation, in your case
from django.utils.translation import ugettext as _