国外设计欣赏网站 - DOOOOR.com

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,微信登陆

搜索

[Drupal教程] t()函数在Drupal7中的用法详解

[复制链接]
发表于 10-13-2011 02:18 | 显示全部楼层 |阅读模式
记记Drupal7中t()函数的相关用法,如有疏漏之处,还望指正。
3 ^* Z$ l, a- T, P( ^: ~! _: Y2 |1 o8 v1 |" p
每个开发者必须理解的三个功能:1 P; [: o4 j8 x2 H/ S( I2 ^

3 U* X' C7 p1 F( P8 S8 h0 j1.t()是怎样被执行的?8 h5 f  l# B" z, F

. x$ i7 q; p9 Y: V2.Drupal怎样建立翻译表?- z; x. q+ M' U, Q* x* |

# U  C4 d' ?9 Y4 l0 Z3.怎样使用t()实现一些其它功能?
: {8 [2 v6 U7 ]! x$ W3 {
5 {* q- C$ K- B0 l* z
4 ~9 _4 w+ {0 c0 x
9 G. L& c* Z# h# d( Z首先,让我们看下t()的执行过程。如果多语言模块没被开启,并且第二个参数没被传递到t(),它仅仅返回原来的字符串。如果多语言模块被开启,并且传递给t()第二个参数,Drupal将试图用适当的语言替换掉默认的字符串。
. {* \9 R- _# }# n" f9 T: w
% q3 s4 J% x/ u- R& O
) m. ?8 d  ]) `; ]7 c/ O+ E; j/ I$ m0 s$ s, }# o( _
然后,让我们看下Drupal怎样生成翻译信息的。这有两个方面:人为的和技术上的。人为的方面,在Drupal官方上,有很多志愿者贡献自己的翻译文件(.po),你能下载安装它们。技术上的,该翻译组不是简单地搜索源代码调用t(),而是使用一个自动工具挑选出代码,且重新标示所有可翻译的字符串,这个工具只能翻译字面意思。你可以这样写:
9 c5 a6 P4 o0 N4 O; N8 O0 }. p- ^* u! z, d' C
t('This is my string');
& g) q1 t- l: R& X( E  O1 U+ A8 F' G5 M( |. L
但如果你象下面这样写,它不会有任何作用:
- r( }6 H: y5 ^& j# }; c5 R. R+ z5 j# c0 y) v7 B+ M6 m
$variable = 'This is a string';$ C: N& C8 j. ?/ \+ q9 R# L+ M, t- x) L
2 G8 i% |8 f# N0 K) k! Y7 e+ ^
t($variable);
8 {- d! V! S, k
* x5 b; y8 [$ M9 q) L% m2 W
为什么上面的代码不会有任何作用?因为当这个自动工具运行这段代码时,它不会执行这段代码,仅仅读取它。那个自动工具很难确认哪个字符串才是$variable变量。
& ~& Y4 N$ D- k5 O  d1 T% o# u$ N, I5 B; `, V
所以,最好给t()的第一个参数一个字符串,而不是变量。
$ c7 u$ l1 O% ~6 K% S# _! w. j( S/ |; V1 R; E6 o  _0 y# [* q+ b) }

, N/ Z; B* y5 |2 A% ?2 E
, S! a; G: _  V; T# X$ \最后,是关于t()怎样完成一些其它的功能。它提供了一个比常规方法更安全的变量处理方法。在许多php应用程序中,你可能见过这样的代码:; w0 n- `& s  p$ e; A3 |. \
3 K2 A7 l, [, d, X9 E) c8 u. E
print "Welcome, $username.";
& ^( B1 I6 _- J# w+ G# r: J/ w, F# r" R$ S
上面的代码就是显示用户输入的一个用户名。糟糕的是,用户可能输入一段Javascript或者其它代码在username这个变量里,这将会影响你的程序。' @1 t8 W3 P1 \( `2 U

" {6 Y- @1 T; F! a1 pt()提供一个多样的更安全的替代符。这时,它需要一个关联数组作为第二个参数。下面就是一段代码例子:
0 Z/ u. X2 e9 r1 l% y8 n% q2 ^- O, S5 R5 P
$values = array('@user' => $username);' R3 `7 b6 V; u
/ R! S' h( N9 U# o0 Y
print t('Welcome, @user', $values);
. V4 T0 f0 S+ R# [1 N2 A+ q
# {$ X: q: e9 p
上面的替换过程经过Drupal的安全处理。2 W) G8 a0 `  e" T/ J

, f& G  Z' m$ b% F4 F* S7 j/ c: Q9 Y. n$ `

& m, [' g6 ?3 `$ D1 ^7 `2 x如果替换符是以@开头,在替换它之前,Drupal将使用内置的check_plain()对值进行处理。, c- A) K# _- L7 U6 q& a: l: Y

" Z' {6 Z2 ~% y$ |如果你确信你的字符串不包含任何危险信息,那么你可以使用!开头。Drupal不会对值进行任何处理,除了替换。比如:
6 e  x, l' X( N6 ?
: n! M+ r; I* _& r( R" B# T# K$values = array('!url' => 'http://example.com');/ u/ G3 H# N3 a1 n

* d# e7 E. D9 s4 q) j; _6 Jprint t('The website can be found at !url', $values);

: Y; j, J+ S+ C! h! q8 V9 r$ V- T9 J) _0 p6 s' w7 u& A) N; h

5 c3 Z% j8 r& z, V/ [, C) F! H4 w  m, e$ O" y
第三种替换符是以%开头,它过滤掉代码,并告诉Drupal字符串是重点,
$ F% p$ M/ h: Z+ `
! ~( S/ X& G7 L0 Z' Z" J$values = array('%color' => 'blue');6 A; H- x4 _, O5 G7 |6 |
! X' p; c* r- I' G
print t('My favorite color is %color.', $values);
* }( S+ R" A  g3 Z( Q/ X

6 s) u1 C/ m  p2 Q7 h3 @它不仅移除危险的字符串,而且会在替换的文本两端加入强调标签,比如“<em></em>”。你可以在theme_placeholder()里查看详细实现。
4 I! y  z. g5 k- N+ _# `" y# n2 {
, g' L) S0 g# f7 f2 u) A9 Q% r5 r3 f4 M

% Z3 `' t3 ^9 K) _9 y, M) |; y还有更多的功能能被t()实现,format_plural()等。如果你象查看更多,请访问:http://api.drupal.org/api/function/t/7% t$ r& @! y# b8 a! |8 T
( n% l% A, U# [4 T% b
感谢溯游分享!!!! o* n0 a, V7 D; E9 e
; y$ j: Y( f4 W/ E, H
. i8 H2 O/ |; }; X0 o

- y) t6 Q8 l( r; H! A" J
# e, W) r3 ^1 R" N5 r* g: j0 O* Y5 K9 z$ {

|2011-2026-版权声明|平台(网站)公约|手机版|手机版|DOOOOR 设计网 ( 吉ICP备2022003869号 )

GMT+8, 11-11-2025 21:55 , Processed in 0.299606 second(s), 267 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表