寻找语言数据库和代码

时间:2010-03-08 20:09:44

标签: multilingual

我正在寻找一个语言名称和代码表,如ISO 639-1集:http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes

由于

3 个答案:

答案 0 :(得分:2)

如果你想要最新的清单,你会想要ISO 639-3

答案 1 :(得分:2)

  • 您可以从here下载ISO 639-1和639-2代码。
  • 来自here的ISO 639-3。

Here是一个文本文件(从维基百科文章转换而来),其中还包含本机语言名称。该文件是制表符分隔的UTF-8。这是一个1:1的转换,因此它可能包含错误!

答案 2 :(得分:0)

增强Obalix答案,我创建了一个bash脚本,它将采用UTF-8 CSV文件并将其插入数据库。 请注意,Obalix提供的文件是UTF-16 NOT UTF-8。下面的脚本检查其编码并建议用户如何转换它。

当然,您需要根据您的架构修改insert语句。

#!/bin/bash
USAGE="Usage: $0 <csv-file>"
if [ $# -lt 1 ]
then
  echo $USAGE
  exit 1
fi

csv=$1

if [ ! -f $csv ]; then
  echo "$csv: No such file"
  exit 1
fi

file $csv | grep -q UTF-8
if [ $? -ne 0 ]
then
  echo $csv: must be in UTF-8 format, use the following command to fix this:
  echo "cat $csv | iconv -f UTF-16 -t UTF-8 | tr -d \"\r\" > utf8-$csv"
  exit 1
fi

mysql=<PATH/TO/mysql/BINARY>
db=<DATABASE_NAME>
user=<USERNAME>
pass=<PASSWORD>
sql=insert-all-langs.sql
echo "-- Inserting all languages generated on `date`" > $sql

printf "Processing CSV file..."

# prepend _ to all lines so that no line starts by whitespace
sed 's/.*/_&/' $csv | while read l; do
  iso6391=`echo "$l" | cut -f4`
  name=`echo -e "$l" | cut -f3 | tr -d "\"" | sed 's/'\''/\\\\'\''/g'`

  echo $iso6391:$name
  # insert ignore supresses errors for duplicate locales (row still not inserted) 
  echo "insert ignore into languages (name, locale, rtl, created_at, updated_at) values ('$name', '$iso6391', 0, now(), now());" >> $sql
done

echo Done

printf "Executing SQL..."
cat $sql | $mysql -u$user -p$pass $db
echo Done