2015-04-21 13 views
5

Tôi đang sử dụng Flask, Flask-Babel và Jinja2. Tôi đang cố gắng để tạo ra các tập tin .pot. Đó là những gì tôi đã làm cho đến nay.Pybabel tạo tệp nồi trống với jinja2

babel.cfg của tôi trông như thế này:

[python: **.py] 

[jinja2: **.html] 
encoding = utf-8 
extensions=jinja2.ext.autoescape,jinja2.ext.with_ 

Tôi khởi Flask-Babel với ứng dụng của tôi như thế này:

# Babel init 
babel = Babel(app) 
app.config['BABEL_DEFAULT_LOCALE'] = 'en' 

Trong thư mục mẫu của tôi, tôi làm có homepage.html:

... 
<div class="news-wrapper"> 
    <p class="quote">{{ gettext('Hey there') }}</p> 
    <p class="quote">{% trans %}Trying 42{% endtrans %}</p> 
    <p class="quote">{{ _('Maybe like this?') }}</p> 
</div> 
... 

Sau đó chạy lệnh này (trong khi tôi đang ở virtualenv của tôi):

pybabel extract -F babel.cfg -o messages.pot . 

Một trong những dòng đầu ra là:

extracting messages from templates/homepage.html (extensions="jinja2.ext.autoescape,jinja2.ext.with_", encoding="utf-8") 

Và nó là tạo ra một thông điệp. pot file với nội dung này:

# Translations template for PROJECT. 
# Copyright (C) 2015 ORGANIZATION 
# This file is distributed under the same license as the PROJECT project. 
# FIRST AUTHOR <EMAIL[email protected]>, 2015. 
# 
#, fuzzy 
msgid "" 
msgstr "" 
"Project-Id-Version: PROJECT VERSION\n" 
"Report-Msgid-Bugs-To: [email protected]\n" 
"POT-Creation-Date: 2015-04-21 10:06+0300\n" 
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 
"Last-Translator: FULL NAME <[email protected]>\n" 
"Language-Team: LANGUAGE <[email protected]>\n" 
"MIME-Version: 1.0\n" 
"Content-Type: text/plain; charset=utf-8\n" 
"Content-Transfer-Encoding: 8bit\n" 
"Generated-By: Babel 1.3\n" 

Tệp không có bản dịch của tôi.

Tôi không nhận được lỗi hoặc cảnh báo, nhãn không thể tìm thấy các biến thể gettext trong các tệp jinja2. NHƯNG khi tôi sử dụng gettext trong một tệp .py nó là chỉ hoạt động tốt.

Tôi có bỏ lỡ điều gì đó không? Cảm ơn

Trả lời

3

Sau khi bỏ ra hàng giờ để tìm hiểu, tôi đã tìm ra giải pháp, đăng để được trợ giúp trong tương lai nếu ai đó cần đến.

tôi đã Flask-Tài sản được cài đặt trong các mẫu của tôi, rõ ràng nếu bạn có nó, bạn cần phải thêm vào bạn babel.cfg:

extensions=jinja2.ext.autoescape,jinja2.ext.with_,webassets.ext.jinja2.AssetsExtension 

Từ các tài liệu Flask-Tài sản:

Nếu không, babel sẽ không trích xuất chuỗi từ bất kỳ mẫu nào bao gồm thẻ nội dung.

Tôi sẽ thực hiện yêu cầu kéo để kiểm tra xem bạn đã cài đặt Flask-Assets và Flask-Babel chưa và bạn đã thêm phần mở rộng phù hợp. một số lỗi/cảnh báo.

+3

Thiết 'im lặng = false' trong 'babel.cfg' của bạn sẽ giúp xác định các vấn đề: Vấn đề là, điều này thực sự sẽ là mặc định :( Cảm ơn bạn đã chỉ ra các trang web mở rộng Jinja2 – Manuel

+1

Phew, đây là một lỗi không rõ ràng - cảm ơn bạn đã đăng bản sửa lỗi của bạn, hoạt động hoàn hảo – rlafuente

2

Đối với những người khác có thể không sử dụng Phần mở rộng tài sản như được đề cập trong câu trả lời được chấp nhận, sự cố có thể nằm ở chính tệp babel.cfg.

Đối với tôi, sự cố xảy ra với tệp babel.cfg của tôi mà tôi đã lấy từ số tutorial này.

Sau đó, khi tôi chuyển sang sử dụng con lươn.cfg tập tin ngay từ câu hỏi ở đây, mọi thứ hoạt động tốt cho tôi.

Chỉ để ghi lại, đây là tệp babel.cfg có hiệu quả đối với tôi.

[python: **.py] 
[jinja2: **.html] 
encoding = utf-8 
extensions=jinja2.ext.autoescape,jinja2.ext.with_ 
4

Tôi gặp phải vấn đề tương tự và trong trường hợp của tôi sự cố đã chỉ định tệp đầu vào, tức là các tệp cần tìm chuỗi được đánh dấu để dịch.

Khi tôi chạy pybabel extract -F babel.cfg -o messages.pot như được đề xuất trong các hướng dẫn khác nhau (ví dụ: this one) Tôi gặp lỗi pybabel: error: no input files or directories specified.

Lệnh mà cuối cùng làm việc đối với tôi là:

pybabel extract -F babel.cfg -o messages.pot --input-dirs=. 
+0

Điều này làm việc cho tôi, cần phải thêm --input-dirs =. –

Các vấn đề liên quan