在 [Django] Internationalization 國際化〈 I 〉已介紹如何在 view 和 template 中進行國際化,接下來本文將介紹如何實現國際化。
首先,介紹如何產生語言檔 (language file),在此仍以專案繁體中文化為例。
在專案根目錄下,鍵入 django-admin makemessage -l zh_TW。
此命令將在專案根目錄下產生 /local/zh_TW/LC_LANGUAGE/django.po。
開啟 django.po 您將會看到以下範例:
#: path/to/python/module.py:23
msgid "Welcome to my homepage"
msgstr ""
在此快速說明 msgid 和 msgstr。
msgid:是您在 view 或 template 中準備翻譯的部分
【例如:_(Welcome to my homepage) 或 {% trans "Welcome to my homepage" %}】
msgstr:是您預期翻譯後的結果。【例如:歡迎來到我的烘培雞】
在 djago.po 檔中將所有 msgstr 皆填入或存檔,將可進行接下來的步驟。
重新鍵入 django-admin makemessage -l zh_TW。如果您有多種語言,可鍵入 django-admin makemessage -a。
接著,我們將編譯語言檔 django-admin compilemessages。
如此一來,我們已準備好專案繁體中文的翻譯檔且完成專案的繁體中文化。
2013年3月8日 星期五
2013年2月26日 星期二
[Django] Internationalization 國際化 〈 I 〉
Django 在 view 和 template 中對於國際化有完整的支持。
以下將概述如何在 view 和 template 中進行國際化〈在此以專案繁中化為例〉:
首先必須將 settings.py 中的 USE_I18N 設置為 True,並修改 LANGUAGE_CODE = 'zh_TW'。
接下來,將逐一介紹 view 和 template 國際化的方法。
[View]
Django 所使用 Python 標準的翻譯器 ── gettext。在 views.py 中必須先加入 from django.utils.translation import gettext as _,如以一來將可使用 _ 取代 gettext。
接下來,請參考下列範例:
【也可使用
上述範例也可改寫為:
如果遇上函式包含變數,可寫為:
[Template]
在 template 中進行國際化較為簡單,僅需在
template 的頂端放置
並在需要國際化的部分改寫為
如此一來將完成 view 和 template 的國際化。
以下將概述如何在 view 和 template 中進行國際化〈在此以專案繁中化為例〉:
首先必須將 settings.py 中的 USE_I18N 設置為 True,並修改 LANGUAGE_CODE = 'zh_TW'。
接下來,將逐一介紹 view 和 template 國際化的方法。
[View]
Django 所使用 Python 標準的翻譯器 ── gettext。在 views.py 中必須先加入 from django.utils.translation import gettext as _,如以一來將可使用 _ 取代 gettext。
接下來,請參考下列範例:
def homepage(request):
output = _("Welcome to my homepage.")【也可使用
output = gettext("Welcome to my homepage.")】return HttpResponse(output)上述範例也可改寫為:
def homepage(request):
sentence = "Welcome to my homepage."
output = _(sentence)
return HttpResponse(output)如果遇上函式包含變數,可寫為:
def homepage(request, variable):
output = _('%(variable)s is a variable.') % {'variable': variable}
return HttpResponse(output)[Template]
在 template 中進行國際化較為簡單,僅需在
template 的頂端放置
{% load i18n %},並在需要國際化的部分改寫為
{% trans "Welcome my homepage" %},如此一來將完成 view 和 template 的國際化。
2012年12月12日 星期三
[JavaScript] input type='text' 取值比大小
今天在開發 javascript 的時候,發現從 HTML 取得的 input type='text' 值在進行「比大小」的時候會發生奇怪的錯誤。我們來看看下面範例:
<script type='text/javascript'>
function form_check(){
var a = example.input_value.value;
var b = example.compare_value.value;
if (a > b){alert("a is greater than b.");}
}
</script>
<form name='example' ... onsubmit='return form_check();'>
<input type='text' name='input_value' />
<input type='text' name='compare_value' />
<input type='submit' ... value='Submit' />
如果今天在瀏覽器上輸入 a 跟 b 的值之後並點選 submit,此時 javascript function 會進行 a, b 值的比較;如果 a 大於 b,會跳出 a 大於 b 的訊息。
只不過,神奇的錯誤發生了!!!
1 ) 若輸入 a = 80, b = 50,則順利跳出 a 大於 b 的訊息
2 ) 若輸入 a = 100, b = 50,則不會跳出 a 大於 b 的訊息
經過谷哥大神的開示,我發現,每次輸入 text 的直接為 string,並非我們所想像的 integer。因此, 函式 form_check 進行的比較是字串大小的比較,而非「數值」大小的比較。如果要進行數值大小的比較,必須進行下列的修正:
<script type='text/javascript'>
function form_check(){
var a = example.input_value.value;
var b = example.compare_value.value;
if (parseInt(a) > parseInt(b)){ alert("a is greater than b."); }
}
</script>
如此一來,我們將順利比較輸入值的大小!
P.S. 如進行一般數值大小的比較,可使用 parseFloat( )。
<script type='text/javascript'>
function form_check(){
var a = example.input_value.value;
var b = example.compare_value.value;
if (a > b){alert("a is greater than b.");}
}
</script>
<form name='example' ... onsubmit='return form_check();'>
<input type='text' name='input_value' />
<input type='text' name='compare_value' />
<input type='submit' ... value='Submit' />
如果今天在瀏覽器上輸入 a 跟 b 的值之後並點選 submit,此時 javascript function 會進行 a, b 值的比較;如果 a 大於 b,會跳出 a 大於 b 的訊息。
只不過,神奇的錯誤發生了!!!
1 ) 若輸入 a = 80, b = 50,則順利跳出 a 大於 b 的訊息
2 ) 若輸入 a = 100, b = 50,則不會跳出 a 大於 b 的訊息
經過谷哥大神的開示,我發現,每次輸入 text 的直接為 string,並非我們所想像的 integer。因此, 函式 form_check 進行的比較是字串大小的比較,而非「數值」大小的比較。如果要進行數值大小的比較,必須進行下列的修正:
<script type='text/javascript'>
function form_check(){
var a = example.input_value.value;
var b = example.compare_value.value;
if (parseInt(a) > parseInt(b)){ alert("a is greater than b."); }
}
</script>
如此一來,我們將順利比較輸入值的大小!
P.S. 如進行一般數值大小的比較,可使用 parseFloat( )。
2012年11月2日 星期五
[HTML 5] 兩種不同的 form SUBMIT
話說 HTML 5 推廣一陣子囉!我還是只會使用舊有方法編輯 html 檔案。直到最近,公司的專案請外包廠商編寫 CSS + html,我才發現一個 form submit 可以有兩種不同寫法。
首先,介紹舊有寫法:
<form name="example" method="post (get)" action="form action">
<!-- FORM 內容 -->
<input type="submit" name="btn_name" value="Submit" />
</form>
最近學到的新方法:
<form id="example" method="post (get)" action="form action">
<!-- FORM 內容 -->
</form>
<button type="submit" form="example">Submit</button>
有沒有發現什麼不一樣呢?
答案是 HTML 5 的 button 標籤可以寫在 from 的外頭,透過 button 標籤裡的 form 參數作為按鍵與表單的連結。請注意, button form 參數的值必須等同於表單的 id。
想更了解 <button> 如何使用嗎?請參考這裡。
首先,介紹舊有寫法:
<form name="example" method="post (get)" action="form action">
<!-- FORM 內容 -->
<input type="submit" name="btn_name" value="Submit" />
</form>
最近學到的新方法:
<form id="example" method="post (get)" action="form action">
<!-- FORM 內容 -->
</form>
<button type="submit" form="example">Submit</button>
有沒有發現什麼不一樣呢?
答案是 HTML 5 的 button 標籤可以寫在 from 的外頭,透過 button 標籤裡的 form 參數作為按鍵與表單的連結。請注意, button form 參數的值必須等同於表單的 id。
想更了解 <button> 如何使用嗎?請參考這裡。
2012年11月1日 星期四
[Avria] Generation of update structure failed. UpdateLib delivers error 537 解決方法
前幾天,外國友人急電,跟我說:「他的電腦無法自動更新防毒軟體 (Ariva)」,請我過去幫他看看。到了他家,看了更新失敗的 log 之後,發現是 Generation of update structure failed. UpdateLib delivers error 537 問題。上網查詢後,發現蠻多人有這樣的問題,當然解決方法也不少囉!
發生 Generation of update structure failed. UpdateLib delivers error 537 問題的解決方法,請參考這裡。筆者所紀錄的,為此次解決問題的方法。
1. 先從這裡下載 Avira 離線更新工具
2. 解壓縮avira_fusebundlegen-win32-en.zip,開啟 avira_fusebundlegen-WIN32-EN 資料夾
3. 執行 fusebundle.exe 並等待一段時間,在 install 資料夾下產生 vdf_fusebundle.zip
4. 開啟 Ariva ,選擇【更新】→【手動更新】→【選擇 vdf_fusebundle.zip】
這裡有一項相當重要的部分要注意,如果您所安裝的作業系統為 Windows 64 位元,在執行 fusebundle.exe 時,必須在 fusebundle.conf 中增加一個參數 platform= win32。
發生 Generation of update structure failed. UpdateLib delivers error 537 問題的解決方法,請參考這裡。筆者所紀錄的,為此次解決問題的方法。
1. 先從這裡下載 Avira 離線更新工具
2. 解壓縮avira_fusebundlegen-win32-en.zip,開啟 avira_fusebundlegen-WIN32-EN 資料夾
3. 執行 fusebundle.exe 並等待一段時間,在 install 資料夾下產生 vdf_fusebundle.zip
4. 開啟 Ariva ,選擇【更新】→【手動更新】→【選擇 vdf_fusebundle.zip】
這裡有一項相當重要的部分要注意,如果您所安裝的作業系統為 Windows 64 位元,在執行 fusebundle.exe 時,必須在 fusebundle.conf 中增加一個參數 platform= win32。
2012年10月21日 星期日
[JavaScript] 燈箱效果 ── Lytebox
先前開發公司專案時,被要求使用類似「燈箱特效」顯示相關聯結的內容。藉由「燈箱」作為關鍵字搜尋,發現已有強者寫好的 JS 可利用,且大多數使用者推薦 lightbox2。使用 lightbox2 相當簡單,藉由下載官方網站整包檔案,解壓縮並加入專案,即可立即使用!只不過, lightbox2 僅可嵌入圖檔,無法嵌入網頁,所以不符合需求。
國父革命十一次才成功,一次的失敗不算什麼!在努力不懈搜尋之下,發現另一套 JS ── Lytebox 可嵌入網頁內容,這不就是符合我們所要的需求嗎?!在這兒,我將記錄如何安裝與使用 Lytebox,達到「燈箱」效果並嵌入靜態網頁。
國父革命十一次才成功,一次的失敗不算什麼!在努力不懈搜尋之下,發現另一套 JS ── Lytebox 可嵌入網頁內容,這不就是符合我們所要的需求嗎?!在這兒,我將記錄如何安裝與使用 Lytebox,達到「燈箱」效果並嵌入靜態網頁。
2012年6月26日 星期二
[Django] Installing Django with Apache & mod_wsgi
在 Django 安裝及簡介 文章中曾介紹如何安裝 Django。
不過,若要將開發的網頁透過 domain 分享給世界各地的人欣賞,
則需要設定 apache 以達到這個目的。
下面將一步一步介紹如何在 apache 上安裝 Django:
PART 1 - Server 的部署
安裝 Apache 及 mod_wsgi
安裝 Django 請參考這裡
建立一資料夾儲存網站資料〈此為筆者存放位置,讀者可自行決定〉
PART 2 - 設定 domain name
並加入下列內容:
PART 3 - Django 測試
建立 Django 專案
產生一個 wsgi 的檔案
在 django.wsgi 檔案中編輯下列內容:
修改 apache 設定
於 default 檔案中‧‧‧
修改下列內容:
增加下列內容:
啟動 site
最後,打開網址,並輸入 http://domainname 就會看到 Django 安裝完成的畫面囉!
不過,若要將開發的網頁透過 domain 分享給世界各地的人欣賞,
則需要設定 apache 以達到這個目的。
下面將一步一步介紹如何在 apache 上安裝 Django:
PART 1 - Server 的部署
安裝 Apache 及 mod_wsgi
> sudo apt-get install apache2 libapache2-mod-wsgi安裝 Django 請參考這裡
建立一資料夾儲存網站資料〈此為筆者存放位置,讀者可自行決定〉
> sudo mkdir /opt/wwwPART 2 - 設定 domain name
> sudo vi /etc/hosts並加入下列內容:
192.168.1.1 domainname 〈此為筆者之假設,請讀者自行決定〉PART 3 - Django 測試
建立 Django 專案
> cd /opt/www> sudo django-admin.py startproject helloworld產生一個 wsgi 的檔案
> sudo mkdir /opt/www/helloworld/apache> sudo vi /opt/www/helloworld/apache/django.wsgi在 django.wsgi 檔案中編輯下列內容:
import os
import sys
path = '/opt/www'
if path not in sys.path:
sys.path.insert(0, '/opt/www')
os.environ['DJANGO_SETTING_MODULE'] = 'helloworld.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler( )修改 apache 設定
> sudo vi /etc/apache2/sites-available/default於 default 檔案中‧‧‧
修改下列內容:
DocumentRoot /var/www -> /opt/www/helloworld
<Directory /var/www> -> <Directory /opt/www/helloworld>增加下列內容:
WSGIScriptAlias / /opt/www/helloworld/apache/django.wsgi啟動 site
> sudo a2ensite default
> sudo service apache2 reload最後,打開網址,並輸入 http://domainname 就會看到 Django 安裝完成的畫面囉!
訂閱:
文章 (Atom)