Yii2中做中英文网站
网站要做成一个中英文的,数据也要是中英文的,要怎么搞?
下面是我的一些想法:
建个模块,网站默认是中文,英文就放到英文的那个模块里,是英文的时候就调用英文的数据?
中文一套模板,英文一套模板?
<code> 'modules' => [ 'en' => ['class' => '\app\modules\english\Module'], ]</code>
那数据要怎么存呢?给每条数据都加一个字段,lang = 'en' / lang = 'zh'
这样?
还是个数据多加几个字段, 像下面这样,title
存中文, title_en
存英文?
<code>CREATE TABLE `courses` ( `id` int(11) unsigned NOT NULL auto_increment, `title` varchar(255) NOT NULL default '', `title_en` varchar(255) NOT NULL default '', `cover` varchar(255) NOT NULL default '' comment '封面', `text` text, `text_en` text, `start_date` int(11) unsigned NOT NULL default 0 comment '开始日期', `end_date` int(11) unsigned NOT NULL default 0 comment '结束日期', `days` int(11) unsigned NOT NULL default 0 comment '有效天数', `maxnum` int(11) unsigned NOT NULL default 0 comment '最多报名人数', `has_num` int(11) unsigned NOT NULL default 0 comment '已报名人数', `price` decimal(10,2) comment '课程费', `created_at` int(11) unsigned default '0', `updated_at` int(11) unsigned default '0', `status` varchar(16) default 'on' comment 'on开启 off关闭 expire到期', `extra` text comment '额外的一些数据 可以使用序列化数据 serialize', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</code>
求比较好的解决方法,像 苹果官网
的多语言是如何做的,数据是怎么存的?
回复内容:
网站要做成一个中英文的,数据也要是中英文的,要怎么搞?
下面是我的一些想法:
建个模块,网站默认是中文,英文就放到英文的那个模块里,是英文的时候就调用英文的数据?
中文一套模板,英文一套模板?
<code> 'modules' => [ 'en' => ['class' => '\app\modules\english\Module'], ]</code>
那数据要怎么存呢?给每条数据都加一个字段,lang = 'en' / lang = 'zh'
这样?
还是个数据多加几个字段, 像下面这样,title
存中文, title_en
存英文?
<code>CREATE TABLE `courses` ( `id` int(11) unsigned NOT NULL auto_increment, `title` varchar(255) NOT NULL default '', `title_en` varchar(255) NOT NULL default '', `cover` varchar(255) NOT NULL default '' comment '封面', `text` text, `text_en` text, `start_date` int(11) unsigned NOT NULL default 0 comment '开始日期', `end_date` int(11) unsigned NOT NULL default 0 comment '结束日期', `days` int(11) unsigned NOT NULL default 0 comment '有效天数', `maxnum` int(11) unsigned NOT NULL default 0 comment '最多报名人数', `has_num` int(11) unsigned NOT NULL default 0 comment '已报名人数', `price` decimal(10,2) comment '课程费', `created_at` int(11) unsigned default '0', `updated_at` int(11) unsigned default '0', `status` varchar(16) default 'on' comment 'on开启 off关闭 expire到期', `extra` text comment '额外的一些数据 可以使用序列化数据 serialize', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</code>
求比较好的解决方法,像 苹果官网
的多语言是如何做的,数据是怎么存的?
1、英语翻译成别的语言比较方便,Yii配置文件里可以配置sourceLanguage=>‘en-US',lanaguae=>'zh-CN',同时Yii::$app->language是一个可读可写的全局变量。
Yii::t() 方法的用法如下,
echo \Yii::t('app', 'This is a string to translate!');
第一个参数指储存消息来源的类别名称,第二个参数指需要被翻译的消息。这个 Yii::t() 方法会调用 i18n 应用组件 来实现翻译工作。这个组件可以在应用程序中按下面的代码来配置,
'components' => [
<code>// ... 'i18n' => [ 'translations' => [ 'app*' => [ 'class' => 'yii\i18n\PhpMessageSource', //'basePath' => '@app/messages', //'sourceLanguage' => 'en-US', 'fileMap' => [ 'app' => 'app.php', 'app/error' => 'error.php', ], ], ], ], ], 在上面的代码中,配置了由 yii\i18n\PhpMessageSource 所支持的消息来源。模式 app* 表示所有以 app 开头的消息类别名称都使用这个翻译的消息来源。该 yii\i18n\PhpMessageSource 类使用 PHP</code>Copy after login文件来存储消息翻译。 每 PHP 文件对应单一类别的消息。默认情况下,文件名应该与类别名称相同。但是,你可以配置
yii\i18n\PhpMessageSource::fileMap 来映射一个类别到不同名称的 PHP 文件。在上面的例子中, 类别
app/error 被映射到PHP文件 @app/messages/ru-RU/error.php(假设 ru-RU
为目标语言)。如果没有此配置, 该类别将被映射到 @app/messages/ru-RU/app/error.php 。除了在PHP文件中存储消息来源,也可以使用下面的消息来源在不同的存储来存储翻译的消息:
yii\i18n\GettextMessageSource 使用 GNU Gettext 的 MO 或 PO 文件保存翻译的消息。
yii\i18n\DbMessageSource 使用一个数据库表来存储翻译的消息。
补充一下Yii::t('app', 'This is a string to translate!',"zh-CN")这个方法可以传入目标语言参数。
2、数据库的内容,建议考虑多张表保存不同语言的那部分。如果每个语言一张表的话,扩展性较差;可以在表里加入language字段,根据Yii::$app->language和外键配置好关联也是很方便的。
数据库考虑可以创建结构完全一致的2个表:article_en、article_zn
使用同一个model,用url参数或者其他方法判断当前语言,在model中使用如下方法,切换对应的数据表:
<code>public static function tableName() { if (//如果是中文) { $table_name = 'article_zn'; } else { $table_name = 'article_en'; } return $table_name; }</code>
那要是支持10个国家的语言呢?都用数据库太浪费了。
可以借鉴tp框架的多语言,它是把不同的语言放入文件中。根据cookie或者session来区分语言,加载相应的语言文件。不过局限性也在于它好像只能做静态页面。
现在的骚年们使用框架前都不过一遍文档的吗?
Yii是支持多语言机制的。
赶紧戳这里看看吧。

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
