t() - használata úgy, hogy a szöveg Magyar nyelvű.

sbence képe

Sziasztok,

A helyzet az, hogy a t() függvénynek magyar nyelvű szöveget akarok megadni, mivel a későbbiek során szeretném elkészíteni az angol változatot.

A probléma az, hogy a Drupal-nak nem tudom megadni, hogy a forrás nyelv (amit megadtam a kódban) magyar nyelvű, így a megadott szöveget angolnak veszi. Magyar szöveget magyarra fordítani ügye értelmetlen.. e helyett ez kellene: magyar szöveget angolra.

Végignéztem a függvényről szóló dokumentációt is, de igazából nem találtam rá konkrét megoldást.

Jelenleg ezt a megoldást próbáltam alkalmazni, sajnos sikertelenül:

  1. t(
  2. "@count db",
  3. '@count' => $count
  4. ),
  5. 'langcode' => 'hu'
  6. )
  7. );

Elvileg a langcode lenne rá a megoldás kulcsa, de ahogy szerintem értelmezem ez csak a megjelenítést változtatja, úgy hogy a t() angol szövegét x nyelven mutatja (ha van).

Drupal verzió: 
Bálint képe

Erre nincs megoldás, a t() függvény mindig angol nyelvű szöveget vár. Fordítva kell eljárnod, először mindent angolul írj meg, majd a fordítási felületen fordítsd magyarra.

Ez jól is van így, ha belegondolsz, a forráskódban semmi keresnivalója nem angol szövegnek. :)

3
-1
sbence képe

Jogos a dolog, sajnos nem vagyok perfect angol tudású. De hát, akkor elengedhetetlen lesz megtanulni.

Köszönöm a választ!

1
0
Illyés Edit képe

Ha egyáltalán nincs szükség az angolra, akkor elvileg ki lehet íratni t() nélkül. Viszont erre nem jó rászokni, mert mindig át kell gondolni, honnan jön a karakterlánc, biztonságos-e, és az ember előbb-utóbb hibázik.

A Drupal 7.8-as verziója óta ilyen esetekben a format_string() használata javasolt – ugyanazokat a biztonsági és helyettesítési szolgáltatásokat nyújtja, mint a t(), fordítás nélkül.

6
0
nevergone képe

Köszönöm, ma is tanultam valamit. :)

0
0
sbence képe

Köszönöm, már alkalmazom is. A cél csak az volt, hogy ne kerüljön magyar szöveg a fordítási felületre úgy, hogy magyar fordításra vár (tehát fordítatlan karakterlánc), pedig már magyar a szöveg. Amint lesz egy kis időm neki esek az angolosításnak.

Bár érdekes szerintem, hogy nincs Drupal-os megoldás az általam felhozott problémára.

0
0
vajdasági képe

Az elottem szolok mar megirtak hogy a Drupalban az az elkepzeles hogy a szovegeket angolul viszed be es a t() forditja a megfelelo nyelvre. Ez az elvaras, ehhez kell tartani magunkat.

Na most ha te megis egy magyar szoveget viszel be akkor a t() mivel nincs ra forditas valtozatlanul ugyanazt fogja kiadni is.

Nem ertem igazan miert gond ez neked. Ha angolul bevined szepen, es csinalsz hozza forditast akkor megkapod magyarul es ha kell masik nyelveken is. Ha meg eleve magyarul viszed be akkor ugyabar nem csinalsz forditast es ugyanugy megkapod magyarul. Na es ha idokozben az eredeti szoveget atirod angolra akkor meg egyszeruen csinalsz hozza forditast es minden frankon mukodik tovabb. Miert kell ezt ennyire tulbonyolitani?

Ha most mindenhova a format_string() kerul ahol magyar szovegeket viszel be akkor azt is figyelembe kell venned hogy amikor atirod angolra akkor azokat is vissza kell majd irni t() -re. Szerintem ha nincs valami nagyon fontos oka annak hogy a t() nem jo akkor inkabb ne csereld le.

3
-1
nevergone képe

Sőt a Drupal 8-ban lesz egy extra csavar, mert az oldalon használt nyelvek közül törölhető lesz az angol, de a modulokban a szövegeket továbbra angolul kell beírni.

1
0
sbence képe

More -1 please.

2
-7
sbence képe

Kedves -1 ezők, azt is elmondjátok mi baj a hozzászólással? :-) Csak szeretném tudni, mert nem hinném, hogy ezért "kár volt koptatni a billentyűzetet". Bár Ti tudjátok.

1
-1
vajdasági képe

Elolvasod egyaltalan amit irunk?

Miert nem lehet ezt megerteni hogy a t() nem ugy van kitalava, megirva ahogy te elkepzeled? Sot ahogy irjak meg a Drupal 8 ban sem lessz ugy ahogy te szeretned.

Amennyiben ez szerinted igy nem jo akkor ahelyett hogy itt "kovetelozdesz" meg hitetlenkedsz hogy miert nem ugy van hogy szeretned, hozz fel ertelmes erveket miert is lenne jo ugy ahogy te elkepzeled, es akkor (persze mindent sorjaban ahogy a fejlesztes mukodik) majd a Drupal 9 ben lehet hogy pontosan ugy lessz ahogy te szeretned.

Addig meg marad vagy a t() vagy az a masik fuggveny. En meg mindeg nem latom mi a bajod a t-vel. Ja nem akaord teleszemtelni az adatbazist mert majd ha beirod szepen angolul oket akkor ott lessz a magyar is? Erre az admin/config/regional/translate/i18n_string a megoldas ...

Azert van az auton a sofor felul ajto hogy ne a hatso ajton keresztul maszunk be, a Drupalban meg az van hogy a szovegeket angolul viszuk be, na most ha ez neked nem jo akkor mongyam azt hogy magadra vess ... Persze beirhatod magyarul is de o angolt var es kesz.

Megismetlem onmagam: beirod magyarul a szovegekt ha mar nincs meg az angol (igy igaz plussz munkat csinalsz mintha egybol angolul vinned be de te igy akarod.) A forditasokat nem viszed be mivel azok eleve nincsennek meg, tehat keszen is vagy. Majd valamikor amikor meglessz az angol akkor szepen kicsereled a magyar szovegekt angolra (plussz munkaval) es kipucolod az adatbazist. Ezt admin/config/regional/translate/i18n_string lattad mar?

Na most ebol szerinted mi a jo es mi a rossz na es mi nem ertehto?

Utoirat:
"Lehet, hogy nem probléma, de engem zavar: Ha a t()-nek megadom a magyar szöveget, akkor azt úgy veszi, hogy fordítatlan karakterlánc ergo azt mondja, hogy még nincs magyar fordítása. No ügyebár, ezt kellene megoldani, hogy ne így legyen."

Ha zavar akkor ird be angolul, mert a t() mindeg angolt var. Vagy mint irtam bekapcsolodsz a fejlesztesbe ervekkel megtamogatod es a 9-ben mar Borg nyelven is beviheted majd ... :D

0
-1
sbence képe

Nem értem ezen miért kell felkapni a vizet.. F*szságot kérdeztem? Már bocsánat... Az i18n_string jónak bizonyul, megnézem... Köszönöm. Nem kukacoskodni akarok, meg semmi de ezt is most látom ebben a hozzászólásban először...

Mellesleg a t() függvényt nyilván nem írják át a kérésemre, nem is EZT akarom.. (mert itt már felmerült a Drupal 8,9,23,23543 stb..) lehet sokan félreétettek... hanem megoldást a problémára. Bár látom, hogy az okoskodáson kívül konkrét megoldás a magyar közösségben nem fog születni (már bocsánat és tisztelet a kivételnek).

Innentől a téma részemről lezárva, köszönöm a válaszokat.

1
-3
Illyés Edit képe

Bár érdekes szerintem, hogy nincs Drupal-os megoldás az általam felhozott problémára.

<?php
// "Translate" to 'en' to ensure no translation (in D7 and before).
$not_translated = t('Email %user', array('%user' => $user->name), array('langcode' => 'en'));
?>

Van, illetve eddig is volt: megadod, hogy 'en'-re fordítson, és akkor, roppant intelligensen, nem fordít. :)

Feleslegesen nem kell fordítani, az is terheli a gyorstárat.

0
0
sbence képe

Ezt fogom alkalmazni annak érdekében, hogy a fordítási adatbázisba ne kerüljön be az adott string fölöslegesen, persze todo-val feltüntetem, hogy fordítani kell.

Majd, ha szükség lesz angol fordításra átírom a modulban lévő t()-ket, elkészítem a magyar fordítást és eltávolítom az utolsó paramétert (array('langcode' => 'en')).

Mielőtt sokan a fejüket csapkodnák és a -1 eket nyomkodnák, saját fejlesztésről van szó. :-)

0
0
vajdasági képe

Mivel magad is irod hogy a kesobbiek folyaman lessz angol nyelvu valtozat is. Igy en sima egyszeruseggel hagynam a most beirt magyar szovegeket es mivel nincs ra forditas a t() nem is forditja le. Ez igy mig felkesz a termek siman elmukodik.

Kesobbiekben meg amikor melgsznek az angol szovegek akkor csak kicserelem a magyart az angolra es a magyar szoveget meg beviszem forditaskent es mar keszen is van ...

Szerintem ennyire egyszeru az egesz. En meg mindeg nem igazan latom hol itt a gond vagy problema.

0
-2
portalsoft képe

Megnehezítheti a dolgod azért egy fejlesztésben, ha a szövegek először magyarul állnak elő.

Folyamatosan megkeseríti az életünket egy 2 éves fejlesztésben az, hogy először minden szöveg magyarul áll elő és csak amikor magyarul megvan (ez is sokszor két-háromszor változik, mire a végleges formába kerül), akkor fordítjuk angolra.

Ez pedig a t() esetében azt jelenti, hogy az első verziót megírjuk angolul, extract, majd poedittel fordítás, végül import. Ha megváltozik a magyar szöveg, akkor magyar szöveg módosítás plusz import.

A legvégén pedig az angol szöveg változik (a végleges magyar szöveget fordítják), na itt van baj, mert ezt varázslat összehozni a régi magyar szöveggel :( a po fájlokban.

Ha a t() nem lenne angolra hardcode-olva, sokkal egyszerűbb lenne az élet... de hát ez van :) egyébként nagyon kreatív és jó ötlet "trükkösen" használni a t()-t és a fejlesztés végén helyrehozni, ahogy írtad!

1
0
Den képe

Ilyenkor csináljatok egy saját fv-t, ami lekezeli az egész problémátokat.

Figyelem, nem kipróbált, csak begépelt ötletelés jön:

function my_t($text, $args) {
  $t = array(
    'eztforditom' => 'erre',
    'ezt' => 'meg erre',
  );
 
  if (!empty($t[$text]) {
    $text = $[$text];
  }
 
  return format_string($text, $args);
}

Mindenütt a kódban, ahol eddig t()-t kellene használnotok, használjatok my_t()-t; Egy helyen van az összes fordításotok, tudjátok kezelni az összepárosítást. Nincs export/import. A $t feltöltés mehet csv-ből is akár.

Majd mikor ha véglegesek a stringjeitek, ki lehet cserélni vagy minden my_t() hívást t()-re, vagy a my_t()-ben a format_stringet() t()-re;

1 koncepciónak ez is elmegy…

0
0
realdream képe

A forrás szövegben érdemes elkülöníteni a magyar t és az angol t() függvényeket, mert egyébként egy több ezer soros modulban, nem tudjuk kézben tartani a fordítás állapotát.
Először elkészítjük a modult a hun_t() függvénnyel, majd ha szükséges lesz akkor rákeresünk a hun_t-re és átírjuk angolra a szöveget és sima t()-re.

Íme egy egyszerű példa d6-ban:
Csak az en kellett hu-ra módosítani.

Ezzel a hun_t()-vel megadott szöveget lehet fordítani bármilyen nyelvre a drupal adminisztrációs felületén többek között angolra is.

function sajatmodul_hun_t($string, $args = array(), $langcode = NULL) {
    global $language;
    static $custom_strings;
 
    $langcode = isset($langcode) ? $langcode : $language->language;
 
    // First, check for an array of customized strings. If present, use the array
    // *instead of* database lookups. This is a high performance way to provide a
    // handful of string replacements. See settings.php for examples.
    // Cache the $custom_strings variable to improve performance.
    if (!isset($custom_strings[$langcode])) {
        $custom_strings[$langcode] = variable_get('locale_custom_strings_' . $langcode, array());
    }
    // Custom strings work for English too, even if locale module is disabled.
    if (isset($custom_strings[$langcode][$string])) {
        $string = $custom_strings[$langcode][$string];
    }
    // Translate with locale module if enabled.
    //  elseif (function_exists('locale') && $langcode != 'en') {
    //!! itt figyeljük a magyar nyelvet, az alap string magyar, ezért nem fordítjuk
    elseif (function_exists('locale') && $langcode != 'hu') {
        $string = locale($string, $langcode);
    }
 
    if (empty($args)) {
        return $string;
    } else {
        // Transform arguments before inserting them.
        foreach ($args as $key => $value) {
            switch ($key[0]) {
                case '@':
                    // Escaped only.
                    $args[$key] = check_plain($value);
                    break;
 
                case '%':
                default:
                    // Escaped and placeholder.
                    $args[$key] = theme('placeholder', $value);
                    break;
 
                case '!':
                // Pass-through.
            }
        }
        return strtr($string, $args);
    }
}
4
0

-------------------------------
http://www.realdream.hu

szantog képe

Frappáns, elegáns, gazdaságos.

0
0

----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.