/*
 * Start
 * Japanese Language Support
 *
 * Copyright 2003 Dan Kegel
 * Copytight 2009 Akihiro Sagawa
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include "resources.h"

#pragma code_page(65001) /* UTF-8 */

LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT

STRINGTABLE DISCARDABLE
{
STRING_USAGE,                                   "プログラムを開始したり、拡張子に基づき通常使われるプログラムで文書を開きます。\n\
使い方:\n\
start [options] プログラムファイル名 [...]\n\
start [options] 文書ファイル名\n\
\n\
オプション:\n\
/M[inimized] プログラムを最小化した状態で開始します。\n\
/MAX[imized] プログラムを最大化した状態で開始します。\n\
/R[estored]  プログラムを通常の状態で開始します。(最小化や最大化ではなく)\n\
/W[ait]      開始したプログラムが終了するまで待機し、そのプログラムの終了コードで終了します。\n\
/Unix        Unix ファイル名を使用して、windows エクスプローラのようにファイルを開始します。\n\
/ProgIDOpen  直後に指定した progID を利用して文書を開きます。\n\
/L           エンドユーザ ライセンスを表示します。\n\
\n\
start.exe version 0.2 Copyright (C) 2003, Dan Kegel\n\
Start は完全に無保証です。詳細は /L オプションをつけて起動してください。\n\
これはフリー ソフトウェアです。一定の条件下で自由に再配布できます。\n\
条件の詳細は 'start /L' を起動してください。\n\
"

STRING_LICENSE, "start.exe version 0.2 Copyright (C) 2003, Dan Kegel\n\
This program is free software; you can redistribute it and/or\n\
modify it under the terms of the GNU Lesser Public License\n\
as published by the Free Software Foundation; either version 2.1\n\
of the License, or (at your option) any later version.\n\
\n\
This program is distributed in the hope that it will be useful,\n\
but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n\
GNU Lesser Public License for more details.\n\
\n\
You should have received a copy of the GNU Lesser Public License\n\
along with this program; if not, write to the Free Software\n\
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.\n\
\n\
ライセンスの内容については COPYING.LIB ファイルを参照してください。\n\
"

STRING_EXECFAIL, "アプリケーションを開始できません。もしくは、指定したファイルにアプリケーションが関連付けられていません。\nShellExecuteEx が失敗しました。"

STRING_UNIXFAIL "指定された Unix ファイル名を DOS ファイル名に変換できませんでした。"
}
