C# ASP.NET Web Page Resources mit zusätzlichem Text

Murphy9904

Lt. Junior Grade
Registriert
Mai 2007
Beiträge
344
Hi,
Ich lasse meine Website in verschiedenen Sprachen anzeigen. das ganze lese ich anhand eines Resource Key aus.
Code:
<asp:Label ID="Label1" runat="server" Text="<%$ Resources:TXT_Bla %>"></asp:Label>

funktioniert auch soweit ganz gut. das Teil liest das aus der Datenbank aus und zeigt dann "BlaAusDatenbank" an.

sooo. jetzt will ich aber dass auf meine Website Noch mehr statt nur dem "BlaAusDatenbank" steht also dass ich noch paar Zeichen anhängen kann.

dacht sowas in der Art würd gehn
<asp:Label ID="Label1" runat="server" Text="<%$ Resources:TXT_Bla %> und nochwas"></asp:Label>

auf der website von denen steht auch nich grad viel.


http://msdn.microsoft.com/en-us/library/ms227427.aspx


weis irgendwer wie ich das lösen kann?

LG
Murphy
 
Hallo, Du hast das im Markup-Code gemacht. Spricht etwas dagegen, das im Code-Behind zu machen und dann mit einer String-Konkatenation zu arbeiten? Die StringBuilder-Klasse würde sich dafür anbieten.
 
Ja es ist einfach leichter zu warten und so..
es muss doch ne einfache möglichkeit geben da einfach noch nen Text anzuhängen oder nciht?
 
Hm. Ich nehme mal an, daß der Laufzeit-Compiler Deine oben stehende Lösung nicht mag. Was hälst Du von folgender Idee?

1. Füge hinter das erste Label ein zweites ein.
2. Das zweite Label erhält Deinen Wunschtext.
3. Wenn Du den Text, welcher jetzt auf 2 Label verteilt ist, als Gruppe ansprechen möchtest könntest Du das in einem DIV oder SPAN zusammenfassen.

<div id="myGroup" runat="server">
<asp:Label ID="Label1" runat="server" Text="<%$ Resources:TXT_Bla %>" />
<asp:Label ID="Label2" runat="server" Text="und nochwas" />
</div>

Der Ausgabe im Webbrowser sollte das egal sein, wie das in Deinem Projekt gelöst wurde.
 
Zuletzt bearbeitet:
Das geht auch schlecht. wenn der Text in nem Button steht oder nem Tooltip und so
Ergänzung ()

Hab mir jetzt einfach ne expression selbst gebastelt und jetzt gehts ganz cool ;)
 
Hallo, könntest Du die Lösung bitte hier posten? Würde mich interessieren. Danke ...
 
Klar
benutzt kann das dann so werden:
//Beispiel: "'{0} noch irgendwas {1}',TXT_Bla,TXT_Bla"
Code:
public class LocalizationExpressionBuilder : ExpressionBuilder
    {

        public override System.CodeDom.CodeExpression GetCodeExpression(System.Web.UI.BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
        {
            CodeTypeReferenceExpression thisType = new CodeTypeReferenceExpression(base.GetType());
            CodePrimitiveExpression expression = new CodePrimitiveExpression(entry.Expression.Trim().ToString());

            string evaluationMethod = "GetLocalization";

            return new CodeMethodInvokeExpression(thisType, evaluationMethod, new CodeExpression[] { expression });
        }

        public static string GetLocalization(string expression)
        {
            string returnValue = String.Empty;
            //Beispiel: "'{0} noch irgendwas {1}',TXT_Bla,TXT_Bla"
            string[] splittedValues = expression.Split(new char[] { ',' },StringSplitOptions.RemoveEmptyEntries);
            if (splittedValues.Length == 1)
            {
                //simple expression, just return the localization
                returnValue = GetResource(splittedValues[0]);
            }
            else
            { 
                //formatted expression
                string[] paramValues = splittedValues.Skip(1).ToArray();
                for (int i = 0; i < paramValues.Length;i++ )
                {
                    paramValues[i] = GetResource(paramValues[i]);
                }                

                string formatString = splittedValues[0].Replace("'","");
                returnValue = String.Format(formatString, paramValues);
            }
            return returnValue;
        }

        public static string GetResource(string resourceKey)
        {
            return (string)System.Web.HttpContext.GetGlobalResourceObject(null, resourceKey);
        }
    }
 
Zurück
Oben