Ищу языковую базу и коды - PullRequest
0 голосов
/ 08 марта 2010

Я ищу таблицу названий языков и кодов, таких как набор ISO 639-1: http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes

Спасибо

Ответы [ 3 ]

2 голосов
/ 08 марта 2010

Здесь - текстовый файл (преобразованный из статьи в Википедии), который также содержит названия на родном языке. Файл с разделителями табуляции UTF-8. Это преобразование 1: 1, поэтому оно может содержать ошибки!

2 голосов
/ 08 марта 2010

Вам понадобится ISO 639-3 , если вы хотите актуальный список.

0 голосов
/ 05 июля 2012

Улучшение ответа Obalix. Я создал bash-скрипт, который возьмет файл UTF-8 CSV и вставит его в базу данных. Обратите внимание, что файл, предоставленный Obalix, находится в UTF-16, а не в UTF-8. Приведенный ниже скрипт проверяет его кодировку и советует пользователю, как его преобразовать.

Конечно, вам нужно изменить оператор вставки в соответствии с вашей схемой.

#!/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
...