首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PHP web应用程序的多语言结构的最佳实践

PHP web应用程序的多语言结构的最佳实践
EN

Stack Overflow用户
提问于 2012-01-03 10:51:06
回答 3查看 1.8K关注 0票数 4

我正在用PHP创建一个web应用程序,它将有许多不同的语言(总共大约10种)可用,我想知道你认为更一般的设置的最佳实践是什么。

我的想法是将所有语言都放在相同的域中,并使用后缀"http://myservice.com/de"“,其中脚本在进入站点时执行位置检查并重定向用户。

编辑内容将作为数据库中的单个帖子在所有语言之间共享,每种语言都有一个特定的数据列。标记和脚本都将以英语记录,而用户可见的页面和部分将被翻译成从公共字库文件中收集的各自语言。

.htaccess文件提供了对文章的所有重写的处理,以便以相应的语言显示它们,即从"http://myservice.com/de/artikel/12345/“到"http://myservice.com/article?id=12345&lang=de"”。

你认为什么是干净和有效的多语言设置?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-08 12:23:39

对于如何最好地建立一个国际友好网站,每个人都有不同的看法。但是,我尽量不通过创建自己的系统来重新发明轮子。相反,我使用CakePHP等框架中内置的国际化和本地化工具。

出自CakePHP的书;

要让您的应用程序接触到更多的受众,最好的方法之一是迎合多种语言。这通常被证明是一项艰巨的任务,但CakePHP中的国际化和本地化特性使其变得容易得多。

首先,理解一些术语是很重要的。国际化是指应用程序的本地化能力。术语本地化是指对应用程序进行调整,以满足特定的语言(或文化)要求(即“区域设置”)。国际化和本地化通常分别缩写为i18n和l10n;18和10是第一个字符和最后一个字符之间的字符数。

http://book.cakephp.org/1.3/view/1228/Internationalization-Localization

对我来说,使用内置工具提供了一种高效的方法来翻译应用程序,而无需重写URL。这也意味着用户可以配置他们的本地化首选项,并在每次登录时自动应用它们。

这样的方法也会被认为是对搜索引擎更友好的,因为你不会得到相同内容的多语言副本。

希望这能帮上忙。

票数 4
EN

Stack Overflow用户

发布于 2012-01-09 22:26:12

我能想到的最好的建议是不要自己做这件事

一个现有的开源CMS (内容管理系统)可能是一个很好的解决方案,而不是自己构建一个。命名两个领先的CMS系统: Drupal,Joomla。(还有更多选项)

这些系统提供了许多功能,可以通过一些配置开箱即用,也可以通过扩展插件(数千个插件)来工作。

国际化只是其中之一。可能拥有比你自己更丰富、更健壮的特性集。

此外,这些系统还提供了一个扩展的API,用于使用您自己的业务逻辑对其进行扩展。

票数 1
EN

Stack Overflow用户

发布于 2012-01-08 12:15:28

如果您使用ASP.NET (MVC2或3),我建议您阅读this文章。我认为这是.NET中的最佳实践之一

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8711133

复制
相关文章
C++指针变量作函数参数接收数组地址
在C++中,用指针变量指向数组元素时要注意: 指针变量p可以指向有效的数组元素,实际上也可以指向数组 以后的内存单元。
小林C语言
2020/12/16
9510
C++指针变量作函数参数接收数组地址
C++定义指针变量 | 使用指针变量
C++规定所有变量在使用前必须先定义,即指定其类型,在编译时按变量类型分配存储空间,对指针 变量必须将它定义为指针类型。
小林C语言
2020/12/11
2.7K0
C++定义指针变量 | 使用指针变量
关于变量、指针、别名(引用)和指针的指针
C/C++中的指针和别名这个东西确实是够恶心的。今天蛋疼的就写一下这些东西的区别,变量永远是最简单的没有什么技术含量,那么另外一个比较简单的就是别名了,其实个人感觉这个东西完全可以看作是一个人的“小名”,只是对同一个变量多了一个称呼而已,指向的数据和地址是和原变量完全一致的,并且用&进行取地址操作的得到的地址和原变量的地址是完全一致的(因而在对指针进行赋值的时候如果直接对指针地址操作则需要对变量或者别名使用&进行取地址运算,如果要直接赋值则需要使用*p=进行赋值)。最复杂的就是指针了,同样个人认为指针到头来就是一个地址,这样可能会比较好理解一些。例如*pointer,那么带有*(解引用操作符)的时候则是表示的数值,如果没有*则表示的是地址。也就是说可以将pointer看成一个内存地址在这个地址中保存的是另外一个数据的地址,当存在*的时候表示取该地址存取的内容,否则则是取这个变量保存的地址。指针的指针则就更加复杂了,例如**p,那么可以看作指针保存的数据是另外的一个指针,解引用操作一次将会得到一个*p,这仍然是个指针,当进行二次解引用操作的时候(**p)才能读到p中保存的数据信息。这么说可能比较难理解,那么看个实例就明白了。效果如下图:
obaby
2023/02/28
1.4K0
关于变量、指针、别名(引用)和指针的指针
8.2 指针变量
左端的int是在定义指针变量时必须指定的“基类型”。指针变量的基类型用来指定此指针变量可以指向的变量的类型。
小林C语言
2019/07/12
4000
地址、指针与引用
计算机本身是不认识程序中给的变量名,不管我们以何种方式给变量命名,最终都会转化为相应的地址,编译器会生成一些符号常量并且与对应的地址相关联,以达到访问变量的目的。  
Masimaro
2018/08/31
7050
C/CPP 指针变量 | 数组指针 | 指针数组 | 野指针 | 空指针
普通变量可以不赋初值,但是指针变量的初值必须万分慎重,因为未来的*操纵会以这个初值为目标内存地址,往里面读写数据(可以才C primer plus中看到相应分析)
CtrlX
2023/03/21
1.7K0
C/CPP 指针变量 | 数组指针 | 指针数组 | 野指针 | 空指针
指针|内存和地址
指针 1. 声明为指针并不会改变这些表达式的求值方式。 2. 一个变量的值就是分配给这个变量的内存位置所存储的数值。 3. 变量的值就是分配给该变量的内存位置所存储的数值,即使是指针变量也一样。 4. 内存中的每个位置由一个独一无二的地址标识。 5. 内存中的每个位置包含一个值。 6. 变量名字与内存位置之间的关联不是硬件所提供的,它是由编译器为我们实现的。 所有这些变量给了我们一种更方便的方法记录地址--硬件仍然通过地址访问内存位置。 #include <stdlib.h> #include <stdi
heidsoft
2022/03/14
3830
C语言中只读指针变量与只读变量指针
如果我们开发的时候,定义了某个变量,不想让别人修改时,就可以使用“const”关键字。
手撕代码八百里
2021/09/08
2.5K0
C/CPP 指针变量 | 数组指针 | 指针数组 | 野指针 | 空指针
普通变量可以不赋初值,但是指针变量的初值必须万分慎重,因为未来的*操纵会以这个初值为目标内存地址,往里面读写数据(可以才C primer plus中看到相应分析)
CtrlX
2022/10/04
1.7K0
C/CPP 指针变量 | 数组指针 | 指针数组 | 野指针 | 空指针
【C 语言】变量本质 ( 变量修改 | 直接修改变量 | 通过内存地址间接修改变量 | 通过指针间接修改变量 )
文章目录 一、变量修改 1、直接修改变量 2、通过内存地址间接修改变量 3、通过指针间接修改变量 一、变量修改 ---- 访问 变量 , 就是 访问 内存空间 ; 访问 指的是 读写 内存 ; 修改变量的方式 : 直接修改 : 通过 变量 , 可以 直接 修改内存 , 间接修改 : 通过取地址符 , 拿到变量所在内存的 地址编号 , 通过地址编号修改内存 ; 1、直接修改变量 #include <stdio.h> int main() { // 定义变量 a int a = 0;
韩曙亮
2023/03/29
1.3K0
【C 语言】变量本质 ( 变量修改 | 直接修改变量 | 通过内存地址间接修改变量 | 通过指针间接修改变量 )
7.1 什么是指针和指针变量
解释:由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元,因此,将地址形象化地称为“指针”
小林C语言
2019/08/19
1.1K0
C语言 | 指向结构体变量的指针变量
解题思路:在主函数中声明了struct student类型,然后定义了一个struct student类型的变量s_1,又定义了一个指针变量p,它指向一个struct student类型的对象,将结构体变量s_1的起始地址赋给指针变量p,也就是使p指向s_1,然后对s_1的各个成员赋值。
小林C语言
2020/12/21
1.8K0
C语言 | 指向结构体变量的指针变量
[GO] golang中的变量与指针
基础看的很多次,但是在实际的运用过程中 , 还是不能准确的理解变量和指针的细节 , 容易把自己搞晕
唯一Chat
2021/04/23
7690
golang 利用指针导出变量
golang 利用指针导出变量 1 golang中的指针类型:unsafe.Pointer & uintptr unsafe.Pointer 类似 C 的 void *,在golang中是用于各种指针相互转换的桥梁。uintptr 是golang的内置类型,能存储指针的整型,uintptr 的底层类型是 int,和 unsafe.Pointer 可相互转换。 unsafe.Pointer 用于转换不同类型指针,不可以参与指针运算 uintptr 用于指针运算,GC会自动回收 uintptr 类型的目标 Go
csxiaoyao
2018/05/11
8210
C语言 | 改变指针变量的值
解题思路: 指针p的值是可以变化的,printf函数输出字符串时,从指针变量p当时所指向的元素开始,逐个输出各个字符,直到遇‘\0’为止。而数组名虽然代表地址,但是它是常量,它的值是不能改变的。
小林C语言
2020/12/15
3.5K0
C语言 | 改变指针变量的值
8.2 C语言指针变量
左端的int是在定义指针变量时必须指定的“基类型”。指针变量的基类型用来指定此指针变量可以指向的变量的类型。
小林C语言
2020/12/07
1.3K0
8.2 C语言指针变量
【C语言笔记】指针变量的运算
指针变量也是可以进行运算的,如指针变量对其自身加上某个整数或减去某个整数,这在内存上体现为:相对这个指针向后偏移多少个单位或向前偏移了多少个单位,这里的单位与指针变量的类型有关。在32bit环境下,int类型占4个字节,float占4字节,double类型占8字节,char占1字节。
正念君
2019/06/26
1.4K0
【C语言笔记】指针变量的运算
C语言|图解指针变量
指针变量也是一个变量,对应一块内存空间,对应一个内存地址,指针名就是己址。这空内存空间多大?一个机器字长(machine word),32位的CPU和操作系统就是32个位,4个字节,其值域为:0x-0xFFFFFFFF。64位的CPU和操作系统就是64个位,8个字节,其值域为:0x-0xFFFFFFFFFFFFFFFF。
C语言中文社区
2022/11/08
1.6K0
C语言|图解指针变量
const修饰指针变量详解
对于指针的认识,应该很多时候都是从C语言开始,那么const修饰的指针变量到底与指针变量有点什么区别呢?
全栈程序员站长
2022/07/11
3470
C语言之指针变量
  4、指向常量的常量指针:有2个const修改,既不能间接修改变量的值,也不可重新赋值新变量地址
tandaxia
2018/09/27
2.1K0

相似问题

删除元素周围的填充

22

文本输入周围神秘的“填充”

32

删除输入元素上addonBefore和addonAfter周围的额外填充

10

在JQuery移动版中删除输入周围的边框填充

11

样式组件中子组件输入焦点的样式父组件-组件

34
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文