Maison  >  Article  >  cadre php  >  L'utilisation et l'optimisation de l'interface de traduction Thinkphp

L'utilisation et l'optimisation de l'interface de traduction Thinkphp

咔咔
咔咔original
2020-08-19 16:53:442687parcourir

Cet article met à votre disposition une interface de traduction gratuite, vous pouvez l'essayer quand vous avez le temps, c'est quand même très bien !

Avant-propos

Les données nécessaires au projet doivent être écrites dans un package linguistique, tout comme le un type de données qui ne changera pas pendant des centaines d'années, mais il existe un type de données qui change constamment pendant le déroulement du projet.

Il est évidemment inapproprié pour nous d'écrire un pack linguistique pour de telles données, nous devons donc utiliser l'interface de traduction pour répondre à nos besoins.

1. Une brève introduction à l'interface de traduction

Regardons d'abord une image ! Jetons un coup d'œil à la manière dont cette interface de traduction est utilisée dans notre projet.

Lutilisation et loptimisation de linterface de traduction Thinkphp
Insérer la description de l'image ici

Cette interface a un total de 4 paramètres, à savoir a, f, t, w.

La signification de ces quatre paramètres est que a est une valeur fixe, qui est fy.

f fait référence à la langue de traduction.

t fait référence à la langue qui doit être traduite dans la langue dont nous avons besoin.

w fait référence aux données qui doivent être traduites.

2. Projetez le combat réel

L'exigence du projet est de mettre la boîte à gauche et de suivre ce langage. après avoir changé de langue, changez. Tout d'abord, laissez-moi vous expliquer que le texte ci-dessus n'a pas été écrit manuellement et que le fichier html n'existe pas. Il est configuré dans l'annotation de la base de données.

L'image ci-dessous montre la création de notre base de données. Je ne mentionnerai pas pourquoi il est créé ainsi et quels sont les avantages de le créer de cette façon. Chaque équipe a ses propres idées !

Ensuite, nous arrivons au sujet principal

Le code utilisé est juste celui-ci, l'adresse de l'interface est l'adresse dans postman ci-dessus, et une seule donnée qui doit être traduite est transmise plus tard.

Les données implémentées dans cet article sont le texte sur le côté gauche de l'image ci-dessus, c'est-à-dire que nous lisons les commentaires de la base de données puis utilisons le nom directement comme colonne lors de l'ajout ou de la modification selon certains règles.

Il vous suffit ensuite d'ajouter ce commentaire directement au dos de l'interface de traduction. Vous fournir un code pour que php lance une requête curl

<span style="display: block; background: url(https://my-wechat.mdnice.com/point.png); height: 30px; width: 100%; background-size: 40px; background-repeat: no-repeat; background-color: #272822; margin-bottom: -7px; border-radius: 5px; background-position: 10px 10px;"></span><code class="hljs" style="overflow-x: auto; padding: 16px; color: #ddd; display: -webkit-box; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; font-size: 12px; -webkit-overflow-scrolling: touch; letter-spacing: 0px; padding-top: 15px; background: #272822; border-radius: 5px;"><span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">public</span> <span class="hljs-function" style="line-height: 26px;"><span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">function</span> <span class="hljs-title" style="color: #a6e22e; font-weight: bold; line-height: 26px;">translateRequest</span><span class="hljs-params" style="line-height: 26px;">($url, $data=array<span class="hljs-params" style="line-height: 26px;">()</span>)</span></span>{<br/><br/>        $ch = curl_init();<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//初始化</span><br/>        <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//curl_setopt();//设置</span><br/>        <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//设置</span><br/>        curl_setopt($ch,CURLOPT_URL,$url);   <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//需要获取的 URL 地址</span><br/>        curl_setopt($ch,CURLOPT_HEADER,<span class="hljs-number" style="line-height: 26px;">0</span>);          <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//启用时会将头文件的信息作为数据流输出, 此处禁止输出头信息</span><br/>        curl_setopt($ch,CURLOPT_RETURNTRANSFER,<span class="hljs-number" style="line-height: 26px;">1</span>);  <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//获取的信息以字符串返回,而不是直接输出</span><br/>        curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,<span class="hljs-number" style="line-height: 26px;">30</span>); <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//连接超时时间</span><br/>        curl_setopt($ch, CURLOPT_ENCODING, <span class="hljs-string" style="color: #a6e22e; line-height: 26px;">&#39;gzip&#39;</span>);<br/><br/>        <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//避免https 的ssl验证</span><br/>        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">false</span>);<br/>        curl_setopt($ch, CURLOPT_SSLVERSION, <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">false</span>);<br/>        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">false</span>);<br/><br/>        <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">if</span>($data){<br/>            curl_setopt($ch, CURLOPT_POST, <span class="hljs-number" style="line-height: 26px;">1</span>);          <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//post请求</span><br/>            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//post参数</span><br/>        }<br/><br/>        <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//执行</span><br/>        $data = curl_exec($ch);<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//执行   不输出  内容返回给它</span><br/>        <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//判断是否请求成功</span><br/><br/>        <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">if</span>(curl_errno($ch)){<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//错误码</span><br/>            <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">echo</span> <span class="hljs-string" style="color: #a6e22e; line-height: 26px;">&#39;curl error: &#39;</span>.curl_error($ch);<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//错误信息</span><br/>        }<br/><br/>        $response = curl_getinfo($ch);<br/><br/>        <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">switch</span>($response[<span class="hljs-string" style="color: #a6e22e; line-height: 26px;">&#39;http_code&#39;</span>]){<br/>            <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">case</span> <span class="hljs-number" style="line-height: 26px;">200</span>:<br/>                <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">return</span> $data;<br/>                <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">break</span>;<br/>            <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">default</span>:<br/>                <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">exit</span>(<span class="hljs-string" style="color: #a6e22e; line-height: 26px;">&#39;程序异常&#39;</span>);<br/>        }<br/><br/>        curl_close($ch);<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//关闭</span><br/>    }<br/></code>

Après le test, voyez l'effet L'effet est obtenu, mais vous pouvez l'essayer en privé ! La vitesse est correcte lors de la traduction d'un groupe de données, mais un peu lente lors de la traduction de plusieurs données.

Il faut environ 3 à 5 secondes pour ouvrir la page ajoutée, ce qui n'est certainement pas possible, nous devons donc réfléchir à un moyen de résoudre ce problème. Lutilisation et loptimisation de linterface de traduction Thinkphp

3. Optimiser la vitesse de traduction

Dans la deuxième étape, Kaka a finalement constaté que la vitesse de traduction était un peu lente. lent, surtout quand il y a beaucoup de champs. Alors Kaka a pensé à un moyen.

Ces données ont été traduites une par une auparavant, pouvons-nous donc les traduire toutes en même temps, puis assembler les données nous-mêmes ? Lutilisation et loptimisation de linterface de traduction Thinkphp

Avec cette idée, nous avons commencé à la mettre en œuvre.

Ce que ces lignes de code réalisent finalement, c'est de rassembler toutes les annotations de champ et de les séparer par ","Lutilisation et loptimisation de linterface de traduction ThinkphpVous pouvez jeter un œil aux données imprimées. Le champ out est les données traduites. en fait, n’y pensez même pas. Une traduction doit être plus rapide que 6 traductions.

Ensuite, prenez cet ensemble de données, convertissez-le en tableau et réassemblez-le dans les données d'origine. Lutilisation et loptimisation de linterface de traduction ThinkphpIl y a un petit problème ici, vous pouvez y prêter attention ensemble. Ce qui est imprimé en chinois correspond aux données originales et ce qui est imprimé en anglais correspond aux données traitées.

Il est évident que les résultats en anglais renvoyés ne correspondent pas aux données originales. Lutilisation et loptimisation de linterface de traduction ThinkphpLe traitement ici est également relativement simple. Si vous avez une meilleure solution, consultez la section commentaires

La méthode de traitement consiste à enregistrer l'index correspondant dans $needkey

avant d'obtenir le chinois. annotation du champ de la base de données puis redéfinir une variable fanal pour que l'index de fanal soit égal à v de needkey, et la valeur correspondante soit result[k of needkey]

4. Résumé

L'utilisation d'une telle interface de traduction est terminée, et les captures d'écran du projet ne seront pas montrées à tout le monde !

Changer plusieurs traductions en une seule traduction pour améliorer la vitesse de traduction. Après tout, cela demande quelque chose aux autres, et ce n'est certainement pas aussi rapide que de réorganiser les données nous-mêmes.

La persévérance dans l'apprentissage, la persévérance dans les blogs et la persévérance dans le partage sont les convictions que Kaka a toujours défendues depuis sa carrière. J'espère que les articles de Kaka dans Nuoda Internet pourront apporter. à toi Un peu d'aide

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn