質問

どうすればウェブサイトを多言語(例:英語、フランス語、スペイン語)に対応できるように変換できますか?

リソースファイルが気に入らないのは、制限があり、リストを作成するのにかなり時間がかかるからです。提案はありますか?

更新

現時点では、XMLファイルを使用し、Xpathを使用して値を取得するのが最良の方法です。

役に立ちましたか?

解決

暗黙的なローカライズ(Visual Studio-[ツール]メニュー-[ローカルリソースの生成])は、可能な限り簡単です。デフォルトの言語でページを記述し、メニューオプションを選択すると、リソースファイルが作成され、翻訳のために送信できます。

resxファイルは単なるxmlであるため、翻訳会社が希望する場合は、スプレッドシートに簡単に変換できます。

バッキングストアとしてresxの代わりにデータベースを使用することは難しくありません。 Rick Strahlには、データベース駆動型のローカリゼーションプロバイダーの優れた説明とコード例がありますこちら-Google翻訳とBabelfishへのインターフェースを備えたすてきな組み込みローカリゼーションエディタもあります。

他のヒント

多言語サイトのリソースをデータベースに保存します。これらを簡単に作成してアクセスできるようにするためのツールをいくつか作成しました。この構文を使用できるカスタムExpressionBuilderがあります。

 <asp:linkbutton runat='server' text='<%$ LanguageStrings:ClickMe%>' />

デフォルトのテキストを含むカスタムラベル。行がまだない場合はデータベースに行を追加します。

 <r:languagelabel runat="server" name="AboutUs">About Us</r:languagelabel>

文字列を含むテーブルには、言語ごとに1つの列があります。これにより、英語(またはデフォルトの言語)でサイトを簡単に作成し、翻訳者にテーブル(それ自体を入力する)を渡すことができます。また、翻訳対象の言語が必要な言語を確認するのも非常に簡単です。リソースを使用すると、新しい文字列を追加する必要があるたびに、作業を停止し、各言語のリソースファイルに移動してリソースを追加する必要があります。

言語ラベルのコードは次のとおりです。

''' <summary>
''' Retrieves a language-specific string.
''' </summary>
Public Class LanguageLabel
    Inherits Label

    Private _Name As String
    Public Property Name() As String
        Get
            Return _Name
        End Get
        Set(ByVal value As String)
            _Name = value
        End Set
    End Property

    Private Sub Populate()
        If Len(Me.Name) > 0 Then
            Dim LanguageString As String = GetLanguageString(Me.Name, Me.Text)
            If Len(LanguageString) > 0 Then Me.Text = LanguageString
        End If
    End Sub

    Private Sub LanguageLabel_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
        Populate()
    End Sub

    Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
        ' By default a label wraps the text in a <span>, which we don't want in some situations
        writer.Write(Me.Text)
    End Sub

End Class

およびユーティリティ関数:

    Public Function GetLanguageString(ByVal Name As String, Optional ByVal DefaultText As String = "") As String
        Dim DefaultLanguage As Language = Languages.GetById(1)
        Name = StripPunctuation(Name).Trim.Replace(" ", "") ' Remove punctuation, spaces from name
        Dim SelectSql As String = String.Format("Select {0},{1} from LanguageStrings where Name=@Name", Languages.CurrentLanguage.Code, DefaultLanguage.Code)
        Dim LanguageStringTable As DataTable = ExecuteDataset(cs, CommandType.Text, SelectSql, New SqlParameter("@Name", Name)).Tables(0)
        If LanguageStringTable IsNot Nothing AndAlso LanguageStringTable.Rows.Count > 0 Then
            Dim LanguageText As String = LanguageStringTable.Rows(0)(Languages.CurrentLanguage.Code).ToString
            Dim DefaultLanguageText As String = LanguageStringTable.Rows(0)(DefaultLanguage.Code).ToString
            If Len(LanguageText) > 0 Then
                ' We have a string in this language
                Return LanguageText
            Else
                ' Nothing in this language - return default language value
                Return DefaultLanguageText
            End If
        Else
            ' No record with this name - create a dummy one
            If DefaultText = "" Then DefaultText = Name
            Dim InsertSql As String = String.Format("Insert into LanguageStrings (Name, {0}) values (@Name, @Text)", DefaultLanguage.Code)
            ExecuteNonQuery(cs, CommandType.Text, InsertSql, New SqlParameter("@Name", Name), New SqlParameter("@Text", DefaultText))
            Return Name
        End If
    End Function

リソースファイルを使用する方法です。製品は12言語で出荷されます。すべての文字列をリソースファイルに取り出し、翻訳会社に発送します。それは時々苦痛ですが、それはそれを行うための事実上の方法です。

4文字の英語の単語が17文字のフレーズに翻訳され、UIを微調整する必要がある場合も楽しいです。

設計プロセスのどのくらい遅れていますか?遅すぎず、予算が許せば、 Ektron CMS300.net のような多言語CMSへの移植を検討してください。 (これには組み込みの翻訳ツールがあります)。そうでない場合は、前に大きなタスクがあります。

私が使用している別の解決策は、特定の言語で必要なすべてのテキストを含むaspxページを含む言語フォルダを作成することです。

ここでの唯一の問題は、複製するページにできるだけ少ないコードをどのように挿入できるかです。ここではコントローラーパターンを使用してこれを行い、次にオブジェクトデータソースを使用してデータを取得し、すべてのページのコントロールにバインドしています。

このようにして、リソースファイルを削除するという目標を達成し、必要な場合を除き、コードを複製せずに1か所に保持できます。

編集:良いCMSフレームワークもお勧めします。

私が開発するWebアプリの1つにもこのNLS要件があります。

ローカライズされたテキストがある場所が少なくとも3つあることがわかりました:

  • ユーザーインターフェイス
  • データベーステーブル(&quot;カタログ&quot;またはそれらを呼び出すもの)
  • バックエンドコード(サービスなど)

私のソリューションには、ページ、テーブルなど(&quot; Container&quot;)の1つのテーブル、そのコンテナー内の各アイテム(ラベル、IDによるボタン、レコード識別子など)の1つのテーブル、および翻訳されたアイテムの1つのテーブル(プラス言語識別子)。

翻訳アプリケーションは、翻訳を最新に保ち、すべての翻訳をXMLでエクスポートするのに役立ちます。

製品には翻訳が付属していますが、顧客は翻訳を調整でき、変更はすぐに反映されます。

リソースファイルを使用して行ったサンプルコード global.asaxを追加

 void Application_BeginRequest(Object sender, EventArgs e)
    {
        // Code that runs on application startup
        HttpCookie cookie = HttpContext.Current.Request.Cookies["CultureInfo"];
        if (cookie != null &amp;&amp; cookie.Value != null)
        {
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(cookie.Value);
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cookie.Value);
        }
        else
        {
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en");
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en");
        }
    }

http://satindersinght.blogspot.in/2012/ 06 / create-website-for-multilanguage.html

http://satindersinght.wordpress.com / 2012/06/14 / create-website-for-multilanguage-support /

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top