Ik wil mijn (PHP) applicatie in meerdere talen aanbieden. Ik weet dat ik binnen PHP gebruik kan maken van gettext. Hierbij schrijf je in de code zelf volledige zinnen en haal je een eventuele vertaling uit een .po bestand:
Het voordeel is dat de code meteen een soort van gedocumenteerd wordt door deze zinnen. Het nadeel is, dat als je lange zinnen hebt, je code erg onderbroken wordt. Een andere mogelijkheid is dan om de strings te vervatten in sleutelbenamingen en deze sleutels in een array uit te werken tot zinnen:
Voordeel is compactere code, nadeel is minder informatie in de code over de werking. Ook heb ik gemerkt dat de sleutel soms langer is dan de sting zelf:
Dat is ook weer onhandig. Welke methode gebruik jij? (Of gebruik je nog een andere methode). Waarom gebruik je die methode?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| function foo($input = array(), $key = null) { if (!isset($input)) { set_message(_('Er was geen input gegeven')); $cache = cache_get("input:$key"); if ($cache == 0) { refresh_cache(); $cache = cache_get("locale:$key"); set_message(_('Data stond niet in het cache. Cache is nu aangemaakt, zodat de applicatie volgende keer sneller werkt')); } $output = unserialize($cache->data); } return $output; } |
Het voordeel is dat de code meteen een soort van gedocumenteerd wordt door deze zinnen. Het nadeel is, dat als je lange zinnen hebt, je code erg onderbroken wordt. Een andere mogelijkheid is dan om de strings te vervatten in sleutelbenamingen en deze sleutels in een array uit te werken tot zinnen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| $t = array( 'NO_INPUT_GIVEN' => 'Er was geen input gegeven', 'DATA_NOT_IN_CACHE' => 'Data stond niet in het cache. Cache is nu aangemaakt, zodat de applicatie volgende keer sneller werkt' ); function foo($input = array(), $key = null) { if (!isset($input)) { set_message(_('NO_INPUT_GIVEN')); $cache = cache_get("input:$key"); if ($cache == 0) { refresh_cache(); $cache = cache_get("locale:$key"); set_message(_('DATA_NOT_IN_CACHE')); } $output = unserialize($cache->data); } return $output; } |
Voordeel is compactere code, nadeel is minder informatie in de code over de werking. Ook heb ik gemerkt dat de sleutel soms langer is dan de sting zelf:
PHP:
1
2
3
4
5
6
7
| $t = array( 'SYSTEM_BAR' => 'Bar!' ); function system_foo() { echo _('SYSTEM_BAR'); } |
Dat is ook weer onhandig. Welke methode gebruik jij? (Of gebruik je nog een andere methode). Waarom gebruik je die methode?