主頁 > 區塊鏈 > URL中的Wordpresslang前綴

URL中的Wordpresslang前綴

2021-12-31 00:33:54 區塊鏈

在我的網站上,我有多種語言可供我的用戶選擇。這目前適用于簡單的 $_GET、重定向和 cookie。但是我想將此系統升級為在我的網址中使用前綴語言,以便它們被 Google 索引。由于我已經有了一些作業,我寧愿跳過那些笨重的大插件,如 WPML 或 qTranslate(及其后代)。

所以我現在正在嘗試做一個插件。在 SO 上,我找到了用戶 loushou 的插件作業代碼(參見他的回答:https ://stackoverflow.com/a/20755049/3429689 )。

現在這個插件所做的是添加重寫標簽 %lang% 然后在多個過濾器中將其替換為請求的字串(因此 example.com/en/post-name/ 設定 lang=en。它還更新頁面中的所有 url 以包含前綴(如在導航選單和其他地方)。

我現在想要完成的是洗掉默認頁面語言的前綴,這樣它只會在用戶選擇任何其他語言時顯示。所以 'en' 將從 url 中隱藏,但 'de' 會出現。但在這里我有一個問題。我設法讓 WP 不顯示默認前綴,但突然頁面和作者頁面停止作業。

這是代碼:

<?php (__FILE__ == $_SERVER['SCRIPT_FILENAME']) ? die(header('Location: /')) : null;
/**
 * Plugin Name: Loushou Language URLs
 * Plugin URI:  http://quadshot.com/
 * Description: Adding the ability to have language support in your frontend urls.
 * Version:     0.1-beta
 * Author:      Loushou
 * Author URI:  http://quadshot.com/
 */

class Clou_rewrite_takeover {
    protected static $add_rules = array();


    public static function pre_init() {
        // debug
        add_action('admin_footer-options-permalink.php', array(__CLASS__, 'qsart_rewrite_debug'));

        // add rw tag
        add_action('init', array(__CLASS__, 'add_directory_rewrite'));

        // rw rule adds
        add_filter(is_admin() ? 'setup_theme' : 'do_parse_request', array(__CLASS__, 'do_parse_request'), 0);
        add_filter('post_rewrite_rules', array(__CLASS__, 'post_rewrite_rules'));
        add_filter('date_rewrite_rules', array(__CLASS__, 'date_rewrite_rules'));
        add_filter('root_rewrite_rules', array(__CLASS__, 'root_rewrite_rules'));
        add_filter('comments_rewrite_rules', array(__CLASS__, 'comments_rewrite_rules'));
        add_filter('search_rewrite_rules', array(__CLASS__, 'search_rewrite_rules'));
        add_filter('author_rewrite_rules', array(__CLASS__, 'author_rewrite_rules'));
        add_filter('page_rewrite_rules', array(__CLASS__, 'page_rewrite_rules'));
        add_filter('rewrite_rules_array', array(__CLASS__, 'final_rules_correction'), PHP_INT_MAX, 1);

        // query vars
        add_filter('query_vars', array(__CLASS__, 'add_lang_query_var'), 10, 1);
        add_filter('request', array(__CLASS__, 'default_language'), 9);

        add_filter('locale', array(__CLASS__, 'set_language'));

        // fix permalinks
        $link_filters_needing_rewrite = array(
            'post_link',
            'post_type_link',
            'page_link',
            'attachment_link',
            'search_link',
            'post_type_archive_link',
            'year_link',
            'month_link',
            'day_link',
            'feed_link',
            'author_link',
            'term_link',
            'category_feed_link',
            'term_feed_link',
            'taxonomy_feed_link',
            'author_feed_link',
            'search_feed_link',
            'post_type_archive_feed_link',
        );

        add_filter('pre_post_link', array(__CLASS__, 'change_permalink_structure'), 10, 3);

        foreach ($link_filters_needing_rewrite as $link_filter) {
            add_filter($link_filter, array(__CLASS__, 'rewrite_lang_in_permalink'), 11, 3);
        }
    }


    public static function do_parse_request($cur) {
        self::get_page_permastruct();
        self::get_author_permastruct();
        self::correct_extras();
        return $cur;
    }


    public static function get_supported_langs() {
        return apply_filters('lou-get-supported-languages', array('en', 'de'));
    }


    public static function add_directory_rewrite() {
        global $wp_rewrite;
        
        $supported_languages = self::get_supported_langs();

        // add_permastruct('lang', '%lang%', [ 'ep_mask' => EP_PERMALINK ] );
        add_rewrite_tag('%lang%', '('.implode('|', $supported_languages).')?');
    }


    public static function unleadingslashit($str) {
        return ltrim($str, '/');
    }


    public static function final_rules_correction($rules) {
        global $wp_rewrite;

        // print("<pre>".print_r($rules, true)."</pre>");

        $new_rules = array();
        $supported_languages = self::get_supported_langs();
        $find = implode('|', $supported_languages);
        $find_find = '#(?<!\()('.preg_quote($find, '#').')#';
        $preg_node = str_replace('%%%', '(\d )', preg_quote($wp_rewrite->preg_index('%%%'), '#'));

        foreach ($rules as $k => $v) {
            if (preg_match($find_find, $k)) {
                $nk = preg_replace($find_find, '('.$find.')', $k);
                $parts = explode('?', $v);
                $index = array_shift($parts);
                $pv = implode('?', $parts);
                // $pv = $v;

                $pv = preg_replace_callback('#'.$preg_node.'#', function ($matches) use ($wp_rewrite) {
                    return $wp_rewrite->preg_index($matches[1] 1);
                }, $pv);

                $nv = $index.'?lang='.$wp_rewrite->preg_index(1).(!empty($pv) ? '&'.$pv : '');
                $new_rules[$nk] = $nv;
            } else {
                $new_rules[$k] = $v;
            }
        }

        // print("<pre>".print_r($new_rules, true)."</pre>");

        return $new_rules;
    }


    public static function change_permalink_structure($struct) {
        $struct = self::unleadingslashit($struct);
        $struct = preg_replace('#^%lang%/?#', '', $struct);

        // print("<pre>".print_r($struct, true)."</pre>");

        return '/%lang%/'.$struct;
    }


    public static function extras_rewrite_rules($rules, $struct) {
        global $wp_rewrite;

        // var_dump($wp_rewrite);
        // print("<pre>".print_r($wp_rewrite, true)."</pre>");
        // var_dump($rules);
        // var_dump($struct);

        if(is_array($struct)) {
            if ( count( $struct ) == 2 ) {
                $new_rules = $wp_rewrite->generate_rewrite_rules( self::change_permalink_structure($struct[0]), $struct[1] );
            } else {
                $new_rules = $wp_rewrite->generate_rewrite_rules( self::change_permalink_structure($struct['struct']), $struct['ep_mask'], $struct['paged'], $struct['feed'], $struct['forcomments'], $struct['walk_dirs'], $struct['endpoints'] );
            }

        } else {
            $new_rules = $wp_rewrite->generate_rewrite_rules( self::change_permalink_structure($struct) );
        }

        // print("<pre>".print_r($new_rules, true)."</pre>");
        // print("<pre>".print_r($rules, true)."</pre>");

        return $new_rules   $rules;
    }


    public static function post_rewrite_rules($rules) {
        global $wp_rewrite;

        // hack to add code for extras type urls (usually created by other plugins)
        $func = array(__CLASS__, 'extras_rewrite_rules');

        foreach ($wp_rewrite->extra_permastructs as $type => $struct) {
            // $filter = ($type == 'post_tag' ? 'tag' : $type).'_rewrite_rules';
            $filter = $type.'_rewrite_rules';
            add_filter($filter, function ($rules) use ($struct, $func) { return call_user_func_array($func, array($rules, $struct)); });
        }

        return $wp_rewrite->generate_rewrite_rules( self::change_permalink_structure($wp_rewrite->permalink_structure), EP_PERMALINK )   $rules;
    }


    public static function date_rewrite_rules($rules) {
        global $wp_rewrite;
        return $wp_rewrite->generate_rewrite_rules( self::change_permalink_structure($wp_rewrite->get_date_permastruct()), EP_DATE)   $rules;
    }


    public static function root_rewrite_rules($rules) {
        global $wp_rewrite;
        return $wp_rewrite->generate_rewrite_rules( self::change_permalink_structure($wp_rewrite->get_date_permastruct()), EP_DATE)   $rules;
    }


    public static function comments_rewrite_rules($rules) {
        global $wp_rewrite;
        return $wp_rewrite->generate_rewrite_rules( self::change_permalink_structure($wp_rewrite->root . $wp_rewrite->comments_base), EP_COMMENTS, false, true, true, false)   $rules;
    }


    public static function search_rewrite_rules($rules) {
        global $wp_rewrite;
        return $wp_rewrite->generate_rewrite_rules( self::change_permalink_structure($wp_rewrite->get_search_permastruct()), EP_SEARCH)   $rules;
    }


    public static function author_rewrite_rules($rules) {
        global $wp_rewrite;
        return $wp_rewrite->generate_rewrite_rules( self::change_permalink_structure($wp_rewrite->get_author_permastruct()), EP_AUTHORS)   $rules;
    }


    public static function page_rewrite_rules($rules) {
        global $wp_rewrite;
        $page_structure = self::get_page_permastruct();
        // $page_structure = $wp_rewrite->page_structure;
        // $page_structure = $wp_rewrite->get_page_permastruct();

        // $page_structure = self::change_permalink_structure($page_structure);

       // print("<pre>".print_r($page_structure, true)."</pre>");

        return $wp_rewrite->generate_rewrite_rules( $page_structure, EP_PAGES, true, true, false, false )   $rules;
    }


    protected static function get_page_permastruct() {
        global $wp_rewrite;

        if (empty($wp_rewrite->permalink_structure)) {
            $wp_rewrite->page_structure = '';

            return false;
        }

        $wp_rewrite->page_structure = self::change_permalink_structure($wp_rewrite->root . '%pagename%');

        // print("<pre>".print_r($wp_rewrite, true)."</pre>");

        return $wp_rewrite->page_structure;
    }


    protected static function get_author_permastruct() {
        global $wp_rewrite;

        if ( empty($wp_rewrite->permalink_structure) ) {
            $wp_rewrite->author_structure = '';
            return false;
        }

        $wp_rewrite->author_structure = self::change_permalink_structure($wp_rewrite->front . $wp_rewrite->author_base . '/%author%');

        return $wp_rewrite->author_structure;
    }


    protected static function correct_extras() {
        global $wp_rewrite;

        foreach ($wp_rewrite->extra_permastructs as $k => $v)
        $wp_rewrite->extra_permastructs[$k]['struct'] = self::change_permalink_structure($v['struct']);
    }


    public static function get_default_post_lang($post = 0) {
        // return ( $lang = get_query_var('lang') ) ? $lang : 'en';
        return ( $lang = get_query_var('lang') ) ? $lang : null;
    }


    public static function rewrite_lang_in_permalink($permalink, $post = 0, $leavename = false) {
        // find the default post language via a function you have created to 
        // determine the default language url. this could be based on the current
        // language the user has selected on the frontend, or based on the current
        // url, or based on the post itself. it is up to you
        $lang = self::get_default_post_lang($post);

        // echo '<br />';
        // echo $lang.' - '.$permalink;
        // echo '<br />';

        // once you have the default language, it is a simple search and replace
        if(!is_null($lang)) {
            return str_replace('%lang%', $lang, $permalink);
        } else {
            return str_replace('%lang%/', '', $permalink);
        }
    }


    public static function add_lang_query_var($vars) {
        // tell WP to expect the lang query_var, which you can then later use
        $vars[] = 'lang';

        // return the new list of query vars, which includes our lang param
        return array_unique($vars);
    }


    public static function default_language($vars) {
        if (array_diff( array_keys($vars), array('preview', 'page', 'paged', 'cpage') )) {
            // $vars['lang'] = !empty($vars['lang']) ? $vars['lang'] : 'en';
            $vars['lang'] = !empty($vars['lang']) ? $vars['lang'] : null;

            // print("<pre>".print_r($vars, true)."</pre>");
            // if(!empty($vars['lang']))
            // $vars['lang'] = $vars['lang'];
        }
        return $vars;
    }



    public static function set_language() {
        $lang = 'en';

        $req_uri = explode('/', $_SERVER['REQUEST_URI']);

        // strpos($_SERVER['REQUEST_URI'], '/ee/') === 0

        if(in_array('de', $req_uri)) {
            $lang = 'de';
        }

        $locale = self::convert_locale($lang);

        return $locale;
    }


    public static function qsart_rewrite_debug() {
        if (isset($_COOKIE['rwdebug']) && $_COOKIE['rwdebug'] == 1) {
            global $wp_rewrite;
            echo '<pre style="background-color:#ffffff; font-size:10px;">';
            print_r($wp_rewrite->rules);
            echo '</pre>';
        }
    }
}


if (defined('ABSPATH') && function_exists('add_action')) {
    lou_rewrite_takeover::pre_init();
}

我注意到的是,如果我注釋掉第 70 行,執行規則重繪 然后啟用該行,我會得到沒有前綴的頁面開始作業,但是導航中的 URL 和其他地方沒有被更改(或者更確切地說是被更改清空 lang 字串)。

現在,如果我不注釋該行并重繪 ,那么如果我嘗試訪問頁面 example.com/page-name/ - 我會得到 404 頁面。有趣的是,如果我在第 328 行列印出 $vars var,我可以看到 WP 沒有設定“pagename”鍵,而是設定了“name”,這意味著它試圖找到一個帖子而不是頁面,導致404.

我認為這意味著重寫規則有問題。但是檢查它們并沒有發現明顯的錯誤,至少對我來說是這樣。

所以我需要幫助。了解此代碼來自 2013 年,我會毫不猶豫地使用任何其他建議的解決方案。此外,如果有某種小型的、非常基本的插件可以執行此特定功能,我也會使用它。也可能有一種方法可以繞過使用 .htaccess,但我認為 get_query_vars 會停止作業。

uj5u.com熱心網友回復:

我設法通過重寫 final_rules_correction() 方法并禁用 post/date/etc rewrite_rules 的過濾器來解決我的大部分問題。

這樣做是重寫所有生成的規則,并為它們添加一個 lang 前綴正則運算式,并為最終鏈接添加一個 lang var。如果 URL 請求的 URL 不包含 lang var,它還允許有一個空的 lang var。

$prefixes = self::get_supported_langs();
        $prefix_regexp = '(?:(' . implode( '|', $prefixes ) . ')/)?';
        $new_rewrite_rules = array();

        $match_pattern = '/\$matches\[(\d)\]/si';

        foreach ( $rules as $rewrite_rule => $match ) {

            $parts = explode('?', $match);
            $index = array_shift($parts);
            $pv = implode('?', $parts);

            $pv = preg_replace_callback($match_pattern, function ($m) {
                return sprintf('$matches[%d]', $m[1]   1);
            }, $pv);

            $nv = $index.'?lang='.$wp_rewrite->preg_index(1).(!empty($pv) ? '&'.$pv : '');
            $new_rewrite_rules[$prefix_regexp . $rewrite_rule] = $nv;
        }

我現在遇到的問題是 URL 在 AJAX 呼叫中不包含 lang 前綴。考慮到我可能必須在 AJAX 呼叫中傳遞 lang 前綴,然后重寫我需要在 AJAX 呼叫期間檢索的帖子和其他物件的永久鏈接......

注意:這不會重寫 home_url 和類似函式中的鏈接。

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/398153.html

標籤:php WordPress的 url重写

上一篇:此網站上出現了xampplocalhost的嚴重錯誤

下一篇:使用屬性display:grid將div放在另一個div下方

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:46:47 more
  • Hyperledger Fabric 使用 CouchDB 和復雜智能合約開發

    在上個實驗中,我們已經實作了簡單智能合約實作及客戶端開發,但該實驗中智能合約只有基礎的增刪改查功能,且其中的資料管理功能與傳統 MySQL 比相差甚遠。本文將在前面實驗的基礎上,將 Hyperledger Fabric 的默認資料庫支持 LevelDB 改為 CouchDB 模式,以實作更復雜的資料... ......

    uj5u.com 2023-04-16 07:28:31 more
  • .NET Core 波場鏈離線簽名、廣播交易(發送 TRX和USDT)筆記

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. PM> Install-Package Tron.Wallet.Net 配置 public reco ......

    uj5u.com 2023-04-14 08:08:00 more
  • DKP 黑客分析——不正確的代幣對比率計算

    概述: 2023 年 2 月 8 日,針對 DKP 協議的閃電貸攻擊導致該協議的用戶損失了 8 萬美元,因為 execute() 函式取決于 USDT-DKP 對中兩種代幣的余額比率。 智能合約黑客概述: 攻擊者的交易:0x0c850f,0x2d31 攻擊者地址:0xF38 利用合同:0xf34ad ......

    uj5u.com 2023-04-07 07:46:09 more
  • Defi開發簡介

    Defi開發簡介 介紹 Defi是去中心化金融的縮寫, 是一項旨在利用區塊鏈技術和智能合約創建更加開放,可訪問和透明的金融體系的運動. 這與傳統金融形成鮮明對比,傳統金融通常由少數大型銀行和金融機構控制 在Defi的世界里,用戶可以直接從他們的電腦或移動設備上訪問廣泛的金融服務,而不需要像銀行或者信 ......

    uj5u.com 2023-04-05 08:01:34 more
  • solidity簡單的ERC20代幣實作

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; //ERC20 同質化代幣,每個代幣的本質或性質都是相同 //ETH 是原生代幣,它不是ERC20代幣, ......

    uj5u.com 2023-03-21 07:56:29 more
  • solidity 參考型別修飾符memory、calldata與storage 常量修飾符C

    在solidity語言中 參考型別修飾符(參考型別為存盤空間不固定的數值型別) memory、calldata與storage,它們只能修飾參考型別變數,比如字串、陣列、位元組等... memory 適用于方法傳參、返參或在方法體內使用,使用完就會清除掉,釋放記憶體 calldata 僅適用于方法傳參 ......

    uj5u.com 2023-03-08 07:57:54 more
  • solidity注解標簽

    在solidity語言中 注釋符為// 注解符為/* 內容*/ 或者 是 ///內容 注解中含有這幾個標簽給予我們使用 @title 一個應該描述合約/介面的標題 contract, library, interface @author 作者的名字 contract, library, interf ......

    uj5u.com 2023-03-08 07:57:49 more
  • 評價指標:相似度、GAS消耗

    【代碼注釋自動生成方法綜述】 這些評測指標主要來自機器翻譯和文本總結等研究領域,可以評估候選文本(即基于代碼注釋自動方法而生成)和參考文本(即基于手工方式而生成)的相似度. BLEU指標^[^?88^^?^]^:其全稱是bilingual evaluation understudy.該指標是最早用于 ......

    uj5u.com 2023-02-23 07:27:39 more
  • 基于NOSTR協議的“公有制”版本的Twitter,去中心化社交軟體Damus

    最近,一個幽靈,Web3的幽靈,在網路游蕩,它叫Damus,這玩意詮釋了什么叫做病毒式營銷,滑稽的是,一個Web3產品卻在Web2的產品鏈上瘋狂傳銷,各方大佬紛紛為其背書,到底發生了什么?Damus的葫蘆里,賣的是什么藥? 注冊和簡單實用 很少有什么產品在用戶注冊環節會有什么噱頭,但Damus確實出 ......

    uj5u.com 2023-02-05 06:48:39 more