如何使用wordpress建设“多语言网站”

前几天用wordpress把主域名freeflying.org这个网站建设了下,主题不再追求花哨的效果,但求简约、浏览器兼容性强。后来受到一个顾客的启发,准备把freeflying.org做成“多语言网站”,即一个网站不仅仅可以显示中文内容,还能显示英文等其他语言的内容。当时那个用户的网站其实不算是“多语言网站”,而是使用“域名+文件夹路径”的方法建立了多个网站,一个网站对应一种语言。如:域名abc.com对应的是英文网站,则用abc.com/cn/建设中文网站,并在abc.com上添加内页,起名“中文”,地址为:abc.com/cn/。这样就在英文站上加了个向中文站跳转的链接。这其实是利用了wordpress添加内页路径与中文站路径巧合,骗取wordpress对abc.com/cn/处理时,由原先的伪文件处理变成文件处理进而跳转到子站abc.com/cn/。这其实很巧合的!!

刚开始,我就按照上面的思路建设有两个站组合起来的“多语言网站”——其实不算是“多语言网站”!——先安装好英文子站:freeflying.org/en/,然后在freeflying.org中新建内页,起名“English”,路径为:freeflying.org/en/。这样英文站就被关联进了中文网站中,点击中文站中的“English”便可以跳转到英文站freeflying.org/en/。

不过这样做,网站存在几个问题:

  1. 跳转是反应比较慢,效率要低;
  2. 在英文站中无法用相同方式跳转回中文站。

后来,受到wordpress模版页面的启发,打算通过修改页面模版来实现效果。过程如下:

  1. 在wordpress后台中,外观——编辑,在右侧的文件中找个不用的模版页面进行修改;
  2. 把模版页面中的代码清理下,仅留最上面的注释内容。(如果注释内容也清理掉,这个文件就失去了模版的作用,下面就无法操作了)
  3. 在注释内容的上方添加php语句:header(“location: http://www.freeflying.org/en/”);——http://www.freeflying.org/en/这里改写成要跳转网站的网址。模版页面的内容如下:
<?php
header("location: http://www.freeflying.org/en/");
/*
Template Name: Links
*/
?>
  1. 在wordpress后台中,页面——新建页面,填写页面名“English”,路径可以随便写,不一定非要使用www.freeflying.org/en/,页面模版选择刚才修改过的模版。发布后就可以实现效果了。

如法炮制,在英文站中添加跳转回中文站的内页,就可以实现两种语言的自由切换了!这样的一个好处是,也可以使用主域名的子域名来建设“多语言网站”,如:cn.freeflying.org和en.freeflying.org等!

不过,这毕竟是两个网站,文章内容和网站后台都是独立的,网站和数据库存在很多冗余。这个方法不适合中型以上的的“多语言网站”和中英文文章大部分同步的网站!

判断一个正整数是否为素数(也称作质数)

所谓“素数”,就是只能被自身和1整除的正整数,也称作“质数”。它的对立面是“合数”,合数不仅可以被自身和1整除,还可以被其他正整数整除。
通过分析我们可以得知,一个正整数的整除因子因该是大于等于0、小于等于自身的正整数。所以,就有了一个办法判断一个正整数是否为素数——用[2,N-1]中的正整数(x)整除N,如果有值可以整除N,则N就不是素数。(可以用玉漱是否为0来判断:N % x == 0)
当然还有个优化的方法,可以节省不少计算——就是把除数范围缩减到[2,(int)sqrt(N)],(int)sqrt(N)为对N开方后的值取整数。——因为18能被3整除和18能被6整除其实是一个效果的!下面的源代码就是使用了这种方法:

//判断一个正整数是否为素数(也称作质数)
#include<stdio.h>
#include<math.h>//引用系统的数学函数库

/**判断是否为素数的函数
*如果是素数返回1,否则返回0
**/
int is_primeNum(int num){
	int i,sqrt_num;
	int is_su = 1;

	sqrt_num = (int)sqrt(num);
	for(i = 2;i <= sqrt_num;i++){
		if(num % i == 0){
			is_su = 0;
			break;
		}
	}

	return is_su;
}

void main(){
	int num;
	int is_su;

	printf("please input a number!nsum = ");
	scanf("%d",&num);

	is_su = is_primeNum(num);

	if(is_su == 1){
		printf("%d is a prime number!n",num);
	}else{
		printf("%d is not a prime number!n",num);
	}

}

在这特别声明下:再好的编程技术未必能做出最优秀的软件产品,再优秀的软件产品未必能有良好的市场并被大众认可。所以,设计架构和编程时,要多为用户着想、为同事着想。软件产品再“高端大气上档次”,也是要归结到“人”这个根本性问题上来。所以,良好的软件产品要有不错的可读性和用户体验!
 
 
 

输入a、b、c三个值,输出最大值

 
题目要求:输入a、b、c三个值,输出其中的的最大值。
思路:用比较运算符“?:”获得最大值,复制给变量max。通过max与a、b、c比较,输出显示最大值。

//输入a、b、c三个值,输出最大值
#include<stdio.h>
void main(){
	int a,b,c;	//定义三个变量,接收输入值
	int max;	//作为容器变量,并存放最后结果

	//输入三个值
	printf("please input the first number.na = ");
	scanf("%d",&a);
	printf("please input the second number.nb = ");
	scanf("%d",&b);
	printf("please input the third number.nc = ");
	scanf("%d",&c);

	//比较最大值
	max = a > b ? a : b;
	max = max > c ? max : c;

	//输出最大值
	if(max == a){
		printf("the max number is a : %dn",a);
	}else if(max == b){
		printf("the max number is b : %dn",b);
	}else if(max == c){
		printf("the max number is c : %dn",c);
	}else{
		printf("there are errors in the code!n");
	}

}
/**
*
*缺陷1:未对输入值进行范围限定;(int类型为16个bit,2个字节,范围是-32768~32767。)
*
*缺陷2:未对输出进行细化。(当a、b、c有相同值时应该进行相关提示。)
*
**/

当然,还有其他方法可以实现。对于多值比较大小,可以使用“冒泡法排序”和“选择法排序”中的第一步实现。这两方法可以再后面的排序方法时接触。
 
 

C语言输出规定格式字样

   题目要求:请输出以上格式的字样。
思路:有两种解决办法,一种是以行为单位,分别输出;另一种是对行中的元素进行细化,找到最小单位,有循环语句控制输出。下面是第二种方法的源码。

//按规定样式输出
#include<stdio.h>
void main(){
	int i;//i为控制次数的变量

        //输出第一行,以”* “两个字符为最小单位,循环30次
	for(i = 0;i < 30;i++){
		printf("* ");
	}
	printf("n");

        //输出第二行,先以”  “两个空格为最小单位,循环12次;再输出”Very good!“
	for(i = 0;i < 12;i++){
		printf("  ");
	}
	printf("Very good!n");
        //输出第三行,以”* “两个字符为最小单位,循环30次
	for(i = 0;i < 30;i++){
		printf("* ");
	}
	printf("n");
}

 
 

解读C语言的“Hello World!”

接触过几门编程语言的人都知道,学习的第一个源码就是“请输出hello world!”。虽说这是一个最简单的源码,现在想想其实是值得推敲的!
这段源码考察了一下几个方面:

  1. 熟悉编译环境,包括:如何创建项目,如何创建源代码文件,如何编译、调试和运行程序等;
  2. 了解这门语言源代码的基本结构;
  3. 掌握这门语言的输出语句。

以下就是C语言“输出hello world!”的源码:

//输出“hello world!”
#include<stdio.h>
void main(){
	printf("hello world!n");
}

#include<stdio.h>:引用系统的头文件,实际就是一个系统函数库(stdio.h),下面的printf函数就在这个库里。如果不引用系统函数库,编译时,编译器是不知道printf函数的,如:当注释掉这句语句时,编译时会提示“’printf’ : undeclared identifier”,意思是,printf未被定义。相同道理,如果以后要调用的函数在其他库里,就把stdio.h换成对应的库;甚至可以引用自定义函数库——#include”XXX.h”。
void main(){}:是C语言的主函数,源代码的执行从main函数开始,不管中间调用了多少其他函数,最终还是回到main函数结束,各个函数以栈的形式来被管理执行过程。
printf(“hello world!n”);:前面提到了printf函数是C语言系统函数之一,负责数据输出,可以输出字符串、字符、数字等等。使用方法比较多,后面会一部分内容专门讲解这个函数的参数,这里不多讲。有时为了输出美观,一般会在每句输出后面夹’n’实现输出换行。还有,就是C语言的语句后面要以’;’结尾,各种符号要为英文输入法下的半角字符,不要使用中文输入法下的字符,否则,编译时会报错!
还有就是,这里讲的C语言是通用C语言。当然还有其他的专用C语言,如:单片机的C语言、ARM的C语言等等,这些专用C语言主要是系统函数库不同,所以,现在学习的C语言,是学习单片机和嵌入式的基础课程!