如何仅在语言切换块中显示语言,其中存在翻译? -- 7 领域 和 theming 领域 和 i18n-l10n 领域 drupal 相关 的问题

How to only display languages in language switcher block where a translation exists?


4
vote

问题

中文

我需要在Drupal 7站点上启用数千种语言,但我不想为每个语言创建语言切换器侧栏的渲染开销。语言切换块的默认行为是显示在没有灰色字体中的翻译并击中的语言。

如何修改语言切换程序块,仅显示活动链接,即仅显示存在翻译的语言?我从这篇文章来看但需要帮助调整我的需求:

  <?php    function YOURTHEMENAME_links__locale_block($variables) {   foreach($variables[links] as $key => $lang) {     if (isset($lang['attributes']['class']) && in_array('locale-untranslated', $lang['attributes']['class'])) {       $variables['links'][$key]['href'] = '<front>'; // Set here any page link...     }   }   return theme_links($variables); }   

代码应该是什么,我在哪里把代码放在我的主题中?

英文原文

I need to enable thousands of languages on my Drupal 7 site, but I do not want to incur the rendering overhead of creating the language switcher sidebar for every language. The default behavior for the language switcher block is to show languages which do not have translations in gray font and struck out.

How would I modify the language switcher block to only show active links, i.e. only display the languages for which a translation exists? I looked at this code from this post but need help adjusting it for my needs:

<?php    function YOURTHEMENAME_links__locale_block($variables) {   foreach($variables[links] as $key => $lang) {     if (isset($lang['attributes']['class']) && in_array('locale-untranslated', $lang['attributes']['class'])) {       $variables['links'][$key]['href'] = '<front>'; // Set here any page link...     }   }   return theme_links($variables); } 

What should the code be, and where do I put the code in my theme?

        
   
   

回答列表

1
 
vote

调整解决方案您尝试过,您只需要解开不存在翻译的语言的条目,因此在 theme_links() 呼叫中不会打印它们的链接。所以:

  function YOURTHEMENAME_links__locale_block($variables) {    foreach($variables['links'] as $key => $lang) {     if (isset($lang['attributes']['class'])) {         if (in_array('locale-untranslated', $lang['attributes']['class'])) {             unset($variables['links'][$key]);         }     }   }   return theme_links($variables); }   

您将此代码放入主题的 template.php 文件中,调整上面的 998876663 部分函数名称的函数名称的一部分。意思是,您始终使用主题的所谓的"机器名称" 启动所有主题函数的函数名称。

 

To adapt the solution you tried, you would just have to unset entries for languages where no translation exists, so no link will be printed for them in the theme_links() call. So:

function YOURTHEMENAME_links__locale_block($variables) {    foreach($variables['links'] as $key => $lang) {     if (isset($lang['attributes']['class'])) {         if (in_array('locale-untranslated', $lang['attributes']['class'])) {             unset($variables['links'][$key]);         }     }   }   return theme_links($variables); } 

You would put this code into the template.php file of your theme, adapting the YOURTHEMENAME part of the function name above according to how all the other functions in your theme start. Means, you always start the function name of all your theme functions with the so-called "machine name" of your theme.

 
 
   
   
0
 
vote

还有不同的方法来确定缺失的翻译。即,不寻找链接的 locale-untranslated CSS类,您可以检查链接是否与 Current 语言的链接相同。因为在缺少翻译时,这是语言切换器的Drupal核心默认行为。所以:

  function YOURTHEMENAME_links__locale_block($variables) {     global $language;      if (isset($data[$language->language])) {         $current_href = $variables[links][$language->language]['href'];     }     else {         $current_href = false;     }      foreach ($variables[links] as $key => $lang) {         // If we find a missing translation, remove its entry from the list.         if ($lang['href'] == $current_href) {             unset($variables[links][$key]);         }     }      return theme_links($variables); }   

再次,此功能将进入您的主题 template.php

 

There is also a different way to determine missing translations. Namely, instead of looking for a locale-untranslated CSS class for the link, you can check if the link is the same as the one for the current language. Because that is the Drupal Core default behaviour for the language switcher in case a translation is missing. So:

function YOURTHEMENAME_links__locale_block($variables) {     global $language;      if (isset($data[$language->language])) {         $current_href = $variables[links][$language->language]['href'];     }     else {         $current_href = false;     }      foreach ($variables[links] as $key => $lang) {         // If we find a missing translation, remove its entry from the list.         if ($lang['href'] == $current_href) {             unset($variables[links][$key]);         }     }      return theme_links($variables); } 

Again, this function would go into your theme's template.php.

 
 
0
 
vote

更有可能工作

$ current_href = drupal :: langanagemanager() - &gt; getcurrentlanguage() - &gt; getid();

  foreach (array_keys($variables["links"]) as $key) { // If we find a missing translation, remove its entry from the list. if ($key == $current_href) {   unset($variables["links"][$key]); }   

}

 

it's more likely would work

$current_href = \Drupal::languageManager()->getCurrentLanguage()->getId();

foreach (array_keys($variables["links"]) as $key) { // If we find a missing translation, remove its entry from the list. if ($key == $current_href) {   unset($variables["links"][$key]); } 

}

 
 

相关问题

1  将类分组或向CCK表单字段添加类  ( Grouping or adding classes to cck form fields ) 
我正在寻找一个方法来分组我的CCK添加/编辑表单的部分,以便我可以为用户提供一个带有部分而不是一个长页的表单。我已经在使用TimeGroup for assion的组字段中,所以我正在寻找的是用于编辑的分组字段的东西。 我意识到我可以用大量的CSS,jQuery或添加自定义模板来完成此操作,但我正在寻找更优雅的解决方...

2  提交后为什么我的form_state被重置?  ( Why is my form state being reset after submission ) 
我有一个页面回调的菜单项: function my_menu() { $items = array(); $items['my/action/%ctools_js'] = array( 'title' => 'do something', 'page callback' => 'my_ac...

1  所有预订列表在接下来的3天内  ( List of all bookings in the next 3 days ) 
在内容类型中,我有一个字段日期,具有开始日期和结束日期。使用视图,我想以这样的方式放置过滤器,即现在显示到下一个3天的日期范围内的结果。在一个字段中,我可以看到内容:日期和过滤器,我可以看到这样的开始和结束。 选择内容后:开始日期我不知道哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇...

0  在添加到购物车时更改add_to_cart_form_submit()和随机PDOException  ( Altering add to cart form submit and random pdoexception while adding to cart ) 
我已经创建了一个具有许多属性的自定义产品来设置它。 我还更改了hook_add_to_cart_form_submit(),其中我收集所有选定属性并根据所选和配置的属性计算新的价格。 所以在我的中 function MYMODULE_add_to_cart_form_submit($form, &$form_st...

2  如何在术语选择过程中显示术语图像而不是术语名称?  ( How to display term images instead of term names in the term selection process ) 
我有一个内容类型,具有术语参考字段(复选框窗口小部件,词汇表:类别),每个用户必须选择一个术语要附加到他的节点。 我还向类别词汇表添加了一个图像字段,以将默认图像附加到每个术语。 如何在创建节点时显示术语图像和术语名称,而不是只有术语选择过程中的术语名称?那里有一个模块吗? 或可能使用钩形形式改变。任何指南? ...

3  计算通过登录用户标记的内容数  ( Count the number of content flagged by logged in user ) 
我想获取由登录用户标记的项目数(内容)。 taxonomy_build_node_index($node)6 上面的线将显示标记内容的总次数。如何获得由登录用户标记的项目数。假设用户A具有标记的内容1,Content2和Content 3.然后所需的输出是: [当前:用户]标记的项目数:3 感谢 ...

2  我无法显示高级内容模块的访问拒绝消息。我怎样才能做到这一点?  ( I am unable to show the access denied message of the premium content module how ) 
我有3个查看模式(预告片,演示和全视图模式)。我创建了 node--content-type.tpl.php ,并使用条件语句创建了每个视图模式的代码 if($teaser) {} else if($node->type == 'tu_mooc' && $view_mode == 'presentation')...

8  块体重翻译全文内容  ( Block body translation for full html content ) 
块创建并将HTML内容放在身体字段中,我无法转换此内容,因为如下: 字符串块:块:1:不允许用于TextGroup块的正文 翻译是因为它的文本格式。 如果我更改为纯文本,我可以翻译块,但在显示时被视为纯文本。我必须使用相同的HTML内容(翻译)创建另一个块,并选择仅以特定语言显示? ...

0  使用system_settings_form for module admin的表单提交处理程序  ( Problem with form submit handler using system settings form for module admin ) 
我有一个模块,它创建一个管理后端。我创建如下的表格。提交处理程序被调用,但由于某种原因没有表格状态。 任何想法有什么问题? //in hook menu 'page arguments' => array('carousel_form'), function carousel_form...

0  使用实体表单模块获取自定义字段以正确显示规则  ( Getting a custom field to appear correctly in rules using entity form module ) 
我已经写了一个名为foo的自定义字段窗口小部件,它被插入到实体表单中,以向另一个Web服务提供自动完成。我试图通过规则获取要在电子邮件中发送的现场数据。我能够使用列表,文本和标准小部件在电子邮件正文和列表中显示EntityForm令牌。但是,自定义窗口小部件"foo" 中定义的表单字段会出现[EntityForm:F...

0  用于邮件列表的最佳Drupal模块? [关闭]  ( Best drupal module for mailing lists ) 
很难讲述这里被问到的内容。这个问题含糊不清,模糊,不完整,过于广泛的或修辞,不能以目前的形式合理地回答。有关帮助澄清此问题,以便可以重新开放,访问Help Center 。 ...

3  通过简单地查询对游客的cookie的会话表来获取UID是否有任何安全问题?  ( Are there any security concerns with getting the uid by simply querying the sess ) 
在高性能javascript回调处理程序 要快速破坏,通过在更低的举级级别返回数据( DRUPAL_BOOTSTRAP_DATABASE ),我可以在〜90毫秒内返回一个页面而不是〜1500毫秒的页面,即完整的引导率服务器。对于任何用户可以看到的简单内容,例如发布的公开可查看节点,不存在任何安全问题。但如果我需要执行...

0  可扩展的方式将自定义CSS / JS添加到页面  ( Scalable way to add custom css js to a page ) 
所以我正在研究添加自定义JavaScript的能力,该网站是网站功能的核心。现在,我正在使用代码每节点模块来处理这个,但我有一种感觉它会发生当我处理20或30页与自定义JavaScript时,有点笨拙。此外,我很乐意有一种方法可以在源控制中保持JS,而不是数据库。 在我的脑海中,想法解决方案能够上传或引用要在页面底部...

0  如何使用节点字段中的图像进行视图创建幻灯片[复制]  ( How to create slideshow with views using images from nodes field ) 
这个问题已经在这里有答案: 从单节点幻灯片 (9个答案) 关闭 8年前。 ...

2  使用结构化的Microdata将相关的SEO相关内容包含在头部中  ( Inclusion of seo related content in the header using structured microdata ) 
我目前正在查看我们网站的SEO,我将在头部和"丰富的片段" 中使用Schema.org Microdata,以及包括Facebook OpenGraph数据。 在标题中包含此信息的最佳方法是什么,从内容等中提取它。? 是否有任何可以帮助此任务提供的模块?有任何最佳实践吗? ...

0  PHP自定义表单呈现警告[重复]  ( Php custom form render warning ) 
这个问题已经在这里有一个答案: 严格警告:只有变量应该通过引用传递 (1答) ...

0  挂钩渲染所有活动方面  ( Hook to render all active facet ) 
是否有可能的钩子或其他可以写入的其他东西以显示所有当前活动的面部链路I.E所选的面部。我想以面包屑形式显示到用户所选择的所有刻面,并为它们提供删除它的选项 谢谢 ...

0  无法在管理面板中分配角色  ( Cant assign roles in admin panel ) 
在昨天之前的一天,我创造了一个新的角色(作家),而且在添加相当多的模块后,我想今天早些时候添加另一个,我发现我没有办法再做这一点,也没有编辑我已经创建的角色。现在,我是一个牛头瓦尔的纽比,只有大约4天前开始,所以我可能(联合国)在某个地方勾选一个盒子,所以我希望有人能帮助我解决这个问题如何改变这个? 我添加了页面的屏...

2  如何创建具有来自表单本身的值的WebForm提交表?  ( How to create a webform submission table with values from the form itself ) 
当匿名用户提交表单时,我发现当前的WebForm提交表完全不足 - 您无法通过其提交日期来告诉另一个,而不是在许多情况下没有帮助。我想创建一个新的WebForm提交表,可以从提交本身中显示特定字段,以帮助识别提交谁来自。理想情况下,如果我可以通过视图实现这一点,但如果需要,我对创建模块并不不好意。之前有人做过这个,什...

0  是否可以在清除后立即更新Drupal页面缓存?  ( Is it possible to update drupal page cache right after it is cleared ) 
我正在尝试提高笨拙的性能,我有所有调整常见的嫌疑人设置: 清漆 memcache apc Drupal Core Cache 从我明白时清除Drupal缓存,它不会补充页面缓存,直到匿名最终用户为页面提出请求。然后,Drupal构建缓存,下页请求是SNAPPY。此问题的问题是非缓存呼叫可能需要2-4秒...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.