言語判別方法と言語ごとのページ遷移先の変更について

このQ&Aのポイント
  • Webページを開いたときに、各言語ごとに開くページの飛び先を変更したい場合、ASPのSelect文を使用することができます。
  • 言語判別にはHTTP_ACCEPT_LANGUAGE変数を使用し、文字列の中に特定の言語コードが含まれるかどうかを判定します。
  • 一般的には、このような手法は一定の効果がありますが、正確な言語判別には限定的なものであるため、他の手法も併用することが推奨されます。
回答を見る
  • ベストアンサー

言語判別

いつもお世話になっております。 早速ですが、Webページを開いたときに、各言語ごとに 開くページの飛び先を変更したいのです。 ASPを使って <% Dim lang lang=Request.ServerVariables("HTTP_ACCEPT_LANGUAGE") If inStr(lang,"ja")>0 then Response.Redirect("http://aaa.co.jp/") elseIf inStr(lang,"zh-tw")>0 then Response.Redirect("http://bbb.co.jp/") elseIf inStr(lang,"zh")>0 then Response.Redirect("http://ccc.co.jp/") else Response.Redirect("http://top/co.jp/") end if %> のようにして一応は出来たのですが、これをSelect文で実現できますでしょうか? また、一般的にこのような手法は正しいですか? 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • 9arabi
  • ベストアンサー率32% (140/433)
回答No.1

ご参考までに。

参考URL:
http://www.f-store.net/asp/parts.asp?MODE=ITIRAN&key=5256
015_dogi
質問者

お礼

9arabiさんご回答ありがとうございました。 同様に下記のようにしたのですが、英語のページに飛んでしまいます。 IEの言語の設定でjaが優先にはなっていますが、他の言語も入っていると 英語のページに飛んでしまいます。 jaだけにすれば問題はありません。 <% strFullLang = Request.ServerVariables("HTTP_ACCEPT_LANGUAGE") x=instr(strFullLang,"-") If x <= 1 Then strLang = strFullLang Else strLang = Left(strFullLang, x-1) End If strLang = LCase(Trim(strLang)) Select Case strLang Case "ja" Response.Redirect "http://aaa.html" Case "zh-tw" Response.Redirect "http://bbb.html" Case "zh" Response.Redirect "http://ccc.html" Case Else Response.Redirect "http://ddd.html" End Select %> 分かりますでしょうか?

その他の回答 (2)

  • 9arabi
  • ベストアンサー率32% (140/433)
回答No.3

ちょっと私では分かりかねますが、 ブラウザの設定だけが中国語になっても、 他の環境が違うから、なのでしょうか。 コントロールパネルから、地域の設定をかえてみてはいかがでしょうか。

015_dogi
質問者

お礼

9arabiさんありがとうございます。 私のほうもいろいろ設定しなおしたのですが、駄目なようです。 IEの言語の設定を2つ登録してある人も少ないですよね。 このまま運用するか、IF文でのプログラムを使うか、または他の方法も 探してみます。 色々ありがとうございました。

  • 9arabi
  • ベストアンサー率32% (140/433)
回答No.2

今実行して何が取得できるか確認できる環境にないので、アドバイスのみ。 該当のキーを検索すると(日本語に限定しないで) 結構色々出てきますので参考にされたらどうかと… 「Request.ServerVariables HTTP_ACCEPT_LANGUAGE ja en zh」 「他の言語も入っていると…」というのが理解できませんでした。 Request.ServerVariables("HTTP_ACCEPT_LANGUAGE")で取得できるものが異なるということでしょうか? http://www.microsoft.com/japan/msdn/library/ja/jpdnclinic/htm/scripting080999.asp HTTP_ACCEPT_LANGUAGEでとれる値も、環境によって絶対ではないので、完璧にするのは難しいと思います。 ご参考まで。

参考URL:
http://64.233.167.104/search?q=cache:L7BuzkQvhsYJ:cvs.uwc.ac.za/viewcvs/viewcvs.cgi/kewl/classes/browser_class.asp%3Frev
015_dogi
質問者

お礼

9arabiさんありがとうございます。 >「他の言語も入っていると…」というのが理解できませんでした。 はIEの「ツール」→「オプション」→「全般」タブ内の「言語」のボタンを開くと 「言語の優先順位」というものがあり、テストで中国語(zh)を追加して日本語(ja) より上(優先)に設定したということです。jaだけでは日本語が表示されますが、 中国語を登録するとselect elseのページが開いてしまいます。 if 文のときは、優先にした言語が開くように出来ていました。 inStr(lang,"ja")>0 thenの問題ですかね? 宜しくお願いします。

関連するQ&A

  • どういう可能性があるか教えてください・・・

    ASPで動的なページを作っています。 送信元のページに戻るのに、 Response.redirect Request.ServerVariables("HTTP_REFERER") とし、戻っています。 私の環境では問題なく戻れていますが、ユーザによっては、URLが必要ですというエラーが表示されてしまい戻りません。 どういう可能性が考えられますでしょうか?

  • .NETのプログラミング(長文)

    .netでvbでプログラムをしている者です。 現在特定の文字の場合に飛び先を変更しているのですが、今回から特定の文字を含む場合に飛び先を変更するプログラムを作りたいのですが上手くいきません。 (現在) Select Case Session("USSER") Case "XXXX" Response.Redirect("A.aspx") Case else Response.Redirect("B.aspx") End Select (変更) DIM menuflg AS Boolean menuflg = Session("USSER") Like "XX%" If menuflg = true Then Response.Redirect("A.aspx") Else Response.Redirect("B.aspx") End If 宜しく御願いします。

  • Ruby 演算子 "==="

    Rubyの演算子 "===" についての質問です。 例:Rubyリファレンスより抜粋 require 'uri' require 'net/http' Net::HTTP.version_1_2 # おまじない def fetch( uri_str, limit = 10 ) # 適切な例外クラスに変えるべき raise ArgumentError, 'http redirect too deep' if limit == 0 response = Net::HTTP.get_response(URI.parse(uri_str)) case response when Net::HTTPSuccess then response when Net::HTTPRedirection then fetch(response['location'], limit - 1) else response.error! end end HTTPRedirectionが起きたと仮定して。 この case文だと思った通りの動きをします。 しかし、case文の部分を if response == Net::HTTPRedirection としたところ if文の中に入ってきません。何故でしょう? if response === Net::HTTPRedirection としても同じ結果でした。 Rubyを勉強しはじめて 初日からこんな調子ですが 宜しくお願いいたします。

  • InStr の不具合

    InStr で期待した値が取得できません。 sMMgText に sMMgText_stop の文章が二重に入っていたとき、sMMgText_stop の値を空白にしたい のですが、sMMgText_stop が一つだけあったときも sMMgText_stop の値が空白になります。 nPos = InStr(sMMgText_stop, sMMgText) If nPos > 0 Then nPos2 = Instr(nPos + 10, sMMgText_stop, sMMgText) If nPos2 > 0 Then sMMgText_stop = "" response.write nPos & "■" & nPos2 End If End If デバッグ用の response.write では「1■11」となります。 二回目の InStr 関数がうまく働いていないようです。 どなたか、このバグ(InStr関数 or 私の)の修正点をご教示いただけないでしょうか? よろしくお願いします。

  • エクセルマクロの改良

    テキストボックス内に×の文字列があれば、エンターキーを押すたびに×の前にカーソルが行きます。 最後の×の後ろにもカーソルが行くようにしたいのですがご教授くださいませ。 If .Value Like "*×*×*" Then s = .SelStart ss = InStr(s + 2, .Value, "×") If ss >= s + 2 Then .SelStart = ss - 1 KeyCode = 0 End If ElseIf .Value Like "*×*×*×*×" Then s = .SelStart ss = InStr(s + 2, .Value, "×") If ss >= s + 2 Then .SelStart = ss - 1 KeyCode = 0 End If

  • ページを一度更新しないとSession値が渡らない。

    ASPで初めてプログラムしています。 A.asp → Err.inc → Err.asp というように、エラーがあったらErr.aspに 遷移するようにしているのですが、 Err.aspで更新ボタンを押さないとSession値が表示されません。 具体的に *** Err.inc *** <% Sub COMM_USER_ERROR(strMsg)   session("ErrMsg") = strMsg   'システムエラー表示   Response.Redirect("Err.asp")   Response.End End Sub %> *** A.asp *** If Request.ServerVariables("REQUEST_METHOD") <> "POST" Then   Call COMM_USER_ERROR("不正なアクセスをしました") End If *** Err.asp *** <HTML>   (中略)   <%=session("ErrMsg")%> どうしたらよいか全くわかりません。 どなたか教えていただけないでしょうか? よろしくお願いいたします。

  • InputBoxで代入した変数を比較演算子で処理

    InputBoxに入力し その値を判定後次処理に進むよう作成中で つまづいてます。 InputBoxにtype1を記述すると 空白で「OK」を選択時に 「入力した数式は正しくありません」 というヘルプ付のエクセル標準の警告 が表示される為、type1をやめ、  IsNumericが数値ではないのにTrueを返す文字の対策、 正の整数半角以外の時は再入力させるように (0、負、数字以外、大文字、キャンセル、キャンセルのキャンセル、  空白でOKを押すなど) してみましたが肝心の ElseIf 開始行2 > 最終行 Then と ElseIf 終了行2 <= 開始行2 Then が思ったように処理されません。 ウォッチ式でも ElseIf 開始行2 > 最終行 Then ↓ 3 > 25  12 > 25 →双方Falseのはず→True→【NG】 ElseIf 終了行2 <= 開始行2 Then ↓ 3 <= 4 →Trueのはず→True→【OK】 7 <= 4 →Falseのはず→False→【OK】 12 <= 4 →Falseのはず→True→【NG】 4 <= 11 →Trueのはず→False→【NG】 という具合です。 変数の型の未定義が原因かと 数値系で定義すると"False" Thenの所で「型が一致しません」で ERRです。 変数の開始行、終了行の型をAs Longにして ElseIf 開始行 = "False" Then ElseIf 終了行 = "False" Then ↓ ElseIf 開始行 = False Then ElseIf 終了行 = False Then にすればERRは出ませんが本題は改善されません。 片方の変数を数値で固定すれば思ったように動きました。 例:ElseIf 終了行2 <= 4 Then 変数同士を比較演算子で判定はできないのでしょうか? 正しく判定できない原因を教えていただきたくお願いします。 Dim 最終行 Dim 開始行 Dim 開始行2 Dim 終了行 Dim 終了行2 Dim 質問 最終行 = Cells(Rows.Count, 3).End(xlUp).Row Do 開始行 = Application.InputBox("開始行を" & vbCrLf & _ "数字で入力してください") If 開始行 = "" Then '(分岐1-1)空白でOKを押時 MsgBox "【空白】は指定できません(>_<)", vbCritical, "エラー!!" ElseIf 開始行 = "False" Then '(分岐1-2)キャンセル選択時 '(分岐1-2-1) If MsgBox("終了します", vbOKCancel + vbExclamation, "確認") = vbOK Then Exit Sub 'OK押下時→終了 End If '1-2-1終了 ElseIf IsNumeric(開始行) Then '(分岐1-3-1)数値か確認 開始行2 = StrConv(開始行, vbNarrow) '数値なら全角→半角 'IsNumericがTrueを返した時の確認 If InStr(開始行2, ".") Then '(1-3-2)小数指定時と123.56対応 MsgBox "【小数点】は駄目です。(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf 開始行2 <= 0 Then '(1-3-3)負の数字と-123対応 MsgBox "負(マイナス)の数は駄目です(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" 'IsNumericが数値ではないのにTrueを返してしまう文字の対策 ElseIf InStr(開始行2, "+") Then '(1-3-4)+123と123+対応 MsgBox "【+】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(開始行2, "-") Then '(1-3-5)123-対応 MsgBox "【-】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(開始行2, ",") Then '(1-3-6)1,,,,,,6対応 MsgBox "【,】はいれては行けません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(開始行2, "E") Then '(1-3-7)3E2対応 MsgBox "【E】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(開始行2, "D") Then '(1-3-8)3D2対応 MsgBox "【D】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" '判定開始 ElseIf 開始行2 = 1 Then '(1-3-9)1は駄目 MsgBox "【1】は指定できません。(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf 開始行2 > 最終行 Then '(1-3-10)●入力値が最終行を超える MsgBox "【" & 開始行2 & "】" & "行以降はデータがありません。(>_<)" _ & vbCr & "再入力してください", vbCritical, "エラー!!" Else '(1-3-11)1~10以外の場合 Exit Do 'Doを抜ける End If '1-3 11項目終了 Else '(分岐1-4)数値以外の場合 MsgBox "数値以外は駄目です(>_<)" & vbCr & "再入力してください", _ vbCritical, "エラー!!" End If '1~4終了 Loop 質問 = MsgBox("最終行まで処理しますか?", vbYesNo + vbQuestion) Select Case 質問 Case vbNo Do 終了行 = Application.InputBox("終了行を" & vbCrLf & _ "数字で入力してください") If 終了行 = "" Then MsgBox "【空白】は指定できません(>_<)", vbCritical, "エラー!!" ElseIf 終了行 = "False" Then If MsgBox("終了します", vbOKCancel + vbExclamation, "確認") = vbOK Then Exit Sub End If ElseIf IsNumeric(終了行) Then 終了行2 = StrConv(終了行, vbNarrow) If InStr(終了行2, ".") Then MsgBox "【小数点】は駄目です。(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf 終了行2 <= 0 Then MsgBox "負(マイナス)の数は駄目です(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, "+") Then MsgBox "【+】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, "-") Then MsgBox "【-】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, ",") Then MsgBox "【,】はいれては行けません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, "E") Then MsgBox "【E】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf InStr(終了行2, "D") Then MsgBox "【D】は入れてはいけません(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" ElseIf 終了行2 <= 開始行2 Then'●判定 MsgBox "入力した値は" & vbCr & "開始行以前です。(>_<)" & vbCr & _ "再入力してください", vbCritical, "エラー!!" Else Exit Do End If Else MsgBox "数値以外は駄目です(>_<)" & vbCr & "再入力してください", _ vbCritical, "エラー!!" End If Loop 最終行 = 終了行2 '最終行の値を終了行2に変更 Case vbYes 'Yesの場合 End Select '最終行の値は変更せず次の処理へ

  • ASPをPHPに移植したいですが、よい方法があるでしょうか?

    ASPをPHPに移植したいですが、よい方法があるでしょうか? Set httpObj = Server.CreateObject("WinHttp.WinHttpRequest.5.1") If Err.Number <> 0 Then 'error check for http  Response.Write("エラー:" & Err.Description)  response.redirect("/ga-ko/error.asp?error=999")  response.end End If どうぞ、よろしくお願いします。

    • 締切済み
    • PHP
  • ブラウザからEXEを起動するには

    VBで作成したEXEファイルをブラウザから起動したいのですが、 うまく行きません。お知恵を拝借させてください。 以下やってみたことです。 1.EXEを起動させるバッチファイルを書いてそれにリンクをする。 →起動時に確認のポップアップが出てきて鬱陶しい 2.ASPで、以下のような記述をする <% Set bobj = Server.CreateObject("basp21") rc = bobj.Execute("C:\×××\×××.exe",0,stdout) if rc = 0 then Response.write "成功" Elseif rc = -1 then Response.write "エラー" Elseif rc = -2 then Response.write "タイムアウト" End if %> →画面上は「成功」の文字が出てくるけれども、EXEは起動しませんでした。  しかし、よくよく見るとプロセスだけは立ち上がっていて。。。  どうすればきちんと起動するのでしょうか? よろしくお願いします。

  • VBScript

    現在ASPをもとにWebサイトを作成しています。 「Microsoft VBScript コンパイラーエラー(0X800A03F6) 'End'がありません。」と出るのですが、どこが原因なのでしょうか? <%@ LANGUAGE="VBSCRIPT" %> <% ' #################### ' ### データ送信用 ### ' #################### StrUsername = Request.Form("username") StrUruby = Request.Form("uruby") StrDatofbirth = Request.Form("dayofbirth") StrEmail1 = Request.Form("email1") StrEmail2 = Request.Form("email2") StrGender = Request.Form("gender") StrPostnumber = Request.Form("postnumber") StrAddress = Request.Form("address") StrTel1 = Request.Form("tel1") StrTel2 = Request.Form("tel2") StrSchool = Request.Form("school") StrFaculty = Request.Form("faculty") StrDepartment = Request.Form("department") StrSurvey = Request.Form("survey") StrComment = Request.Form("comment") StrDesiredjobtype = Request.Form("desiredjobtype") if username = "" then username = "未入力" end if if uruby = "" then uruby = "未入力" end if if dayofbirth = "" then dayofbirth = "未入力" end if if email1 = "" then email1 = "未入力" end if if email2 = "" then email2 = "未入力" end if if gender = "" then gender = "未入力" end if if postnumber = "" then postnumber = "未入力" end if if address = "" then address = "未入力" end if if tel1 = "" then tel1 = "未入力" end if if tel2 = "" then tel2 = "未入力" end if if faculty = "" then faculty = "未入力" end if if department = "" then department = "未入力" end if if survey = "" then survey = "未入力" end if if comment = "" then comment = "未入力" end if if desiredjobtype = "" then desiredjobtype = "未入力" <!-- ERRORカウンタの初期化 errnum = "" ' ### ' ### sqlインジェクション対策 ### ' ###] if errnum <> "" Then Response.Redirect "http://localhost/tesut/chkerr.asp?errnum="+ errnum End If <!-- パラメータ LIST = Array(username,uruby,dayofbirth,email1,email2,gender,postnumber,address,tel1,tel2,school,faculty,department,survey,comment,desiredjobtype) <!-- 検出項目(SQLコマンドで使用される特殊記号の検出) CHECK_1 = Array("<",">","&","'","+","-","*","/","%",";","--","(",")","\","""",",") <!-- ハンドリング要素 ERROR = Array("A","B","C","D") For j = 0 to UBound(LIST) tmpData = UCase(LIST(j)) For i = 0 to UBound(CHECK_1) If Instr(tmpData,CHECK_1(i)) > 0 Then errnum = errnum + ERROR(j) Exit For End If Next Next if errnum <> "" Then Response.Redirect "http://localhost/tesut/chkerr.asp?errnum="+ errnum End If <!-- POSTで遅れないのでセションに保存 Session.Contents("username") = username Session.Contents("uruby") = uruby Session.Contents("dayofbirth") = dayofbirth Session.Contents("email1") = email1 Session.Contents("email2") = email2 Session.Contents("gender") = gender Session.Contents("postnumber") = postnumber Session.Contents("address") = address Session.Contents("tel1") = tel1 Session.Contents("tel2") = tel2 Session.Contents("school") = school Session.Contents("faculty") = faculty Session.Contents("department") = deaprtment Session.Contents("survey") = survey Session.Contents("comment") = comment Session.Contents("desiredjobtype") = deairedjobtype Response.Redirect "http://localhost/tesut/check.asp" <!-- xssの記号検出処理 Function XssChk(Str) err = 0 If Instr(Str,"<") > 0 Then err = err + 1 End If If Instr(Str,">") > 0 Then err = err + 1 End If If Instr(Str,"&") > 0 Then err = err + 1 End If If Instr(Str,"'") > 0 Then err = err + 1 End If If Instr(Str,"""") > 0 Then err = err + 1 End If XssChk = err End Function %>

専門家に質問してみよう