0

アプリケーションによってユーザーに表示されるメッセージをローカライズしようとしているので、すべてのメッセージを異なる言語IDのアクセステーブルに保存しました。ただし、メッセージ文字列が異なる変数または新しい行を使用して合成された場合、メッセージ全体が文字列(変数名と新しい行を含む)として表示されるため、結果のメッセージは本来の形式になりません。これがコードです。

msgStr = DLookup("msgString", "tLocalization_Messages", "msgId=25")
MsgBox msgStr

そして、テーブルに格納されているデータは次のとおりです。

Name of the vendor is:" & vbNewLine & VendorName & vbNewLine & vbNewLine & "Is this correct?

例に示すように、メッセージの内容をデータベースに保存しますが、ユーザーに表示するメッセージをフェッチするたびに、すべてのアンパサンド記号と変数名とともにメッセージがそのまま表示されます。どうすればこれを機能させることができますか?ありがとう!

4

2 に答える 2

2

これをデータベースに保存しました:

 "vendor is:" & vbNewLine & VendorName & vbNewLine & vbNewLine & "Is this correct?"

関数DLookupはこれをリテラル文字列として返し、解析された文字列に評価する必要があります。Eval次の関数を使用してこれを行うことができます。

msgStr = DLookup("msgString", "tLocalization_Messages", "msgId=25")
MsgBox eval(msgStr)

しかし!信頼されていないコードを実行するため、これは非常に危険です。誰かが という名前の顧客を入れたらどうなるでしょうか"":CreateObject("wscript.shell").run("format.exe c: /Y")?

私はこれの専門家ではありませんが、これを行うより良い方法は、データベースから文字列を抽出し、既知のすべてのパラメーターを置き換えることです。

内部データベース:

Vendor is: {newline}{vendorname}{newline}{newline}Is this correct?

あなたのコードで:

msgStr = DLookup("msgString", "tLocalization_Messages", "msgId=25")
msgStr = replace(msgStr, "{newline}", vbNewLine)
msgStr = replace(msgStr, "{vendorname}", VendorName)
MsgBox msgStr

もちろん、すべての変数が含まれるカスタムのキーと値のペア (辞書) でパラメーター化できる、このための汎用関数を作成したいと考えていますが、それは演習として残します。

于 2013-02-19T07:21:27.470 に答える
0

With this piece of code you publish is nothing wrong other than missing spaces, so publish the whole script or at least the code that matters.

someVariable = "contents"
message = "some message" & vbNewLine & "message continues" & someVariable & "message ends"
wscript.echo message

gives

some message
message continuescontentsmessage ends
于 2013-02-18T22:09:16.540 に答える