2011-01-28 54 views
9

我不知道我做錯了,但即使我提出一個新的語言/國際化/ setlang我的會話數據不會改變。我將翻譯成菲律賓語使用代碼'tl',但不知何故,它似​​乎並沒有工作。請幫忙。下面是一些代碼:Django的國際化setlang不改變會話數據django_language

# Django settings for ppdjango project. 
import os 

DEBUG = True 
TEMPLATE_DEBUG = DEBUG 

ADMINS = (
    # ('Your Name', '[email protected]'), 
) 

MANAGERS = ADMINS 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': 'bookmarksdb',      
     'USER': '',      # Not used with sqlite3. 
     'PASSWORD': '',     # Not used with sqlite3. 
     'HOST': '',      # Set to empty string for localhost. Not used with sqlite3. 
     'PORT': '',      # Set to empty string for default. Not used with sqlite3. 
    } 
} 

# Local time zone for this installation. Choices can be found here: 
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name 
# although not all choices may be available on all operating systems. 
# On Unix systems, a value of None will cause Django to use the same 
# timezone as the operating system. 
# If running in a Windows environment this must be set to the same as your 
# system time zone. 
TIME_ZONE = 'America/Chicago' 

# Language code for this installation. All choices can be found here: 
# http://www.i18nguy.com/unicode/language-identifiers.html 
# LANGUAGE_CODE = 'en-us' 
LANGUAGE_CODE = 'en-us' 

LANGUAGES = (
    ('tl', 'Filipino'), 
    ('en', 'English'), 
) 

SITE_ID = 1 

# If you set this to False, Django will make some optimizations so as not 
# to load the internationalization machinery. 
USE_I18N = True 

# If you set this to False, Django will not format dates, numbers and 
# calendars according to the current locale 
USE_L10N = True 

# Absolute path to the directory that holds media. 
# Example: "/home/media/media.lawrence.com/" 
MEDIA_ROOT = '' 

# URL that handles the media served from MEDIA_ROOT. Make sure to use a 
# trailing slash if there is a path component (optional in other cases). 
# Examples: "http://media.lawrence.com", "http://example.com/media/" 
MEDIA_URL = '' 

# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a 
# trailing slash. 
# Examples: "http://foo.com/media/", "/media/". 
ADMIN_MEDIA_PREFIX = '/media/' 

# Make this unique, and don't share it with anybody. 
SECRET_KEY = '35qqpsggj&v0^!rdabnr7daj(#gu2252hj4&[email protected])qa' 

# List of callables that know how to import templates from various sources. 
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader', 
    'django.template.loaders.app_directories.Loader', 
#  'django.template.loaders.eggs.Loader', 
) 

MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.locale.LocaleMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.cache.FetchFromCacheMiddleware' 
) 

ROOT_URLCONF = 'ppdjango.urls' 

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". 
    # Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
    os.path.join(os.path.dirname(__file__), 'templates') 
) 

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.auth", 
    "django.core.context_processors.debug", 
    "django.core.context_processors.i18n", 
    "django.core.context_processors.media", 
    'django.core.context_processors.request', 
) 

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.comments', 
    'bookmarks', 

    # Uncomment the next line to enable the admin: 
    'django.contrib.admin', 
    # Uncomment the next line to enable admin documentation: 
    # 'django.contrib.admindocs', 
) 

LOGIN_URL = '/login/' 
CACHE_BACKEND = 'db://cache_table' 
CACHE_MIDDLEWARE_SECONDS = 60 * 5 

#email 
SITE_HOST = '127.0.0.1:8000' 
DEFAULT_FROM_EMAIL = 'Django Bookmarks <[email protected]>' 
EMAIL_HOST = 'mail.ygamretuta.com' 
EMAIL_PORT = '' 
EMAIL_HOST_USER = '[email protected]' 
EMAIL_HOST_PASSWORD = '' 

我的語言設置形式: {

{% load i18n %} 

<!DOCTYPE html> 
<html> 
    <head> 
    <title> 
    Django Bookmarks | {% block title %}{% endblock %} 
    </title> 
    <link rel="stylesheet" type="text/css" href="/site_media/style.css"> 
    <script type="text/javascript" src="/site_media/jquery.js"></script> 
    {% block external %} 
     <script type="text/javascript" src="/site_media/search.js"></script> 
    {% endblock %} 
    </head> 

    <body> 
    {% block content %}{% endblock %} 

    <div id="footer"> 
     <form action="/i18n/setlang/" method="post"> 
     {% csrf_token %} 
     <input name="next" type="hidden" value="/friend/invite/" /> 
     <select name="language"> 
      {% for lang in LANGUAGES %} 
      <option value="{{ lang.0 }}">{{ lang.1 }}</option> 
      {% endfor %} 
     </select> 
     <input type="submit" value="Switch Language"/> 
     </form> 
    </div> 
    </body> 
</html> 

我的網址設置:

# the rest is above 
(r'^i18n/', include('django.conf.urls.i18n')), 

編輯我的語言運作良好,因爲如果我做' tl'設置中唯一的語言,頁面被翻譯成他加祿語

編輯包括整個設置文件

回答

5

我這個考察了一下,這裏有一些事情要檢查:

1在你的/朋友/邀請/相關視圖添加此行,以確保set_lang視圖是否正常工作。

print request.LANGUAGE_CODE 

如果沒有輸出「TL」,有可能是因爲你缺少的Django語言文件爲您的語言,因爲它們是在你的設置文件。這些文件應位於django/conf/locale/tl下。這裏有多個文件,這些文件不會由makemessages命令生成。

2-如果確實輸出'tl',那必定意味着你在django代碼樹中有一個tl文件夾。然後,我會嘗試讓它首先使用支持的語言。當試圖讓你的例子工作時,我也無法獲得標籤。通過切換到另一種支持的語言,在我的情況下,我已經能夠解決我的問題。

3-這將有助於讓模板呈現/朋友/邀請/查看,以便我們可以看到您正在翻譯的內容。在我的測試中,我使用了一個django字符串來避免產生我自己的消息。我做了什麼文件說,從英文抄到tagalog中使用。然後我修改了其中的一個字符串。問題是,django使用從文本生成的二進制文件,所以只有修改文本版本,即使在tagalog下,仍然會顯示英語中的django字符串。我發現,在不使用英語作爲基礎的情況下,我使用法語版本放在tagalog下。

0

嘗試添加 LANGUAGE_CODE = 'EN-US'

+0

試過了,沒有工作,雖然:( – yretuta 2011-01-28 06:47:22

+0

TEMPLATE_CONTEXT_PROCESSORS =( 「django.core.context_processors.i18n」, ) 有你在settings.py – sush 2011-01-28 06:57:36

+0

加入這個是肯定的。我想我必須將其更新到包括我的整個設置文件 – yretuta 2011-01-28 07:13:08

0

它不是一個緩存的問題? 嘗試刪除緩存測試..

+0

甚至在我添加緩存中間件之前發生了問題:) – yretuta 2011-01-29 02:04:38

1

你創建翻譯菲律賓,並把它在正確的位置在您的項目?如果是這樣,你把它放在哪裏?

Django中查找此算法繼 翻譯:

  • 首先,它看起來在應用程序目錄被呼叫的看法 區域設置目錄。如果它 找到所選 語言的翻譯,則翻譯將會安裝 。
  • 接下來,它查找項目目錄中的區域設置目錄。如果 找到了翻譯,則將安裝 翻譯。
  • 最後,它檢查在 django的/ CONF /區域設置Django的提供的基地翻譯。

菲律賓不是django支持的語言之一,所以你需要自己添加它。下面是一些我從djangobook.com

http://www.djangobook.com/en/2.0/chapter19/

的LocaleMiddleware只能選擇 語言的其中有一個 的Django提供的基礎的翻譯了。如果 要爲 提供翻譯應用程序已經 不是在Django的 源代碼樹的集翻譯,你會想在該 語言 至少基本的翻譯來提供。例如,Django使用 技術消息ID來翻譯 日期格式和時間格式 - 所以你 至少需要那些翻譯 爲系統正常工作。

一個好的起點就是複製 英語的.po文件,並在 至少在技術信息翻譯 - 也許 的驗證消息了。

技術消息ID很容易識別出 ;他們都是大寫字母。 您不會將消息ID轉換爲 與其他消息,您提供的 正確的本地變體提供的 英文值。例如,對於 DATETIME_FORMAT(或DATE_FORMAT或 TIME_FORMAT),這將是 字符串,您希望在您的 語言中使用該字符串。格式與 模板標籤所使用的格式字符串相同 。

我不確定這是否能解決您的問題,但希望它能幫助您達到目標。

0

我會檢查是否有使用django.utils.translation的停用或激活您的應用程序的方法,因爲我有麻煩一次,因爲它!

我還建議你看看pdb,看看在你嘗試更改語言時在django.views.i18n set_language視圖中會發生什麼。

0

如果我理解正確,將LANGUAGE_CODE設置爲tl可讓您在菲律賓語中加載您的網站。如果沒有,您可能會遇到一些有關語言環境設置的配置問題。

爲了幫助針點的問題,我建議做到以下幾點:

有語言設置形狀點到自身改變語言時。通過這種方式,我們在點擊之間進行了不小的比較。在這裏,我假設語言設置表單駐留在書籤url中。

<input name="next" type="hidden" value="/bookmarks/" /> 

接下來,將標題標記更改爲您的語言翻譯的django默認字符串。在這種情況下"Delete"

<title>{% trans "Delete" %}</title> 

您還可以添加其他語言,如FR,您的語言設置,看到一個Django提供的語言確實工作。

直接加載語言設置頁面將允許您更改語言,然後比較標題已更改(如果需要,可以使用其他標記)。在提供的信息中使用這種方法,語言切換工作在我的設置上。

15
MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware', 
+ 'django.middleware.locale.LocaleMiddleware', # you need this to activate language (code) 
    'django.middleware.common.CommonMiddleware', 
    ... 
)