Tôi muốn quốc tế hóa cho dự án của mình. Tôi làm theo cách nó được mô tả trong tài liệu chính thức, nhưng nội địa hóa vẫn không hoạt động. Đây là cách tôi cố gắng có được sử dụng ngôn ngữ:Xác định ngôn ngữ người dùng trong Pyramid
def get_locale_name(request):
""" Return the :term:`locale name` associated with the current
request (possibly cached)."""
locale_name = getattr(request, 'locale_name', None)
if locale_name is None:
locale_name = negotiate_locale_name(request)
request.locale_name = locale_name
return locale_name
Nhưng request
không có attr "local_name", nhưng nó có "Accept-Language" và như vậy khi chức năng get_local_name
không tìm thấy "local_name" trong yêu cầu , nó gọi chức năng khác:
def negotiate_locale_name(request):
""" Negotiate and return the :term:`locale name` associated with
the current request (never cached)."""
try:
registry = request.registry
except AttributeError:
registry = get_current_registry()
negotiator = registry.queryUtility(ILocaleNegotiator,
default=default_locale_negotiator)
locale_name = negotiator(request)
if locale_name is None:
settings = registry.settings or {}
locale_name = settings.get('default_locale_name', 'en')
return locale_name
làm thế nào tôi có thể thấy negotiator
cố gắng để có được địa phương từ môi trường toàn cầu nhưng nếu nó không thể làm điều đó giá trị đặt từ config. Và tôi không thể hiểu tại sao Kim tự tháp không lấy ngôn ngữ trực tiếp từ trường yêu cầu "Accept-Language"?
Và, làm thế nào tôi có thể xác định chính xác miền địa phương?
Nhưng không cần tạo đối tượng được chấp nhận từ accept_language caus accept_language là allready instance of Accept() và có method best_match() của chính nó. Đó là cố gắng cho phiên bản kim tự tháp 1.2 cảm ơn nhiều – Denis
@Denis: Bạn thực sự là chính xác; 'accept_language' đã là một thể hiện của' Accept'. Đã sửa. –
@Martijin Pieters Dù sao thì cảm ơn bạn, tất cả đều hoạt động tốt)) – Denis