1
0
Fork 0
mirror of https://github.com/gsantner/dandelion synced 2024-11-24 21:32:07 +01:00

Reworked About-section of the app

This commit is contained in:
vanitasvitae 2016-10-30 16:21:45 +01:00
parent d8a3e029b1
commit d4ce2f5f62
Signed by: vanitasvitae
GPG key ID: DCCFB3302C9E4615
8 changed files with 223 additions and 125 deletions

View file

@ -53,6 +53,8 @@ dependencies {
compile 'com.android.support:design:24.1.0' //Don't update. Broken up to 24.2.1
compile 'com.android.support:support-v4:24.2.1'
compile "com.android.support:customtabs:24.2.1"
compile 'com.android.support:cardview-v7:24.2.1'
// More libraries
compile 'com.jakewharton:butterknife:8.0.1'

View file

@ -21,8 +21,10 @@ package com.github.dfa.diaspora_android.activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.design.widget.AppBarLayout;
@ -37,6 +39,7 @@ import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
@ -142,15 +145,30 @@ public class AboutActivity extends ThemedActivity
/**
* Fragment that shows general information about the app
*/
public static class AboutFragment extends ThemedFragment {
public static class AboutFragment extends ThemedFragment implements View.OnClickListener {
public static final String TAG = "com.github.dfa.diaspora_android.AboutActivity.AboutFragment";
@BindView(R.id.fragment_about__about_text)
TextView aboutText;
@BindView(R.id.fragment_about__markdown_button)
protected Button btnMarkdown;
@BindView(R.id.fragment_about__translate_button)
protected Button btnTranslate;
@BindView(R.id.fragment_about__issue_tracker_button)
protected Button btnIssueTracker;
@BindView(R.id.fragment_about__source_code_button)
protected Button btnSourceCode;
@BindView(R.id.fragment_about__spread_the_word_button)
protected Button btnSpreadTheWord;
@BindView(R.id.fragment_about__app_version)
TextView appVersion;
protected TextView txtAppVersion;
@BindView(R.id.fragment_about__app_codename)
protected TextView txtAppCodename;
public AboutFragment() {
}
@ -163,18 +181,24 @@ public class AboutActivity extends ThemedActivity
if (isAdded()) {
try {
PackageInfo pInfo = getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), 0);
appVersion.setText(getString(R.string.fragment_debug__app_version, pInfo.versionName + " (" + pInfo.versionCode + ")"));
txtAppVersion.setText(getString(R.string.fragment_debug__app_version, pInfo.versionName + " (" + pInfo.versionCode + ")"));
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
txtAppCodename.setText(getString(R.string.fragment_debug__app_codename, "Alter Falter"));
btnIssueTracker.setOnClickListener(this);
btnMarkdown.setOnClickListener(this);
btnSourceCode.setOnClickListener(this);
btnSpreadTheWord.setOnClickListener(this);
btnTranslate.setOnClickListener(this);
return rootView;
}
@Override
protected void applyColorToViews() {
ThemeHelper.updateTextViewLinkColor(aboutText);
}
@Override
@ -191,6 +215,42 @@ public class AboutActivity extends ThemedActivity
public boolean onBackPressed() {
return false;
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.fragment_about__markdown_button: {
openLink(getString(R.string.fragment_about__about_markdown_link));
break;
}
case R.id.fragment_about__translate_button: {
openLink(getString(R.string.fragment_about__translations_link));
break;
}
case R.id.fragment_about__issue_tracker_button: {
openLink(getString(R.string.fragment_about__github_issue_link));
break;
}
case R.id.fragment_about__source_code_button: {
openLink(getString(R.string.fragment_about__github_repo_link));
break;
}
case R.id.fragment_about__spread_the_word_button: {
Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, getString(R.string.app_name));
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, getString(R.string.fragment_about__share_app_text, getString(R.string.fragment_about__fdroid_link)));
startActivity(Intent.createChooser(sharingIntent, getResources().getString(R.string.action_share_dotdotdot)));
break;
}
}
}
public void openLink(String address) {
Intent openBrowserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(address));
openBrowserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(openBrowserIntent);
}
}
/**
@ -216,6 +276,7 @@ public class AboutActivity extends ThemedActivity
View rootView = inflater.inflate(R.layout.about__fragment_license, container, false);
ButterKnife.bind(this, rootView);
final Context context = rootView.getContext();
ThemeHelper.getInstance(getAppSettings());
accentColor = Helpers.colorToHex(ThemeHelper.getAccentColor());
textLicenseBox.setTextFormatted(getString(R.string.fragment_license__license_content,
@ -231,9 +292,8 @@ public class AboutActivity extends ThemedActivity
}
public String getContributorsHtml(Context context) {
String text = Helpers.readTextfileFromRawRessource(context, R.raw.contributors,
return Helpers.readTextfileFromRawRessource(context, R.raw.contributors,
"<font color='" + accentColor + "'><b>*</b></font> ", "<br>");
return text;
}
public String getMaintainersHtml(Context context) {
@ -245,9 +305,8 @@ public class AboutActivity extends ThemedActivity
}
public String getLicenseHtml(Context context) {
String text = Helpers.readTextfileFromRawRessource(context, R.raw.license,
return Helpers.readTextfileFromRawRessource(context, R.raw.license,
"", "").replace("\n\n", "<br><br>");
return text;
}
public String getLicense3dPartyHtml(Context context) {
@ -371,7 +430,7 @@ public class AboutActivity extends ThemedActivity
*/
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}

View file

@ -1,10 +1,11 @@
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_marginRight="@dimen/activity_horizontal_margin"
tools:context="com.github.dfa.diaspora_android.activity.AboutActivity$AboutFragment">
<LinearLayout
@ -12,34 +13,139 @@
android:layout_height="match_parent"
android:orientation="vertical">
<!--Vertical padding-->
<android.support.v4.widget.Space
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="@dimen/activity_vertical_margin" />
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="8dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
card_view:cardElevation="5dp"
card_view:cardCornerRadius="5dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_margin="@dimen/activity_horizontal_margin_half">
<TextView
android:id="@+id/fragment_about__app_name"
style="@android:style/TextAppearance.DeviceDefault.Large"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/diaspora_for_android"
android:textAlignment="center" />
android:text="@string/diaspora_for_android"/>
<TextView
android:id="@+id/fragment_about__app_version"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android:layout_height="wrap_content"
android:text="@string/fragment_debug__app_version"/>
<android.support.v4.widget.Space
android:layout_width="match_parent"
android:layout_height="16dp" />
<com.github.dfa.diaspora_android.ui.HtmlTextView
android:id="@+id/fragment_about__about_text"
style="@android:style/TextAppearance.DeviceDefault.Small"
<TextView
android:id="@+id/fragment_about__app_codename"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:linksClickable="true"
android:text="@string/fragment_about__about_content" />
android:text="@string/fragment_debug__app_codename"
android:layout_marginBottom="16dp"/>
<TextView
android:id="@+id/fragment_about__about_text"
android:textAppearance="@style/TextAppearance.AppCompat"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/fragment_about__about_the_app"
android:layout_marginBottom="16dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/fragment_about__about_markdown"
android:textAppearance="@style/TextAppearance.AppCompat" />
<Button
android:id="@+id/fragment_about__markdown_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_margin="5dp"
android:text="@string/fragment_about__learn_more"/>
</LinearLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
card_view:cardElevation="5dp"
card_view:cardCornerRadius="5dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_margin="@dimen/activity_horizontal_margin_half">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/TextAppearance.DeviceDefault.Large"
android:text="@string/fragment_about__contribute"
android:layout_marginBottom="8dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat"
android:text="@string/fragment_about__about_development"/>
<Button
android:id="@+id/fragment_about__source_code_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/fragment_about__about_source_at_github"
android:layout_marginBottom="8dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat"
android:text="@string/fragment_about__about_issues"/>
<Button
android:id="@+id/fragment_about__issue_tracker_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/fragment_about__issue_tracker"
android:layout_marginBottom="8dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat"
android:text="@string/fragment_about__missing_translations"/>
<Button
android:id="@+id/fragment_about__translate_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/fragment_about__translations"
android:layout_marginBottom="8dp"/>
<com.github.dfa.diaspora_android.ui.HtmlTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat"
android:text="@string/fragment_about__tell_your_friends"
android:linksClickable="true"/>
<Button
android:id="@+id/fragment_about__spread_the_word_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/fragment_about__spread_the_word"/>
</LinearLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>

View file

@ -17,22 +17,4 @@
<string name="fragment_debug__pod_domain">Pod-Adresse: %1$s</string>
<string name="fragment_debug__toast_log_copied">Debug-Protokoll in Zwischenablage kopiert</string>
<string name="fragment_license__3rd_party_libs_title">Verwendete Drittanbieter-Bibliotheken</string>
<!-- About (large amount of text) -->
<string name="fragment_about__about_content">
DiasporaForAndroid ist dein Begleiter auf deinen Streifzügen durch das soziale Netzwerk Diaspora. Er bietet dir zusätzliche Features wie nützliche Toolbars und Unterstützung für Proxyserver wie etwa das Tornetzwerk. &lt;br>&lt;br>
Diaspora benutzt Markdown-Formatierung für deine Beiträge. Weitere Informationen dazu findest du auf&lt;br>
https://wiki.diasporafoundation.org/Markdown_reference_guide &lt;br> &lt;br>
DiasporaForAndroid wird frei wie in Freiheit entwickelt und folgt den Ideen des Diaspora Projektes. &lt;br>
Den Quellcode findest du auf Github: &lt;br>
https://github.com/Diaspora-for-Android/diaspora-android &lt;br> &lt;br>
Wenn du auf Probleme stößt oder Vorschläge hast, nutze den Bugtracker (siehe Link oben).
Alternativ kannst du deine Frage auch mit dem Hashtag #DFAQ auf Diaspora posten.&lt;br> &lt;br>
Die App ist nicht in deiner Sprache verfügbar? Hilf mit und übersetze die App auf Crowdin.com!&lt;br>
https://crowdin.com/project/diaspora-for-android &lt;br> &lt;br>
Wenn du Lust hast erzähle doch deinen Freunden von #DiasporaForAndroid!</string>
<!-- Lorem ipsum -->
</resources>

View file

@ -17,22 +17,4 @@
<string name="fragment_debug__pod_domain">Adresse du pod : %1$s</string>
<string name="fragment_debug__toast_log_copied">Journal de débogage copié dans le presse-papiers</string>
<string name="fragment_license__3rd_party_libs_title">Bibliothèques tierces utilisées</string>
<!-- About (large amount of text) -->
<string name="fragment_about__about_content">
DiasporaForAndroid est votre app compagnon pour naviguer sur le réseau social Diaspora*. Il ajoute des fonctionnalités supplémentaires comme des barres doutils utiles et la prise en charge pour les serveurs proxy comme le réseau Tor à votre expérience sociale. &lt;br&gt;&lt;br&gt;
Diaspora* utilise Markdown pour mettre en forme les messages. Vous pouvez trouver plus dinformations sur&lt;br&gt;
https://wiki.diasporafoundation.org/Markdown_reference_guide &lt;br&gt; &lt;br&gt;
DiasporaForAndroid est un logiciel libre et suit les idées du projet Diaspora*. &lt;br&gt;
Vous pouvez trouver le code source sur Github : &lt;br&gt;
https://github.com/Diaspora-for-Android/diaspora-android &lt;br&gt; &lt;br&gt;
Si vous rencontrez des problèmes ou si vous avez des suggestions, vous pouvez utiliser notre bug tracker avec le lien ci-dessus.
Alternativement, vous pouvez poster votre question avec le hashtag #DFAQ sur Diaspora*. &lt;br&gt; &lt;br&gt;
Cette application nest pas disponible dans votre langue ? Découvrez notre projet sur Crowdin et aidez à la traduire ! !&lt;br&gt;
https://crowdin.com/project/diaspora-for-android &lt;br&gt; &lt;br&gt;
Aussi, nhésitez pas à parler à vos amis de #DiasporaForAndroid !</string>
<!-- Lorem ipsum -->
</resources>

View file

@ -17,22 +17,4 @@
<string name="fragment_debug__pod_domain">Dominio pod: %1$s</string>
<string name="fragment_debug__toast_log_copied">Log di debug copiato negli appunti</string>
<string name="fragment_license__3rd_party_libs_title">Librerie di terze parti usate</string>
<!-- About (large amount of text) -->
<string name="fragment_about__about_content">
DiasporaForAndroid è la tua app per navigare sul social network Diaspora. Aggiunge funzioni, come un\'utile barra di navigazione e il supporto ai server proxy come la rete Tor, alla tua esperienza social. &lt;br&gt;&lt;br&gt;
Diaspora usa la sintassi Markdown per formattare i post. Puoi trovare maggiori informazioni su&lt;br&gt;
https://wiki.diasporafoundation.org/Markdown_reference_guide/it &lt;br&gt; &lt;br&gt;
DiasporaForAndroid è sviluppato liberamente e segue le idee del progetto Diaspora. &lt;br&gt;
Puoi trovare il codice sorgente su Github: &lt;br&gt;
https://github.com/Diaspora-for-Android/diaspora-android &lt;br&gt; &lt;br&gt;
Se trovi qualsiasi problema o hai dei suggerimenti puoi usare il nostro bug tracker al link sopraccitato.
Alternativamente puoi postare la tua domanda con l\'hashtag #DFAQ su Diaspora. &lt;br&gt; &lt;br&gt;
Quest\'app non è tradotta nella tua lingua? Visita il nostro progetto su Crowdin e aiuta la traduzione!&lt;br&gt;
https://crowdin.com/project/diaspora-for-android &lt;br&gt; &lt;br&gt;
Sentiti poi libero di parlare ai tuoi amici di #DiasporaForAndroid!</string>
<!-- Lorem ipsum -->
</resources>

View file

@ -17,22 +17,4 @@
<string name="fragment_debug__pod_domain">ポッドドメイン: %1$s</string>
<string name="fragment_debug__toast_log_copied">デバッグログをクリップボードにコピーしました</string>
<string name="fragment_license__3rd_party_libs_title">使用したサードパーティ ライブラリー</string>
<!-- About (large amount of text) -->
<string name="fragment_about__about_content">
DiasporaForAndroid は、ダイアスポラ ソーシャル ネットワークを閲覧するためのコンパニオン アプリです。ソーシャル体験に便利なツールバーや Tor のようなプロキシ サーバーのサポートのような追加機能があります。&lt;br&gt;&lt;br&gt;
ダイアスポラは、投稿の書式にマークダウンを使用します。詳細は&lt;br&gt;
https://wiki.diasporafoundation.org/Markdown_reference_guide &lt;br&gt; &lt;br&gt;
DiasporaForAndroid は自由に無料で開発され、ダイアスポラ プロジェクトの考えをフォローしています。&lt;br&gt;
Github でソースコードを見つけることができます: &lt;br&gt;
https://github.com/Diaspora-for-Android/diaspora-android &lt;br&gt; &lt;br&gt;
何か問題に直面したり、提案がある場合は、上記のリンクで私たちのバグトラッカーを使用できます。
またダイアスポラにハッシュタグ #DFAQ で質問を投稿することもできます。&lt;br&gt; &lt;br&gt;
このアプリがあなたの言語で利用可能できませんか? Crowdin.com で私たちのプロジェクトを確認して、翻訳を手伝ってください!&lt;br&gt;
https://crowdin.com/project/diaspora-for-android &lt;br&gt; &lt;br&gt;
また気軽に #DiasporaForAndroid について友達に教えてください!</string>
<!-- Lorem ipsum -->
</resources>

View file

@ -19,29 +19,32 @@
<string name="fragment_debug__package_name">Package Name: %1$s</string>
<string name="fragment_debug__android_version">Android Version: %1$s</string>
<string name="fragment_debug__device_name">Device Name: %1$s</string>
<string name="fragment_debug__app_codename">Codename: %1$s</string>
<string name="fragment_debug__pod_domain">Pod Domain: %1$s</string>
<string name="fragment_debug__toast_log_copied">Debug log copied to clipboard</string>
<string name="fragment_license__3rd_party_libs_title">Used 3rd Party Libraries</string>
<!-- About (large amount of text) -->
<string name="fragment_about__about_content">
DiasporaForAndroid is your companion app for browsing the Diaspora social network. It adds features like useful toolbars and support for proxy servers like the Tor Network to your social experience. &lt;br>&lt;br>
Diaspora uses Markdown to format posts. You can find more information at&lt;br>
https://wiki.diasporafoundation.org/Markdown_reference_guide &lt;br> &lt;br>
DiasporaForAndroid is developed free as in freedom and follows the ideas of the Diaspora project. &lt;br>
You can find the source code on Github: &lt;br>
https://github.com/Diaspora-for-Android/diaspora-android &lt;br> &lt;br>
If you face any problems or if you have suggestions, you can use our bug tracker at the link above.
Alternatively you can post your question with the hashtag #DFAQ on Diaspora. &lt;br> &lt;br>
This app is not available in your language? Check out our project on Crowdin.com and help to translate it!&lt;br>
https://crowdin.com/project/diaspora-for-android &lt;br> &lt;br>
Also feel free to tell your friends about #DiasporaForAndroid!</string>
<string name="fragment_about__about_the_app">
DiasporaForAndroid is your companion app for browsing the Diaspora social network. It adds features like useful toolbars and support for proxy servers like the Tor Network to your social experience.</string>
<string name="fragment_about__about_markdown">Diaspora uses Markdown to format posts.</string>
<string name="fragment_about__learn_more">Learn more!</string>
<string name="fragment_about__about_markdown_link" translatable="false">https://wiki.diasporafoundation.org/Markdown_reference_guide></string>
<string name="fragment_about__contribute">Contribute</string>
<string name="fragment_about__about_development">DiasporaForAndroid is developed free as in freedom and follows the ideas of the Diaspora project. If you want to contribute, go ahead! We greatly appreciate any kind of help!</string>
<string name="fragment_about__about_source_at_github">Get the source code!</string>
<string name="fragment_about__github_repo_link" translatable="false">https://github.com/Diaspora-for-Android/diaspora-android</string>
<string name="fragment_about__about_issues">DiasporaForAndroid is still in development, so if you have suggestions or any kind of feedback, please let us know! (You can use our bug tracker)</string>
<string name="fragment_about__issue_tracker">To the bug tracker!</string>
<string name="fragment_about__github_issue_link">https://github.com/Diaspora-for-Android/diaspora-android/issues</string>
<string name="fragment_about__missing_translations">This app is not available in your language? Why don\'t you help us by translating it?</string>
<string name="fragment_about__translations">Let me translate!</string>
<string name="fragment_about__translations_link" translatable="false">https://crowdin.com/project/diaspora-for-android/invite</string>
<string name="fragment_about__tell_your_friends">Also feel free to tell your friends about #DiasporaForAndroid!</string>
<string name="fragment_about__spread_the_word">Spread the word!</string>
<string name="fragment_about__share_app_text">Hey! Check out #DiasporaForAndroid! %1$s</string>
<string name="fragment_about__fdroid_link" translatable="false">https://f-droid.org/app/com.github.dfa.diaspora_android</string>
<!-- Lorem ipsum -->
<string name="lorem_ipsum" translatable="false">Auch gibt es niemanden, der den Schmerz an sich liebt, sucht oder wünscht, nur, weil er Schmerz ist, es sei denn, es kommt zu zufälligen Umständen, in denen Mühen und Schmerz ihm große Freude bereiten können. Um ein triviales Beispiel zu nehmen, wer von uns unterzieht sich je anstrengender körperlicher Betätigung, außer um Vorteile daraus zu ziehen? Aber wer hat irgend ein Recht, einen Menschen zu tadeln, der die Entscheidung trifft, eine Freude zu genießen, die keine unangenehmen Folgen hat, oder einen, der Schmerz vermeidet, welcher keine daraus resultierende Freude nach sich zieht? Auch gibt es niemanden, der den Schmerz an sich liebt, sucht oder wünscht, nur, weil er Schmerz ist, es sei denn, es kommt zu zufälligen Umständen, in denen Mühen und Schmerz ihm große Freude bereiten können. Um ein triviales Beispiel zu nehmen, wer von uns unterzieht sich je anstrengender körperlicher Betätigung, außer um Vorteile daraus zu ziehen? Aber wer hat irgend ein Recht, einen Menschen zu tadeln, der die Entscheidung trifft, eine Freude zu genießen, die keine unangenehmen Folgen hat, oder einen, der Schmerz vermeidet, welcher keine daraus resultierende Freude nach sich zieht?</string>
</resources>