طريقة جيدة للقيام النص مع الروابط في كتاب الابتكار؟

StackOverflow https://stackoverflow.com/questions/1484941

  •  18-09-2019
  •  | 
  •  

سؤال

أقوم حاليا بالتدويل مع Gettext باستخدام PHP. كنت أتساءل عما إذا كانت هناك أي طرق جيدة لهذا المثال:

By using this website, you accept the <a href="<?php print($dir); ?>/tos/">Terms of Use</a>.

بالنسبة إلى EN_US، ستتبع هذه الجملة هذا التنسيق. ومع ذلك، في لغة أخرى، يمكن أن يكون رابط "شروط الاستخدام" في بداية الجملة. هل هناك طريقة أنيقة للقيام بذلك؟ شكرا على وقتك.

هل كانت مفيدة؟

المحلول

إليك كيف سأفعل ذلك. العبارة التي سيتم ترجمتها ستكون

By using this website, you accept the <a>Terms of Use</a>.

ثم أستبدل الرابط بعد أن تم توطين العبارة، على سبيل المثال

$str = _('By using this website, you accept the <a>Terms of Use</a>.');
$str = preg_replace('#<a>(.*?)</a>#', '<a href="' . $dir . '/tos/">$1</a>', $str);

بالطبع يمكنك استبدال <a> و </a> مع كل ما هو المنطقي بالنسبة لك ومترجميدك. تعال إلى التفكير في الأمر، حيث يجب عليك الهروب من إخراجك لمنع الترجمة من العبث مع HTML الخاص بك (عن قصد أم لا) ربما سأذهب مع شيء مثل

$str = htmlspecialchars(_('By using this website, you accept the [tos_link]Terms of Use[/tos_link].'));
$str = preg_replace('#\\[tos_link\\](.*?)\\[/tos_link\\]#', '<a href="' . $dir . '/tos/">$1</a>', $str);

نصائح أخرى

بالنسبة للتدويل البسيط، سأقوم ببساطة بإنشاء صفيف لكل لغة، وتشمل الملف المناسب، والوصول إلى صفيف بدلا من القيام بما تفعله.

en.php:

$text = array(
     'footer' => 'By using this website, you accept the <a href="' . $dir . '/tos/">Terms of Use</a>.',
     'welcome' => 'Welcome to our website!'
);

index.php:

$langdir = '/path/to/languages';
$lang = ( $_GET['lang'] ) ? $langdir . '/' . $_GET['lang'] . '.php' : $langdir . '/en.php';
if( dirname($lang) != $langdir || !require_once( $lang ) )
     exit('Language does not exist');

echo '<p class="footer">' . $text['footer'] . '</p>';

ال dirname() الدعوة أمر بالغ الأهمية وإلا فإن المستخدمين يحصلون على إمكانية تصل إلى أي ملف PHP على نظام الملفات الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top