diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 8900c416a..d9f57bbbb 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -9,7 +9,7 @@ GnuCash Android is built by people like you! Please [join us](https://github.com ## Code Contributions * Contributions are submitted, reviewed, and accepted using Github pull requests. [Read this article](https://help.github.com/articles/using-pull-requests) for some details. We use the _Fork and Pull_ model, as described there. * You can maintain your stable installation of GnuCash and test with another installation. -The two instances of GnuCash Android will live side-by-side on your device and not affect each other. You can install the development version by executing `gradle installDD` inside the root project directory +The two instances of GnuCash Android will live side-by-side on your device and not affect each other. You can install the development version by executing `gradlew installDevelopmentDebug` inside the root project directory * The latest changes are in the `develop` branch. * Always rebase develop before working on a fix or issuing a pull request * The master branch contains only stable releases. @@ -23,7 +23,7 @@ The two instances of GnuCash Android will live side-by-side on your device and n * Make a new branch for every feature you're working on. * Try to make clean commits that are easily readable (including descriptive commit messages!) * Test before you push make sure all test pass on your machine. - * Unit tests can be run with `gradle test` + * Unit tests can be run with `gradle test` or (`gradlew test` on Windows) * UI tests can be run with `gradle spoonDD`. This will run the tests on all connected devices/emulators. * Make small pull requests that are easy to review but which also add value. diff --git a/.gitignore b/.gitignore index bd87d9b4f..ee987b848 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ out/ /captures gradle.properties +crowdin.properties #Crashlytics diff --git a/.travis.yml b/.travis.yml index 9dcd1ce95..94dc52c0a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,17 +5,17 @@ android: - platform-tools - tools - tools #not a typo. Needed for SDK update - - build-tools-27.0.3 + - build-tools-29.0.0 # The SDK version used to compile your project - - android-27 + - android-29 # Additional components - extra-android-support - extra-google-google_play_services - extra-google-m2repository - extra-android-m2repository - - addon-google_apis-google-26 + - addon-google_apis-google-29 # Specify at least one system image, # if you need to run emulator(s) during your tests @@ -23,7 +23,7 @@ android: # XXX: Temporary workaround. Remove once fixed before_install: - - yes | sdkmanager "platforms;android-27" + - yes | sdkmanager "platforms;android-29" # Emulator Management: Create, Start and Wait # Re-enable this when we figure out how to reliably build on Travis diff --git a/CHANGELOG.md b/CHANGELOG.md index 17a7f8258..97d30e73f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ Change Log =============================================================================== +Version 2.4.1 *(2019-11-30)* +---------------------------- +* Fixes #809: Crash when exporting CSV +* Fixes #811: Add button in schedule action disappears after rotation +* Fixes #790: Missing transaction description margin +* Fixes crash if during database upgrade triggered by scheduled action +* Improve performance of CSV export +* Improved: Add book name to accounts listing view +* Improved: Update translations + Version 2.4.0 *(2018-06-15)* ---------------------------- * Feature #665: Adds CSV export format diff --git a/app/build.gradle b/app/build.gradle index 674ca8088..b4483fbfe 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,8 +5,8 @@ apply plugin: 'io.fabric' def versionMajor = 2 def versionMinor = 4 -def versionPatch = 0 -def versionBuild = 3 +def versionPatch = 1 +def versionBuild = 4 static def buildTime() { def df = new SimpleDateFormat("yyyyMMdd HH:mm 'UTC'") @@ -20,13 +20,13 @@ static def gitSha() { android { - compileSdkVersion 27 - buildToolsVersion '27.0.3' + compileSdkVersion 29 + buildToolsVersion '29.0.0' defaultConfig { applicationId "org.gnucash.android" testApplicationId 'org.gnucash.android.test' minSdkVersion 19 - targetSdkVersion 27 + targetSdkVersion 29 versionCode versionMajor * 10000 + versionMinor * 1000 + versionPatch * 100 + versionBuild versionName "${versionMajor}.${versionMinor}.${versionPatch}" resValue "string", "app_version_name", "${versionName}" @@ -142,11 +142,12 @@ android { compileOptions { //we want switch with strings during xml parsing encoding "UTF-8" - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } testOptions { + animationsDisabled true unitTests { includeAndroidResources = true } @@ -179,7 +180,7 @@ afterEvaluate { } -def androidSupportVersion = "27.0.2" +def androidSupportVersion = "28.0.0" def androidEspressoVersion = "3.0.0" def androidSupportTestVersion = "1.0.0" @@ -223,19 +224,19 @@ dependencies { exclude module: 'httpclient' } - implementation('com.crashlytics.sdk.android:crashlytics:2.6.7@aar') { - transitive = true; + implementation('com.crashlytics.sdk.android:crashlytics:2.10.1@aar') { + transitive = true } - testImplementation 'org.robolectric:robolectric:3.5.1' + testImplementation 'org.robolectric:robolectric:4.3.1' testImplementation( 'junit:junit:4.12', 'joda-time:joda-time:2.9.4', - 'org.assertj:assertj-core:1.7.1' + 'org.assertj:assertj-core:3.14.0' ) - testImplementation 'org.robolectric:shadows-multidex:3.0' + testImplementation 'org.robolectric:shadows-multidex:4.3.1' androidTestImplementation ( 'com.android.support:support-annotations:' + androidSupportVersion, diff --git a/app/src/androidTest/java/org/gnucash/android/test/ui/AccountsActivityTest.java b/app/src/androidTest/java/org/gnucash/android/test/ui/AccountsActivityTest.java index eb7f43c13..54afddccd 100644 --- a/app/src/androidTest/java/org/gnucash/android/test/ui/AccountsActivityTest.java +++ b/app/src/androidTest/java/org/gnucash/android/test/ui/AccountsActivityTest.java @@ -17,7 +17,6 @@ package org.gnucash.android.test.ui; import android.Manifest; -import android.content.Context; import android.content.Intent; import android.content.SharedPreferences.Editor; import android.database.SQLException; @@ -32,8 +31,6 @@ import android.util.Log; import android.view.View; -import com.kobakei.ratethisapp.RateThisApp; - import org.gnucash.android.R; import org.gnucash.android.app.GnuCashApplication; import org.gnucash.android.db.DatabaseHelper; @@ -51,6 +48,7 @@ import org.gnucash.android.model.Transaction; import org.gnucash.android.receivers.AccountCreator; import org.gnucash.android.test.ui.util.DisableAnimationsRule; +import org.gnucash.android.test.ui.util.GnucashAndroidTestRunner; import org.gnucash.android.ui.account.AccountsActivity; import org.gnucash.android.ui.account.AccountsListFragment; import org.hamcrest.Description; @@ -131,7 +129,7 @@ public AccountsActivityTest() { @BeforeClass public static void prepTest(){ - preventFirstRunDialogs(GnuCashApplication.getAppContext()); + GnucashAndroidTestRunner.preventFirstRunDialogs(GnuCashApplication.getAppContext()); String activeBookUID = BooksDbAdapter.getInstance().getActiveBookUID(); mDbHelper = new DatabaseHelper(GnuCashApplication.getAppContext(), activeBookUID); @@ -163,26 +161,6 @@ public void setUp() throws Exception { } - /** - * Prevents the first-run dialogs (Whats new, Create accounts etc) from being displayed when testing - * @param context Application context - */ - public static void preventFirstRunDialogs(Context context) { - AccountsActivity.rateAppConfig = new RateThisApp.Config(10000, 10000); - Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); - - //do not show first run dialog - editor.putBoolean(context.getString(R.string.key_first_run), false); - editor.putInt(AccountsActivity.LAST_OPEN_TAB_INDEX, AccountsActivity.INDEX_TOP_LEVEL_ACCOUNTS_FRAGMENT); - - //do not show "What's new" dialog - String minorVersion = context.getString(R.string.app_minor_version); - int currentMinor = Integer.parseInt(minorVersion); - editor.putInt(context.getString(R.string.key_previous_minor_version), currentMinor); - editor.commit(); - } - - public void testDisplayAccountsList(){ AccountsActivity.createDefaultAccounts("EUR", mAccountsActivity); mAccountsActivity.recreate(); diff --git a/app/src/androidTest/java/org/gnucash/android/test/ui/CalculatorEditTextTest.java b/app/src/androidTest/java/org/gnucash/android/test/ui/CalculatorEditTextTest.java index f1932b732..6e8b807c4 100644 --- a/app/src/androidTest/java/org/gnucash/android/test/ui/CalculatorEditTextTest.java +++ b/app/src/androidTest/java/org/gnucash/android/test/ui/CalculatorEditTextTest.java @@ -36,6 +36,7 @@ import org.gnucash.android.model.Account; import org.gnucash.android.model.Commodity; import org.gnucash.android.test.ui.util.DisableAnimationsRule; +import org.gnucash.android.test.ui.util.GnucashAndroidTestRunner; import org.gnucash.android.ui.common.UxArgument; import org.gnucash.android.ui.transaction.TransactionsActivity; import org.junit.After; @@ -105,7 +106,7 @@ public static void prepTestCase(){ mTransactionsDbAdapter = TransactionsDbAdapter.getInstance(); mAccountsDbAdapter = AccountsDbAdapter.getInstance(); - AccountsActivityTest.preventFirstRunDialogs(GnuCashApplication.getAppContext()); + GnucashAndroidTestRunner.preventFirstRunDialogs(GnuCashApplication.getAppContext()); } @Before diff --git a/app/src/androidTest/java/org/gnucash/android/test/ui/ExportTransactionsTest.java b/app/src/androidTest/java/org/gnucash/android/test/ui/ExportTransactionsTest.java index 119e4f033..2e8d511b0 100644 --- a/app/src/androidTest/java/org/gnucash/android/test/ui/ExportTransactionsTest.java +++ b/app/src/androidTest/java/org/gnucash/android/test/ui/ExportTransactionsTest.java @@ -17,23 +17,13 @@ package org.gnucash.android.test.ui; import android.Manifest; -import android.app.AlertDialog; -import android.content.SharedPreferences; -import android.content.pm.PackageManager; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; -import android.net.Uri; -import android.os.Build; -import android.support.test.InstrumentationRegistry; -import android.support.test.espresso.Espresso; import android.support.test.espresso.contrib.DrawerActions; -import android.support.test.espresso.matcher.ViewMatchers; +import android.support.test.rule.ActivityTestRule; import android.support.test.rule.GrantPermissionRule; import android.support.test.runner.AndroidJUnit4; -import android.support.v7.preference.PreferenceManager; -import android.test.ActivityInstrumentationTestCase2; import android.util.Log; -import android.widget.CompoundButton; import org.gnucash.android.R; import org.gnucash.android.app.GnuCashApplication; @@ -42,52 +32,38 @@ import org.gnucash.android.db.adapter.BooksDbAdapter; import org.gnucash.android.db.adapter.CommoditiesDbAdapter; import org.gnucash.android.db.adapter.DatabaseAdapter; -import org.gnucash.android.db.adapter.ScheduledActionDbAdapter; import org.gnucash.android.db.adapter.SplitsDbAdapter; import org.gnucash.android.db.adapter.TransactionsDbAdapter; -import org.gnucash.android.export.ExportFormat; -import org.gnucash.android.export.Exporter; import org.gnucash.android.model.Account; import org.gnucash.android.model.Commodity; import org.gnucash.android.model.Money; -import org.gnucash.android.model.PeriodType; -import org.gnucash.android.model.ScheduledAction; import org.gnucash.android.model.Split; import org.gnucash.android.model.Transaction; +import org.gnucash.android.test.ui.util.GnucashAndroidTestRunner; import org.gnucash.android.ui.account.AccountsActivity; -import org.gnucash.android.ui.settings.PreferenceActivity; -import org.gnucash.android.util.BookUtils; import org.junit.After; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.FixMethodOrder; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.MethodSorters; -import java.io.File; -import java.util.List; - import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.action.ViewActions.click; import static android.support.test.espresso.action.ViewActions.swipeUp; import static android.support.test.espresso.assertion.ViewAssertions.matches; import static android.support.test.espresso.matcher.RootMatchers.withDecorView; -import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom; import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; -import static android.support.test.espresso.matcher.ViewMatchers.isEnabled; -import static android.support.test.espresso.matcher.ViewMatchers.withEffectiveVisibility; import static android.support.test.espresso.matcher.ViewMatchers.withId; import static android.support.test.espresso.matcher.ViewMatchers.withText; -import static org.assertj.core.api.Assertions.assertThat; -import static org.hamcrest.Matchers.allOf; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; @RunWith(AndroidJUnit4.class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) -public class ExportTransactionsTest extends - ActivityInstrumentationTestCase2 { +public class ExportTransactionsTest { private DatabaseHelper mDbHelper; private SQLiteDatabase mDb; @@ -99,20 +75,23 @@ public class ExportTransactionsTest extends @Rule public GrantPermissionRule animationPermissionsRule = GrantPermissionRule.grant(Manifest.permission.SET_ANIMATION_SCALE); + @Rule + public ActivityTestRule mActivityRule = new ActivityTestRule<>(AccountsActivity.class); + public ExportTransactionsTest() { - super(AccountsActivity.class); } - @Override + @BeforeClass + public static void setupClass(){ + GnucashAndroidTestRunner.preventFirstRunDialogs(GnuCashApplication.getAppContext()); + } + @Before - public void setUp() throws Exception { - super.setUp(); - injectInstrumentation(InstrumentationRegistry.getInstrumentation()); - AccountsActivityTest.preventFirstRunDialogs(getInstrumentation().getTargetContext()); - mAcccountsActivity = getActivity(); + public void setUp() { + mAcccountsActivity = mActivityRule.getActivity(); String activeBookUID = BooksDbAdapter.getInstance().getActiveBookUID(); - mDbHelper = new DatabaseHelper(getActivity(), activeBookUID); + mDbHelper = new DatabaseHelper(mAcccountsActivity.getApplicationContext(), activeBookUID); try { mDb = mDbHelper.getWritableDatabase(); } catch (SQLException e) { @@ -164,16 +143,14 @@ public void testCreateBackup(){ */ private void assertToastDisplayed(int toastString) { onView(withText(toastString)) - .inRoot(withDecorView(not(is(getActivity().getWindow().getDecorView())))) + .inRoot(withDecorView(not(is(mAcccountsActivity.getWindow().getDecorView())))) .check(matches(isDisplayed())); } //todo: add testing of export flag to unit test //todo: add test of ignore exported transactions to unit tests - @Override - @After public void tearDown() throws Exception { + @After public void tearDown(){ mDbHelper.close(); mDb.close(); - super.tearDown(); } } diff --git a/app/src/androidTest/java/org/gnucash/android/test/ui/FirstRunWizardActivityTest.java b/app/src/androidTest/java/org/gnucash/android/test/ui/FirstRunWizardActivityTest.java index 7c4ab6d39..ce335de06 100644 --- a/app/src/androidTest/java/org/gnucash/android/test/ui/FirstRunWizardActivityTest.java +++ b/app/src/androidTest/java/org/gnucash/android/test/ui/FirstRunWizardActivityTest.java @@ -18,10 +18,9 @@ import android.Manifest; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; -import android.support.test.InstrumentationRegistry; +import android.support.test.rule.ActivityTestRule; import android.support.test.rule.GrantPermissionRule; import android.support.test.runner.AndroidJUnit4; -import android.test.ActivityInstrumentationTestCase2; import android.util.Log; import org.gnucash.android.R; @@ -50,7 +49,7 @@ * @author Ngewi Fet */ @RunWith(AndroidJUnit4.class) -public class FirstRunWizardActivityTest extends ActivityInstrumentationTestCase2{ +public class FirstRunWizardActivityTest { private DatabaseHelper mDbHelper; private SQLiteDatabase mDb; @@ -62,16 +61,12 @@ public class FirstRunWizardActivityTest extends ActivityInstrumentationTestCase2 @Rule public GrantPermissionRule animationPermissionsRule = GrantPermissionRule.grant(Manifest.permission.SET_ANIMATION_SCALE); - public FirstRunWizardActivityTest() { - super(FirstRunWizardActivity.class); - } + @Rule + public ActivityTestRule mActivityRule = new ActivityTestRule<>(FirstRunWizardActivity.class); @Before - public void setUp() throws Exception { - super.setUp(); - injectInstrumentation(InstrumentationRegistry.getInstrumentation()); - - mActivity = getActivity(); + public void setUp() { + mActivity = mActivityRule.getActivity(); mDbHelper = new DatabaseHelper(mActivity, BaseModel.generateUID()); try { mDb = mDbHelper.getWritableDatabase(); diff --git a/app/src/androidTest/java/org/gnucash/android/test/ui/OwnCloudExportTest.java b/app/src/androidTest/java/org/gnucash/android/test/ui/OwnCloudExportTest.java index b3e512037..008909b11 100644 --- a/app/src/androidTest/java/org/gnucash/android/test/ui/OwnCloudExportTest.java +++ b/app/src/androidTest/java/org/gnucash/android/test/ui/OwnCloudExportTest.java @@ -28,7 +28,6 @@ import android.support.test.rule.ActivityTestRule; import android.support.test.rule.GrantPermissionRule; import android.support.test.runner.AndroidJUnit4; -import android.test.ActivityInstrumentationTestCase2; import android.util.Log; import org.gnucash.android.R; @@ -66,7 +65,7 @@ import static android.support.test.espresso.matcher.ViewMatchers.withText; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertTrue; -import static org.gnucash.android.test.ui.AccountsActivityTest.preventFirstRunDialogs; +import static org.gnucash.android.test.ui.util.GnucashAndroidTestRunner.preventFirstRunDialogs; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; @@ -84,8 +83,7 @@ public class OwnCloudExportTest { private String OC_DIR = "gc_test"; /** - * A JUnit {@link Rule @Rule} to launch your activity under test. This is a replacement - * for {@link ActivityInstrumentationTestCase2}. + * A JUnit {@link Rule @Rule} to launch your activity under test. *

* Rules are interceptors which are executed for each test method and will run before * any of your setup code in the {@link Before @Before} method. diff --git a/app/src/androidTest/java/org/gnucash/android/test/ui/TransactionsActivityTest.java b/app/src/androidTest/java/org/gnucash/android/test/ui/TransactionsActivityTest.java index 6821e4ca2..4395e7386 100644 --- a/app/src/androidTest/java/org/gnucash/android/test/ui/TransactionsActivityTest.java +++ b/app/src/androidTest/java/org/gnucash/android/test/ui/TransactionsActivityTest.java @@ -43,6 +43,7 @@ import org.gnucash.android.model.TransactionType; import org.gnucash.android.receivers.TransactionRecorder; import org.gnucash.android.test.ui.util.DisableAnimationsRule; +import org.gnucash.android.test.ui.util.GnucashAndroidTestRunner; import org.gnucash.android.ui.common.UxArgument; import org.gnucash.android.ui.settings.PreferenceActivity; import org.gnucash.android.ui.transaction.TransactionFormFragment; @@ -57,7 +58,6 @@ import java.math.BigDecimal; import java.text.NumberFormat; -import java.util.Currency; import java.util.Date; import java.util.List; import java.util.Locale; @@ -76,7 +76,6 @@ import static android.support.test.espresso.matcher.ViewMatchers.withText; import static org.assertj.core.api.Assertions.assertThat; import static org.hamcrest.Matchers.allOf; -import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; @RunWith(AndroidJUnit4.class) @@ -135,7 +134,7 @@ public TransactionsActivityTest() { @BeforeClass public static void prepareTestCase(){ Context context = GnuCashApplication.getAppContext(); - AccountsActivityTest.preventFirstRunDialogs(context); + GnucashAndroidTestRunner.preventFirstRunDialogs(context); mSplitsDbAdapter = SplitsDbAdapter.getInstance(); mTransactionsDbAdapter = TransactionsDbAdapter.getInstance(); diff --git a/app/src/androidTest/java/org/gnucash/android/test/ui/util/GnucashAndroidTestRunner.java b/app/src/androidTest/java/org/gnucash/android/test/ui/util/GnucashAndroidTestRunner.java index 40d9691bb..393e6b0c5 100644 --- a/app/src/androidTest/java/org/gnucash/android/test/ui/util/GnucashAndroidTestRunner.java +++ b/app/src/androidTest/java/org/gnucash/android/test/ui/util/GnucashAndroidTestRunner.java @@ -16,13 +16,20 @@ package org.gnucash.android.test.ui.util; +import android.content.Context; +import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.os.Bundle; import android.os.IBinder; -import android.support.multidex.MultiDex; +import android.preference.PreferenceManager; import android.support.test.runner.AndroidJUnitRunner; import android.util.Log; +import com.kobakei.ratethisapp.RateThisApp; + +import org.gnucash.android.R; +import org.gnucash.android.ui.account.AccountsActivity; + import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -35,6 +42,25 @@ public class GnucashAndroidTestRunner extends AndroidJUnitRunner{ private static final float DISABLED = 0.0f; private static final float DEFAULT = 1.0f; + /** + * Prevents the first-run dialogs (Whats new, Create accounts etc) from being displayed when testing + * @param context Application context + */ + public static void preventFirstRunDialogs(Context context) { + AccountsActivity.rateAppConfig = new RateThisApp.Config(10000, 10000); + SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); + + //do not show first run dialog + editor.putBoolean(context.getString(R.string.key_first_run), false); + editor.putInt(AccountsActivity.LAST_OPEN_TAB_INDEX, AccountsActivity.INDEX_TOP_LEVEL_ACCOUNTS_FRAGMENT); + + //do not show "What's new" dialog + String minorVersion = context.getString(R.string.app_minor_version); + int currentMinor = Integer.parseInt(minorVersion); + editor.putInt(context.getString(R.string.key_previous_minor_version), currentMinor); + editor.commit(); + } + @Override public void onCreate(Bundle args) { super.onCreate(args); diff --git a/app/src/main/java/org/gnucash/android/db/DatabaseHelper.java b/app/src/main/java/org/gnucash/android/db/DatabaseHelper.java index c079a7eb6..9d4762ef3 100644 --- a/app/src/main/java/org/gnucash/android/db/DatabaseHelper.java +++ b/app/src/main/java/org/gnucash/android/db/DatabaseHelper.java @@ -20,11 +20,9 @@ import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; -import android.widget.Toast; import com.crashlytics.android.Crashlytics; -import org.gnucash.android.app.GnuCashApplication; import org.gnucash.android.model.Commodity; import org.xml.sax.SAXException; @@ -264,7 +262,7 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ Log.i(LOG_TAG, "Upgrading database from version " + oldVersion + " to " + newVersion); - Toast.makeText(GnuCashApplication.getAppContext(), "Upgrading GnuCash database", Toast.LENGTH_SHORT).show(); + //TODO: Find way to show a progress dialog for long running db upgrades /* * NOTE: In order to modify the database, create a new static method in the MigrationHelper class * called upgradeDbToVersion<#>, e.g. int upgradeDbToVersion10(SQLiteDatabase) in order to upgrade to version 10. @@ -278,9 +276,7 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ while(oldVersion < newVersion){ try { Method method = MigrationHelper.class.getDeclaredMethod("upgradeDbToVersion" + (oldVersion+1), SQLiteDatabase.class); - Object result = method.invoke(null, db); - oldVersion = Integer.parseInt(result.toString()); - + oldVersion = (int) method.invoke(null, db); } catch (NoSuchMethodException e) { String msg = String.format("Database upgrade method upgradeToVersion%d(SQLiteDatabase) definition not found ", newVersion); Log.e(LOG_TAG, msg, e); @@ -356,7 +352,7 @@ private void createDatabaseTables(SQLiteDatabase db) { db.execSQL(createBudgetAmountUidIndex); try { - MigrationHelper.importCommodities(db); + MigrationHelper.importCommodities(db, true); } catch (SAXException | ParserConfigurationException | IOException e) { Log.e(LOG_TAG, "Error loading currencies into the database"); e.printStackTrace(); diff --git a/app/src/main/java/org/gnucash/android/db/DatabaseSchema.java b/app/src/main/java/org/gnucash/android/db/DatabaseSchema.java index f3dcbeaf8..eb689affe 100644 --- a/app/src/main/java/org/gnucash/android/db/DatabaseSchema.java +++ b/app/src/main/java/org/gnucash/android/db/DatabaseSchema.java @@ -39,7 +39,7 @@ public class DatabaseSchema { * Version number of database containing accounts and transactions info. * With any change to the database schema, this number must increase */ - public static final int DATABASE_VERSION = 15; + public static final int DATABASE_VERSION = 17; /** * Name of the database diff --git a/app/src/main/java/org/gnucash/android/db/MigrationHelper.java b/app/src/main/java/org/gnucash/android/db/MigrationHelper.java index 5acc1d74a..f56b72eb8 100644 --- a/app/src/main/java/org/gnucash/android/db/MigrationHelper.java +++ b/app/src/main/java/org/gnucash/android/db/MigrationHelper.java @@ -235,7 +235,7 @@ public void run() { /** * Imports commodities into the database from XML resource file */ - static void importCommodities(SQLiteDatabase db) throws SAXException, ParserConfigurationException, IOException { + static void importCommodities(SQLiteDatabase db, boolean deleteExisting) throws SAXException, ParserConfigurationException, IOException { SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); XMLReader xr = sp.getXMLReader(); @@ -246,7 +246,7 @@ static void importCommodities(SQLiteDatabase db) throws SAXException, ParserConf /** Create handler to handle XML Tags ( extends DefaultHandler ) */ - CommoditiesXmlHandler handler = new CommoditiesXmlHandler(db); + CommoditiesXmlHandler handler = new CommoditiesXmlHandler(db, deleteExisting); xr.setContentHandler(handler); xr.parse(new InputSource(bos)); @@ -264,7 +264,7 @@ public static int upgradeDbToVersion2(SQLiteDatabase db) { " ADD COLUMN double_account_uid varchar(255)"; //introducing sub accounts - Log.i(DatabaseHelper.LOG_TAG, "Adding column for parent accounts"); + Log.i(LOG_TAG, "Adding column for parent accounts"); String addParentAccountSql = "ALTER TABLE " + AccountEntry.TABLE_NAME + " ADD COLUMN " + AccountEntry.COLUMN_PARENT_ACCOUNT_UID + " varchar(255)"; @@ -273,7 +273,7 @@ public static int upgradeDbToVersion2(SQLiteDatabase db) { //update account types to GnuCash account types //since all were previously CHECKING, now all will be CASH - Log.i(DatabaseHelper.LOG_TAG, "Converting account types to GnuCash compatible types"); + Log.i(LOG_TAG, "Converting account types to GnuCash compatible types"); ContentValues cv = new ContentValues(); cv.put(SplitEntry.COLUMN_TYPE, AccountType.CASH.toString()); db.update(AccountEntry.TABLE_NAME, cv, null, null); @@ -495,7 +495,7 @@ static int upgradeDbToVersion7(SQLiteDatabase db) { * @return New database version (8) if upgrade successful, old version (7) if unsuccessful */ static int upgradeDbToVersion8(SQLiteDatabase db) { - Log.i(DatabaseHelper.LOG_TAG, "Upgrading database to version 8"); + Log.i(LOG_TAG, "Upgrading database to version 8"); int oldVersion = 7; new File(Exporter.LEGACY_BASE_FOLDER_PATH + "/backups/").mkdirs(); new File(Exporter.LEGACY_BASE_FOLDER_PATH + "/exports/").mkdirs(); @@ -505,7 +505,7 @@ static int upgradeDbToVersion8(SQLiteDatabase db) { db.beginTransaction(); try { - Log.i(DatabaseHelper.LOG_TAG, "Creating scheduled actions table"); + Log.i(LOG_TAG, "Creating scheduled actions table"); db.execSQL("CREATE TABLE " + ScheduledActionEntry.TABLE_NAME + " (" + ScheduledActionEntry._ID + " integer primary key autoincrement, " + ScheduledActionEntry.COLUMN_UID + " varchar(255) not null UNIQUE, " @@ -525,7 +525,7 @@ static int upgradeDbToVersion8(SQLiteDatabase db) { //==============================BEGIN TABLE MIGRATIONS ======================================== - Log.i(DatabaseHelper.LOG_TAG, "Migrating accounts table"); + Log.i(LOG_TAG, "Migrating accounts table"); // backup transaction table db.execSQL("ALTER TABLE " + AccountEntry.TABLE_NAME + " RENAME TO " + AccountEntry.TABLE_NAME + "_bak"); // create new transaction table @@ -577,7 +577,7 @@ static int upgradeDbToVersion8(SQLiteDatabase db) { + " FROM " + AccountEntry.TABLE_NAME + "_bak;" ); - Log.i(DatabaseHelper.LOG_TAG, "Migrating transactions table"); + Log.i(LOG_TAG, "Migrating transactions table"); // backup transaction table db.execSQL("ALTER TABLE " + TransactionEntry.TABLE_NAME + " RENAME TO " + TransactionEntry.TABLE_NAME + "_bak"); // create new transaction table @@ -618,7 +618,7 @@ static int upgradeDbToVersion8(SQLiteDatabase db) { + " FROM " + TransactionEntry.TABLE_NAME + "_bak;" ); - Log.i(DatabaseHelper.LOG_TAG, "Migrating splits table"); + Log.i(LOG_TAG, "Migrating splits table"); // backup split table db.execSQL("ALTER TABLE " + SplitEntry.TABLE_NAME + " RENAME TO " + SplitEntry.TABLE_NAME + "_bak"); // create new split table @@ -668,7 +668,7 @@ static int upgradeDbToVersion8(SQLiteDatabase db) { //TransactionsDbAdapter transactionsDbAdapter = new TransactionsDbAdapter(db, splitsDbAdapter); //AccountsDbAdapter accountsDbAdapter = new AccountsDbAdapter(db,transactionsDbAdapter); - Log.i(DatabaseHelper.LOG_TAG, "Creating default root account if none exists"); + Log.i(LOG_TAG, "Creating default root account if none exists"); ContentValues contentValues = new ContentValues(); //assign a root account to all accounts which had null as parent except ROOT (top-level accounts) String rootAccountUID; @@ -706,7 +706,7 @@ static int upgradeDbToVersion8(SQLiteDatabase db) { contentValues.put(AccountEntry.COLUMN_PARENT_ACCOUNT_UID, rootAccountUID); db.update(AccountEntry.TABLE_NAME, contentValues, AccountEntry.COLUMN_PARENT_ACCOUNT_UID + " IS NULL AND " + AccountEntry.COLUMN_TYPE + " != ?", new String[]{"ROOT"}); - Log.i(DatabaseHelper.LOG_TAG, "Migrating existing recurring transactions"); + Log.i(LOG_TAG, "Migrating existing recurring transactions"); cursor = db.query(TransactionEntry.TABLE_NAME + "_bak", null, "recurrence_period > 0", null, null, null, null); long lastRun = System.currentTimeMillis(); while (cursor.moveToNext()){ @@ -753,7 +753,7 @@ static int upgradeDbToVersion8(SQLiteDatabase db) { cursor.close(); //auto-balance existing splits - Log.i(DatabaseHelper.LOG_TAG, "Auto-balancing existing transaction splits"); + Log.i(LOG_TAG, "Auto-balancing existing transaction splits"); cursor = db.query( TransactionEntry.TABLE_NAME + " , " + SplitEntry.TABLE_NAME + " ON " + TransactionEntry.TABLE_NAME + "." + TransactionEntry.COLUMN_UID + "=" + SplitEntry.TABLE_NAME + "." + SplitEntry.COLUMN_TRANSACTION_UID @@ -830,7 +830,7 @@ static int upgradeDbToVersion8(SQLiteDatabase db) { cursor.close(); } - Log.i(DatabaseHelper.LOG_TAG, "Dropping temporary migration tables"); + Log.i(LOG_TAG, "Dropping temporary migration tables"); db.execSQL("DROP TABLE " + SplitEntry.TABLE_NAME + "_bak"); db.execSQL("DROP TABLE " + AccountEntry.TABLE_NAME + "_bak"); db.execSQL("DROP TABLE " + TransactionEntry.TABLE_NAME + "_bak"); @@ -861,7 +861,7 @@ static int upgradeDbToVersion8(SQLiteDatabase db) { * @throws RuntimeException if the default commodities could not be imported */ static int upgradeDbToVersion9(SQLiteDatabase db){ - Log.i(DatabaseHelper.LOG_TAG, "Upgrading database to version 9"); + Log.i(LOG_TAG, "Upgrading database to version 9"); int oldVersion = 8; db.beginTransaction(); @@ -883,9 +883,9 @@ static int upgradeDbToVersion9(SQLiteDatabase db){ + "' ON " + CommodityEntry.TABLE_NAME + "(" + CommodityEntry.COLUMN_UID + ")"); try { - importCommodities(db); + importCommodities(db, true); } catch (SAXException | ParserConfigurationException | IOException e) { - Log.e(DatabaseHelper.LOG_TAG, "Error loading currencies into the database", e); + Log.e(LOG_TAG, "Error loading currencies into the database", e); Crashlytics.logException(e); throw new RuntimeException(e); } @@ -1092,7 +1092,7 @@ static int upgradeDbToVersion9(SQLiteDatabase db){ * @return 10 if upgrade was successful, 9 otherwise */ static int upgradeDbToVersion10(SQLiteDatabase db){ - Log.i(DatabaseHelper.LOG_TAG, "Upgrading database to version 9"); + Log.i(LOG_TAG, "Upgrading database to version 9"); int oldVersion = 9; db.beginTransaction(); @@ -1145,7 +1145,7 @@ static int upgradeDbToVersion10(SQLiteDatabase db){ * @return 11 if upgrade was successful, 10 otherwise */ static int upgradeDbToVersion11(SQLiteDatabase db){ - Log.i(DatabaseHelper.LOG_TAG, "Upgrading database to version 9"); + Log.i(LOG_TAG, "Upgrading database to version 9"); int oldVersion = 10; db.beginTransaction(); @@ -1241,7 +1241,7 @@ static int upgradeDbToVersion12(SQLiteDatabase db){ * @return New database version, 13 if migration succeeds, 11 otherwise */ static int upgradeDbToVersion13(SQLiteDatabase db){ - Log.i(DatabaseHelper.LOG_TAG, "Upgrading database to version 13"); + Log.i(LOG_TAG, "Upgrading database to version 13"); int oldVersion = 12; db.beginTransaction(); @@ -1552,7 +1552,7 @@ private static void moveDirectory(File srcDir, File dstDir) throws IOException { * @return New database version */ public static int upgradeDbToVersion14(SQLiteDatabase db){ - Log.i(DatabaseHelper.LOG_TAG, "Upgrading database to version 14"); + Log.i(LOG_TAG, "Upgrading database to version 14"); int oldDbVersion = 13; File backupFolder = new File(Exporter.BASE_FOLDER_PATH); backupFolder.mkdir(); @@ -1585,7 +1585,7 @@ public void run() { } /** - * Upgrades the database to version 14. + * Upgrades the database to version 15. *

This migration makes the following changes to the database: *

    *
  • Fixes accounts referencing a default transfer account that no longer @@ -1593,10 +1593,10 @@ public void run() { *
*

* @param db SQLite database to be upgraded - * @return New database version, 14 if migration succeeds, 13 otherwise + * @return New database version, 15 if migration succeeds, 14 otherwise */ static int upgradeDbToVersion15(SQLiteDatabase db) { - Log.i(DatabaseHelper.LOG_TAG, "Upgrading database to version 15"); + Log.i(LOG_TAG, "Upgrading database to version 15"); int dbVersion = 14; db.beginTransaction(); @@ -1628,4 +1628,51 @@ static int upgradeDbToVersion15(SQLiteDatabase db) { rescheduleServiceAlarm(); return dbVersion; } + + /** + * Upgrades the database to version 16. + *

This migration makes the following changes to the database: + *

    + *
  • Update the commodities table (see #731)
  • + *
+ *

+ * @param db SQLite database to be upgraded + * @return New database version, 16 if migration succeeds, 15 otherwise + */ + static int upgradeDbToVersion16(SQLiteDatabase db) { + Log.i(LOG_TAG, "Upgrading database to version 16"); + int dbVersion = 15; + + try { + importCommodities(db, false); + dbVersion = 16; + } catch (SAXException | ParserConfigurationException | IOException e) { + Log.e(LOG_TAG, "Error loading currencies into the database", e); + Crashlytics.logException(e); + } + + return dbVersion; + } + + /** + * Upgrades the database to version 17. + * This migration updates the foreign keys to the commodities in the splits table + * after a previous migration which overwrote the db table for commodities, rendering + * all foreign keys to commodity GUIDs invalid. + * + * @param db SQLite database to be upgraded + * @return New database version, 16 if migration succeeds, 15 otherwise + */ + static int upgradeDbToVersion17(SQLiteDatabase db) { + Log.i(LOG_TAG, "Upgrading database to version 17"); + int dbVersion = 16; + + db.beginTransaction(); + db.execSQL("UPDATE accounts SET commodity_uid = (SELECT uid FROM commodities WHERE mnemonic = accounts.currency_code)"); + db.execSQL("UPDATE transactions SET commodity_uid = (SELECT uid FROM commodities WHERE commodities.mnemonic = transactions.currency_code)"); + + db.endTransaction(); + + return dbVersion + 1; + } } diff --git a/app/src/main/java/org/gnucash/android/export/csv/CsvTransactionsExporter.java b/app/src/main/java/org/gnucash/android/export/csv/CsvTransactionsExporter.java index f0d082e6e..f298cd201 100644 --- a/app/src/main/java/org/gnucash/android/export/csv/CsvTransactionsExporter.java +++ b/app/src/main/java/org/gnucash/android/export/csv/CsvTransactionsExporter.java @@ -96,11 +96,10 @@ public List generateExport() throws ExporterException { * Write splits to CSV format * @param splits Splits to be written */ - private void writeSplitsToCsv(@NonNull List splits, @NonNull CsvWriter writer) throws IOException { + private void writeSplitsToCsv(@NonNull List splits, @NonNull CsvWriter writer, + Map accountNames, Map accountFullNames) throws IOException { int index = 0; - Map uidAccountMap = new HashMap<>(); - for (Split split : splits) { if (index++ > 0){ // the first split is on the same line as the transactions. But after that, we writer.write("" + mCsvSeparator + mCsvSeparator + mCsvSeparator + mCsvSeparator @@ -108,18 +107,22 @@ private void writeSplitsToCsv(@NonNull List splits, @NonNull CsvWriter wr } writer.writeToken(split.getMemo()); - //cache accounts so that we do not have to go to the DB each time String accountUID = split.getAccountUID(); - Account account; - if (uidAccountMap.containsKey(accountUID)) { - account = uidAccountMap.get(accountUID); + + // Cache account names + String fullName, name; + if (accountNames.containsKey(accountUID)) { + fullName = accountFullNames.get(accountUID); + name = accountNames.get(accountUID); } else { - account = mAccountsDbAdapter.getRecord(accountUID); - uidAccountMap.put(accountUID, account); + fullName = mAccountsDbAdapter.getAccountFullName(accountUID); + name = mAccountsDbAdapter.getAccountName(accountUID); + accountFullNames.put(accountUID, fullName); + accountNames.put(accountUID, name); } - writer.writeToken(account.getFullName()); - writer.writeToken(account.getName()); + writer.writeToken(fullName); + writer.writeToken(name); String sign = split.getType() == TransactionType.CREDIT ? "-" : ""; writer.writeToken(sign + split.getQuantity().formattedString()); @@ -143,6 +146,8 @@ private void generateExport(final CsvWriter csvWriter) throws ExporterException } csvWriter.newLine(); + Map nameCache = new HashMap<>(); + Map fullNameCache = new HashMap<>(); Cursor cursor = mTransactionsDbAdapter.fetchTransactionsModifiedSince(mExportParams.getExportStartTime()); Log.d(LOG_TAG, String.format("Exporting %d transactions to CSV", cursor.getCount())); @@ -159,7 +164,7 @@ private void generateExport(final CsvWriter csvWriter) throws ExporterException csvWriter.writeToken("CURRENCY::" + transaction.getCurrencyCode()); csvWriter.writeToken(null); // Void Reason csvWriter.writeToken(null); // Action - writeSplitsToCsv(transaction.getSplits(), csvWriter); + writeSplitsToCsv(transaction.getSplits(), csvWriter, nameCache, fullNameCache); } PreferencesHelper.setLastExportTime(TimestampHelper.getTimestampFromNow()); diff --git a/app/src/main/java/org/gnucash/android/importer/CommoditiesXmlHandler.java b/app/src/main/java/org/gnucash/android/importer/CommoditiesXmlHandler.java index 977328fa6..0cc9b84b4 100644 --- a/app/src/main/java/org/gnucash/android/importer/CommoditiesXmlHandler.java +++ b/app/src/main/java/org/gnucash/android/importer/CommoditiesXmlHandler.java @@ -15,9 +15,11 @@ */ package org.gnucash.android.importer; +import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import org.gnucash.android.app.GnuCashApplication; +import org.gnucash.android.db.DatabaseSchema; import org.gnucash.android.db.adapter.CommoditiesDbAdapter; import org.gnucash.android.db.adapter.DatabaseAdapter; import org.gnucash.android.model.Commodity; @@ -44,17 +46,23 @@ public class CommoditiesXmlHandler extends DefaultHandler { * List of commodities parsed from the XML file. * They will be all added to db at once at the end of the document */ - private List mCommodities; + private List mCommodities = new ArrayList<>(); + + private boolean deleteExisting; private CommoditiesDbAdapter mCommoditiesDbAdapter; - public CommoditiesXmlHandler(SQLiteDatabase db){ + public CommoditiesXmlHandler(SQLiteDatabase db, boolean deleteExisting){ + initAdapter(db); + this.deleteExisting = deleteExisting; + } + + private void initAdapter(SQLiteDatabase db) { if (db == null){ mCommoditiesDbAdapter = GnuCashApplication.getCommoditiesDbAdapter(); } else { mCommoditiesDbAdapter = new CommoditiesDbAdapter(db); } - mCommodities = new ArrayList<>(); } @Override @@ -82,6 +90,25 @@ public void startElement(String uri, String localName, String qName, Attributes @Override public void endDocument() throws SAXException { - mCommoditiesDbAdapter.bulkAddRecords(mCommodities, DatabaseAdapter.UpdateMethod.insert); + if (this.deleteExisting){ + mCommoditiesDbAdapter.deleteAllRecords(); + mCommoditiesDbAdapter.bulkAddRecords(mCommodities, DatabaseAdapter.UpdateMethod.insert); + } else { + List existingCurrencyCodes = new ArrayList<>(); + + try(Cursor cursor = mCommoditiesDbAdapter.fetchAllRecords()) { + while (cursor.moveToNext()) { + String code = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseSchema.CommodityEntry.COLUMN_MNEMONIC)); + existingCurrencyCodes.add(code); + } + } + for (Commodity commodity : mCommodities) { + if (existingCurrencyCodes.contains(commodity.getCurrencyCode())){ + mCommoditiesDbAdapter.addRecord(commodity, DatabaseAdapter.UpdateMethod.update); + } else { + mCommoditiesDbAdapter.addRecord(commodity, DatabaseAdapter.UpdateMethod.insert); + } + } + } } } diff --git a/app/src/main/java/org/gnucash/android/ui/account/AccountsActivity.java b/app/src/main/java/org/gnucash/android/ui/account/AccountsActivity.java index 846330af8..5e8a94026 100644 --- a/app/src/main/java/org/gnucash/android/ui/account/AccountsActivity.java +++ b/app/src/main/java/org/gnucash/android/ui/account/AccountsActivity.java @@ -37,6 +37,7 @@ import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; +import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.preference.PreferenceManager; import android.util.Log; @@ -268,6 +269,15 @@ public void onClick(View v) { }); } + @Override + protected void onResume() { + super.onResume(); + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setSubtitle(BooksDbAdapter.getInstance().getActiveBookDisplayName()); + } + } + @Override protected void onStart() { super.onStart(); diff --git a/app/src/main/java/org/gnucash/android/ui/transaction/ScheduledActionsListFragment.java b/app/src/main/java/org/gnucash/android/ui/transaction/ScheduledActionsListFragment.java index 01f25340e..abf75287d 100644 --- a/app/src/main/java/org/gnucash/android/ui/transaction/ScheduledActionsListFragment.java +++ b/app/src/main/java/org/gnucash/android/ui/transaction/ScheduledActionsListFragment.java @@ -25,6 +25,7 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.support.v4.app.ListFragment; import android.support.v4.app.LoaderManager; @@ -78,6 +79,7 @@ public class ScheduledActionsListFragment extends ListFragment implements * Logging tag */ protected static final String TAG = "ScheduledActionFragment"; + private static final String FRAGMENT_ACTION_KEY = "action_key"; private TransactionsDbAdapter mTransactionsDbAdapter; private SimpleCursorAdapter mCursorAdapter; @@ -175,6 +177,10 @@ public static Fragment getInstance(ScheduledAction.ActionType actionType){ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if(savedInstanceState != null && savedInstanceState.containsKey(FRAGMENT_ACTION_KEY)) { + mActionType = (ScheduledAction.ActionType) savedInstanceState.getSerializable(FRAGMENT_ACTION_KEY); + } + mTransactionsDbAdapter = TransactionsDbAdapter.getInstance(); switch (mActionType){ case TRANSACTION: @@ -641,5 +647,10 @@ public Cursor loadInBackground() { } } + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + outState.putSerializable(FRAGMENT_ACTION_KEY, mActionType); + super.onSaveInstanceState(outState); + } } diff --git a/app/src/main/res/layout/activity_transaction_detail.xml b/app/src/main/res/layout/activity_transaction_detail.xml index 66a50ed96..f0a2d3739 100644 --- a/app/src/main/res/layout/activity_transaction_detail.xml +++ b/app/src/main/res/layout/activity_transaction_detail.xml @@ -41,6 +41,8 @@ + +1 +60 + + ISO4217 + HRK + + currency + + + + template + template + template + template + 1 + + + Root Account + 5341c3d89c4a4163ba2cd13a0f521033 + ROOT + + ISO4217 + HRK + + 100 + + + Rashod + 235ba33cbfbb45b18a14ef690c65a8f0 + EXPENSE + + ISO4217 + HRK + + 100 + Rashod + + + color + #D13E29 + + + placeholder + true + + + 5341c3d89c4a4163ba2cd13a0f521033 + + + Osiguranje + 9892b814fe2a442ba344af98862e5c49 + EXPENSE + + ISO4217 + HRK + + 100 + Osiguranje + + + placeholder + true + + + 235ba33cbfbb45b18a14ef690c65a8f0 + + + Osiguranje kućanstva + 0efe6e487ce149fe9d8d2f6fa6c92838 + EXPENSE + + ISO4217 + HRK + + 100 + Osiguranje stvari kućanstva + 9892b814fe2a442ba344af98862e5c49 + + + Osiguranje imovine + bb3bfe896d7048ecb76a3c453888bfb0 + EXPENSE + + ISO4217 + HRK + + 100 + Osiguranje kuće, stana, apartmana + 9892b814fe2a442ba344af98862e5c49 + + + Zdravstveno osiguranje + e17cc50365084a538b69ff308ae2f7f5 + EXPENSE + + ISO4217 + HRK + + 100 + Zdravstveno osiguranje + 9892b814fe2a442ba344af98862e5c49 + + + Stanovanje + ab80c55c11ea4d37b27ee84ed27b3878 + EXPENSE + + ISO4217 + HRK + + 100 + Troškovi stanovanja + + + placeholder + true + + + 235ba33cbfbb45b18a14ef690c65a8f0 + + + Najamnina + c9803aa724ad41c6864992b4167339da + EXPENSE + + ISO4217 + HRK + + 100 + Najamnina + ab80c55c11ea4d37b27ee84ed27b3878 + + + Režije + 8254099c5c8a4454ae394e5853cc558a + EXPENSE + + ISO4217 + HRK + + 100 + Režije + + + placeholder + true + + + ab80c55c11ea4d37b27ee84ed27b3878 + + + Plin + 8755f7661cf34377ae596daac3df8167 + EXPENSE + + ISO4217 + HRK + + 100 + Plin + 8254099c5c8a4454ae394e5853cc558a + + + Struja + e871041f3aaa4a91afac7c32f7dee6f5 + EXPENSE + + ISO4217 + HRK + + 100 + Struja + 8254099c5c8a4454ae394e5853cc558a + + + Voda + 2d5605f4bf674a868d58299f1b42e634 + EXPENSE + + ISO4217 + HRK + + 100 + Voda + 8254099c5c8a4454ae394e5853cc558a + + + Grijanje + 1b32c949e760400ca39170dbe0e7aeaf + EXPENSE + + ISO4217 + HRK + + 100 + Grijanje + 8254099c5c8a4454ae394e5853cc558a + + + Čistoća + 528973ad80764a8e9cf1c3e7467b5409 + EXPENSE + + ISO4217 + HRK + + 100 + Čistoća + 8254099c5c8a4454ae394e5853cc558a + + + Komunalna naknada + a7f6651f9cf34e2ab31ea164d949ea4a + EXPENSE + + ISO4217 + HRK + + 100 + Komunalna naknada + 8254099c5c8a4454ae394e5853cc558a + + + Pričuva + 55e82a78bd8d49afb58aa4cec4878f3d + EXPENSE + + ISO4217 + HRK + + 100 + Pričuva + 8254099c5c8a4454ae394e5853cc558a + + + Telekomunikacija + 15599741f6414e5bacf6a721123054ce + EXPENSE + + ISO4217 + HRK + + 100 + Telekomunikacija + + + placeholder + true + + + ab80c55c11ea4d37b27ee84ed27b3878 + + + Televizija + 85e284fe8ab74fff844cd37e89ad9701 + EXPENSE + + ISO4217 + HRK + + 100 + RTV pretplata + 15599741f6414e5bacf6a721123054ce + + + Internet + f79d94ab9d014a20a0e00ebce765539a + EXPENSE + + ISO4217 + HRK + + 100 + Internet + 15599741f6414e5bacf6a721123054ce + + + Telefon + d3b95f1b45a84594b513414cfdfe5a34 + EXPENSE + + ISO4217 + HRK + + 100 + Telefon/Mobitel + 15599741f6414e5bacf6a721123054ce + + + Mrežne usluge + cc27256b8391480c95158df6bf86681c + EXPENSE + + ISO4217 + HRK + + 100 + Mrežne usluge + 15599741f6414e5bacf6a721123054ce + + + Obrazovanje + 0a136f6f18af49d7bc9e189da49745eb + EXPENSE + + ISO4217 + HRK + + 100 + Obrazovanje + + + placeholder + true + + + 235ba33cbfbb45b18a14ef690c65a8f0 + + + Pretplate + ce6ec9b02ae7459aa182b0d866ed7e10 + EXPENSE + + ISO4217 + HRK + + 100 + Pretplate, npr. na časopise + 0a136f6f18af49d7bc9e189da49745eb + + + Knjige + 11420c5117c7474d98465f3282288638 + EXPENSE + + ISO4217 + HRK + + 100 + Knjige + 0a136f6f18af49d7bc9e189da49745eb + + + Uredski materijal + e3dbccbd84b14ae095a66df282ab937f + EXPENSE + + ISO4217 + HRK + + 100 + Uredski materijal + 0a136f6f18af49d7bc9e189da49745eb + + + Odjeća i obuća + c5e2ae12932548c8b7999597bb487e4e + EXPENSE + + ISO4217 + HRK + + 100 + Odjeća i obuća + 235ba33cbfbb45b18a14ef690c65a8f0 + + + Namirnice + 07c603cdb09e462983f4c3ce61beb10c + EXPENSE + + ISO4217 + HRK + + 100 + Namirnice + 235ba33cbfbb45b18a14ef690c65a8f0 + + + Lijekovi + 1f649ce81ee9422f87f09822dcb279e6 + EXPENSE + + ISO4217 + HRK + + 100 + Lijekovi + 235ba33cbfbb45b18a14ef690c65a8f0 + + + Razni troškovi + 6b118c004de94d319777f315aac31590 + EXPENSE + + ISO4217 + HRK + + 100 + Razni troškovi + + + placeholder + true + + + 235ba33cbfbb45b18a14ef690c65a8f0 + + + Bankovne naknade + dc31044a0a1f43179ab9917caacb8005 + EXPENSE + + ISO4217 + HRK + + 100 + Bankovne naknade + 6b118c004de94d319777f315aac31590 + + + Razno + 12781eaa4a744c0890d43ebecf3ac02b + EXPENSE + + ISO4217 + HRK + + 100 + Neodređeni troškovi + 6b118c004de94d319777f315aac31590 + + + Izlasci + 77a047c799b841f8a1723d3b0bb82dbd + EXPENSE + + ISO4217 + HRK + + 100 + Koncerti, kino, kafići i sl. + 6b118c004de94d319777f315aac31590 + + + Putovanja + 23f06146e1004ee2abca2711b049d19c + EXPENSE + + ISO4217 + HRK + + 100 + Putovanja, ljetovanje, skijanje + 6b118c004de94d319777f315aac31590 + + + Sport + 05fec015e7464e139c63824f48d11d40 + EXPENSE + + ISO4217 + HRK + + 100 + Sport + 6b118c004de94d319777f315aac31590 + + + Porezi + 874c3bdc5ce649b38526ede38511c6aa + EXPENSE + + ISO4217 + HRK + + 100 + Porezi i prirezi + + + placeholder + true + + + 235ba33cbfbb45b18a14ef690c65a8f0 + + + Ostali porezi + f5f8b06aab9d4e7ab45562b70ff0f38d + EXPENSE + + ISO4217 + HRK + + 100 + Ostali porezi + 874c3bdc5ce649b38526ede38511c6aa + + + Kamate + 397a362bb1854eb282c81b1c55c8c8ed + EXPENSE + + ISO4217 + HRK + + 100 + Kamate + + + placeholder + true + + + 235ba33cbfbb45b18a14ef690c65a8f0 + + + Kamate na kredit + 8e830a56bfd74bf794d3daa0ee4d2e89 + EXPENSE + + ISO4217 + HRK + + 100 + Kamate na kredit + 397a362bb1854eb282c81b1c55c8c8ed + + + Prijevoz + d76be66cd8c74163aa32d78cdf1a8f43 + EXPENSE + + ISO4217 + HRK + + 100 + Javni prijevoz + 235ba33cbfbb45b18a14ef690c65a8f0 + + + Imovina + 8238aeea37da4e83b2e6ebda9a154fed + ASSET + + ISO4217 + HRK + + 100 + Imovina + + + color + #1469EB + + + placeholder + true + + + 5341c3d89c4a4163ba2cd13a0f521033 + + + Trenutačna imovina + 2f65659c8f0a40d5bfacdbc6e97385b2 + ASSET + + ISO4217 + HRK + + 100 + Trenutačna imovina + + + placeholder + true + + + 8238aeea37da4e83b2e6ebda9a154fed + + + Žiro račun + dbc38ec576cb4698be83e2d3b9a069de + BANK + + ISO4217 + HRK + + 100 + Žiro račun + 2f65659c8f0a40d5bfacdbc6e97385b2 + + + Štedni račun + 9c2956c914c24b479c516aa51abc45f3 + BANK + + ISO4217 + HRK + + 100 + Štedni račun + 2f65659c8f0a40d5bfacdbc6e97385b2 + + + Gotovina + 16d490a3ee704af6b561ae27a5c94b08 + CASH + + ISO4217 + HRK + + 100 + Gotovina + 2f65659c8f0a40d5bfacdbc6e97385b2 + + + Tekući račun + 870388eb4aeb44aab610dfdfb64e5923 + BANK + + ISO4217 + HRK + + 100 + Tekući račun + 2f65659c8f0a40d5bfacdbc6e97385b2 + + + Obveze + d06b88ced55b447ca3855c5f45c2ce61 + LIABILITY + + ISO4217 + HRK + + 100 + Obveze + + + color + #B304AD + + + placeholder + true + + + 5341c3d89c4a4163ba2cd13a0f521033 + + + Kreditna kartica + 5bd303fbe2e34d94abd6875f14585779 + CREDIT + + ISO4217 + HRK + + 100 + Kreditna kartica + d06b88ced55b447ca3855c5f45c2ce61 + + + Krediti + ed98b81a714e45278dc67dfdd4af2feb + LIABILITY + + ISO4217 + HRK + + 100 + Krediti/zajmovi + + + placeholder + true + + + d06b88ced55b447ca3855c5f45c2ce61 + + + Kredit + 72cc954449654b15885e64c8acf5d580 + LIABILITY + + ISO4217 + HRK + + 100 + Kredit + ed98b81a714e45278dc67dfdd4af2feb + + + Prihod + d7d12700fe634492a94167d2027b6b20 + INCOME + + ISO4217 + HRK + + 100 + Prihod + + + color + #1B4F15 + + + placeholder + true + + + 5341c3d89c4a4163ba2cd13a0f521033 + + + Dohodak + 8c785ba89f1e42518bd7305abd0a49ca + INCOME + + ISO4217 + HRK + + 100 + Dohodak + + + placeholder + true + + + d7d12700fe634492a94167d2027b6b20 + + + Osobni dohodak + d6afbd8f3f10454e93a0f19012fe62d8 + INCOME + + ISO4217 + HRK + + 100 + Osobni dohodak + 8c785ba89f1e42518bd7305abd0a49ca + + + Dodaci + e9b8d2ff282647ce8a28a54d59d067e1 + INCOME + + ISO4217 + HRK + + 100 + Dodaci, bonusi, dnevnica i sl. + 8c785ba89f1e42518bd7305abd0a49ca + + + Ostalo + 443ecfc3f1f04e59af9858403790dfcb + INCOME + + ISO4217 + HRK + + 100 + Ostali prihodi + d7d12700fe634492a94167d2027b6b20 + + + Kamate + fa2021c3387f49fdad88a82368c4c14b + INCOME + + ISO4217 + HRK + + 100 + Prihod od kamata + + + placeholder + true + + + d7d12700fe634492a94167d2027b6b20 + + + Kamate po žiro računu + be1b142eefef4ec3978fae9294287148 + INCOME + + ISO4217 + HRK + + 100 + Kamate po žiro računu + fa2021c3387f49fdad88a82368c4c14b + + + Kamate po štednom računu + 33d293b2094c4d688614c00ad4921060 + INCOME + + ISO4217 + HRK + + 100 + Kamate po štednom računu + fa2021c3387f49fdad88a82368c4c14b + + + Kamate po tekućem računu + 2027ae3a6f62439a994c98ac58a71d84 + INCOME + + ISO4217 + HRK + + 100 + Kamate po tekućem računu + fa2021c3387f49fdad88a82368c4c14b + + + Kapital + 3892e7fc9d6d41e8b1d03f152f6b782f + EQUITY + + ISO4217 + HRK + + 100 + Kapital + + + color + #EE8600 + + + placeholder + true + + + 5341c3d89c4a4163ba2cd13a0f521033 + + + Početni saldo + 944896a235b64f18966397d346300c01 + EQUITY + + ISO4217 + HRK + + 100 + Početni saldo + 3892e7fc9d6d41e8b1d03f152f6b782f + + + diff --git a/app/src/main/res/raw/iso_4217_currencies.xml b/app/src/main/res/raw/iso_4217_currencies.xml index 27a93a61b..f128c063a 100644 --- a/app/src/main/res/raw/iso_4217_currencies.xml +++ b/app/src/main/res/raw/iso_4217_currencies.xml @@ -35,7 +35,7 @@ Sort order by ISO codes for simpler maintainance - File source: https://github.com/Gnucash/gnucash/blob/master/src/engine/iso-4217-currencies.xml + File source: https://github.com/Gnucash/gnucash/blob/master/libgnucash/engine/iso-4217-currencies.xml --> @@ -1774,7 +1774,7 @@ exchange-code="480" parts-per-unit="100" smallest-fraction="100" - local-symbol="R" + local-symbol="₨" /> @@ -2161,7 +2161,7 @@ exchange-code="643" parts-per-unit="100" smallest-fraction="100" - local-symbol="руб" + local-symbol="₽" /> @@ -2981,7 +2981,7 @@ exchange-code="nil" parts-per-unit="1000000" smallest-fraction="1000000" - local-symbol="XBT" + local-symbol="₿" /> @@ -3037,4 +3037,19 @@ smallest-fraction="1000000" local-symbol="" /> + + diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index f593b1675..7ccf20003 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -16,58 +16,58 @@ limitations under the License. --> - إنشاء حساب - تعديل الحساب - إضافة حركة جديدة لحساب - عرض تفاصيل الحساب - لا توجد حسابات للعرض - اسم الحساب - إلغاء - حفظ - اختبار - أدخل رمز المرور - رمز المرور خطأ؛ من فضلك حاول مُجددًا - إعداد رمز المرور - الرجاء تأكيد كلمة المرور الخاصة بك - تأكيد رمز المرور غير صحيح. الرجاء المحاولة مرة أخرى - الوصف - المبلغ - معاملة جديدة - لا معاملات لعرض - الخصم - الائتمان - الحسابات - المعاملات - حذف - حذف - إلغاء - تم حذف الحساب - تأكيد الحذف - تحرير المعاملات - إضافة ملاحظة - %1$d محدد - الرصيد: - التصدير إلى: - تصدير المعاملات - بشكل افتراضي، سيتم تصدير المعاملات الجديدة فقط منذ آخر تصدير. حدد هذا الخيار لتصدير جميع المعاملات - خطأ في تصدير ملف %1$s - تصدير - حذف الحركات بعد التصدير - سيتم حذف كافة المعاملات المصدرة عند اكتمال التصدير - إعدادات + Create Account + Edit Account + Add a new transaction to an account + View account details + No accounts to display + Account name + Cancel + Save + Test + Enter Passcode + Wrong passcode, please try again + Passcode set + Please confirm your passcode + Invalid passcode confirmation. Please try again + Description + Amount + New transaction + No transactions to display + DEBIT + CREDIT + Accounts + Transactions + Delete + Delete + Cancel + Account deleted + Confirm delete + Edit Transaction + Add note + %1$d selected + Balance: + Export To: + Export Transactions + By default, only new transactions since last export will be exported. Check this option to export all transactions + Error exporting %1$s file + Export + Delete transactions after export + All exported transactions will be deleted when exporting is completed + Settings - حفظ باسم… + Save As… Dropbox ownCloud - إرسال إلى… + Send to… - نقل - نقل %1$d معاملات + Move + Move %1$d transaction(s) Destination Account Cannot move transactions.\nThe destination account uses a different currency from origin account - عام - حول - اختار عملة إفتراضية + General + About + Choose default currency Default currency Default currency to assign to new accounts Enables recording transactions in GnuCash for Android @@ -124,9 +124,9 @@ - Multiple bug fixes and improvements\n Dismiss - أدخل مبلغ لحفظ الحركة - حدث خطأ أثناء استيراد حسابات GnuCash - تم إستيراد حسابات GnuCash بنجاح + Enter an amount to save the transaction + An error occurred while importing the GnuCash accounts + GnuCash Accounts successfully imported Import account structure exported from GnuCash desktop Import GnuCash XML Delete all accounts in the database. All transactions will be deleted as diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index cf674c732..49f40617d 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -206,10 +206,10 @@ Memo Spend Receive - Ανάληψη - Κατάθεση - Πληρωμή - Χρέωση + Withdrawal + Deposit + Payment + Charge Decrease Increase Income @@ -217,8 +217,8 @@ Expense Bill Invoice - Αγορά - Πώληση + Buy + Sell Αρχικά υπόλοιπα Καθαρή Θέση Enable to save the current account balance (before deleting transactions) as new opening balance after deleting transactions @@ -228,14 +228,14 @@ Generates separate QIF files per currency Imbalance: Add split - Αγαπημένο + Favorite Navigation drawer opened Navigation drawer closed - Αναφορές + Reports Pie Chart Line Chart Bar Chart - Προτιμήσεις αναφοράς + Report Preferences Account color in reports Use account color in the bar/pie chart Order by size diff --git a/app/src/main/res/values-es-rMX/strings.xml b/app/src/main/res/values-es-rMX/strings.xml index a6dddb325..1d8d70660 100644 --- a/app/src/main/res/values-es-rMX/strings.xml +++ b/app/src/main/res/values-es-rMX/strings.xml @@ -52,7 +52,7 @@ Por defecto solo las nuevas transacciones desde la última exportación serán exportadas. Seleccione esta opción para exportar todas las transacciones Error exportando datos %1$s Exportar - Borrar transacciones después de exportar + Borrar transacciones despues de exportar Todas las transacciones exportadas serán borradas cuando la exportación haya terminado Ajustes @@ -226,7 +226,7 @@ Mostrar leyenda Mostrar etiquetas Mostrar porcentaje - Mostrar líneas de media + Mostar lineas de media Agrupar porciones pequeñas Datos del gráfico no disponibles Total diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index e83540caf..994bd4661 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -38,7 +38,7 @@ ABONO Cuentas Transacciones - Borrar + BORRAR Borrar Cancelar Cuenta borrada @@ -226,7 +226,7 @@ Mostrar leyenda Mostrar etiquetas Mostrar porcentaje - Mostrar líneas de media + Mostar lineas de media Agrupar porciones pequeñas Datos del gráfico no disponibles Total diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml new file mode 100644 index 000000000..3e7ff0211 --- /dev/null +++ b/app/src/main/res/values-hr/strings.xml @@ -0,0 +1,501 @@ + + + + + Stvori konto + Uredi konto + Dodaj novu transakciju jednom kontu + Prikaži detalje konta + Nema konta + Ime konta + Odustani + Spremi + Ispitaj + Unesi lozinku + Kriva lozinka, pokušaj ponovo + Lozinka je postavljena + Potvrdi lozinku + Nevaljana potvrda lozinke. Pokušaj ponovo + Opis + Iznos + Nova transakcija + Nema transakcija + DUGUJE + POTRAŽUJE + Konti + Transakcije + Izbriši + Izbriši + Odustani + Konto je izbrisan + Potvrdi brisanje + Uredi transakciju + Dodaj napomenu + Odabrano: %1$d + Saldo: + Izvezi u: + Izvezi transakcije + Standardno se izvoze samo nove transakcije, učinjene nakon zadnjeg izvoza. Uključi ovu opciju za izvoz svih transakcija + Greška prilikom izvoza datoteke %1$s + Izvezi + Izbriši transakcije nakon izvoza + Sve izvezene transakcije će biti izbrisane nakon završetka izvoza + Postavke + + Spremi pod … + Dropbox + ownCloud + Pošalji na … + + Premjesti + Premjesti %1$d transakcije(a) + Odredišni konto + Prijenos transakcije nije moguć.\nOdredišni konto koristi drugačiju valutu od izvornog konta + Općenito + O programu + Odaberi standardnu valutu + Standardna valuta + Standardna valuta za nova konta + Omogućava spremanje transakcija u GnuCash za Android + Omogućava stvaranje konta u GnuCashu za Android + Tvoji GnuCash podaci + Čitaj i promijeni GnuCash podatke + Spremi transakcije u GnuCashu + Stvori transakcije u GnuCashu + Prikaži konto + Sakrij saldo konta u alatnom bloku + Stvori konta + U GnuCashu nema konta.\nStvori konto prije dodavanja alatnog bloka + Licenca + Apache License v2.0. Za detalje, klikni + Opće postavke + Odaberi konto + Nema transakcija za izvoz + Postavke za lozinku + Aktiviraj lozinku + Promijeni lozinku + O programu GnuCash + GnuCash Android %1$s izvoz + GnuCash Android izvoz iz + Transakcije + Postavke za transakcije + Postavke za konta + Standardna vrsta transakcije + Standardno korištena vrsta transakcije, POTRAŽUJE ili DUGUJE + + POTRAŽUJE + DUGUJE + + Zaista želiš izbrisati SVE transakcije? + Zaista želiš izbrisati ovu transakciju? + Izvoz + Izvezi sve transakcije + Izbriši izvezene transakcije + Standardna e-pošta za izvoz + Standardna adresa e-pošte, na koju se šalju datoteke izvoza. Adresu možeš promijeniti i prilikom izvoza. + Sve transakcije će se prenijeti s jednog konta na drugi konto + Aktiviraj dvojno knjigovodstvo + Saldo + Za stvaranje konta, unesi ime konta + Valuta + Matični konto + Koristi XML OFX zaglavlje + Aktiviraj ovu opciju za izvoz u neki drugi program, koji nije desktop verzija GnuCasha + Što je novo + - Podržava format za CSV-izvoz \n + - Poboljšana kompatibilnost s datotekama desktop verzije GnuCasha\n + - Ograničavanje slobodnog mjesta za sigurnosne kopije \n + - Razne ispravke grešaka i poboljšanja\n + Odbaci + Za spremanje transakcije, unesi iznos + Došlo je do greške prilikom uvoza GnuCash konta + GnuCash konti su uspješno uvezeni + Uvezi kontni plan iz GnuCash XML-a + Uvezi GnuCash XML + Izbriši sva konta iz baze podataka. Istovremeno se brišu sve transakcije. + + + Izbriši sva konta + Konti + Svi konti su uspješno izbrisani + Zaista želiš izbrisati sva konta i sve transakcije?\n\n + Ovo je nepovratna operacija! + + Izbrisat će se sve transakcije svih konta! + Izbriši sve transakcije + Sve transakcije su uspješno izbrisane! + Uvoz konta + Transakcije + Podkonta + Traži + Standardni format za izvoz + Format koji će se standardno koristiti za izvoz transakcija + Ponavljanje + + Debalans + Izvoz transakcija + Nema ponavljajućih transakcija. + Ponavljajuće transakcije su uspješno izbrisane + Rezervirani konto + Standardni konto za prijenos + + %d podkonto + %d podkonta + %d podkonta + + + GOTOVINA + BANKA + KREDITNA KARTICA + IMOVINA + OBVEZE + PRIHOD + RASHOD + DUGOVANJA + POTRAŽIVANJA + KAPITAL + VALUTA + DIONICE + INVESTICIJSKI FOND + TRGOVANJE + + + CSV + QIF + OFX + XML + + + Odaberi boju + + + Boja i vrsta konta + Izbriši podkonta + Nedavna + Favoriti + Sva + Stvara standardnu, u GnuCashu često korištenu strukturu konta + Stvori standardna konta + Otvorit će se nova knjiga sa standardnim kontima\n\nTvoji postojeći konti i transakcije se neće dirati! + Transakcije + Odaberi odredište za izvoz + Zabilješka + Izdatak + Primitak + Isplata + Uplata + Plaćanje + Terećenje + Smanjenje + Povećanje + Prihod + Popust + Rashod + Ulazni račun + izlazni račun + Kupovina + Prodaja + Početni saldo + Kapital + Aktiviraj, kako bi se trenutačni saldo konta preuzeo kao novi početni saldo nakon brisanja transakcija + + Spremi početni saldo konta + OFX ne pordžava dvojno knjigovodstvo + Za svaku valutu stvara pojedinačnu QIF datoteku + Debalans: + Dodaj podjelu + Favorit + Navigacijska traka je otvorena + Navigacijska traka je zatvorena + Izvještaji + Kružni dijagram + Linijski dijagram + Stupčani dijagram + Postavke za izvještaje + Boja konta u izvještajima + Koristi boje konta u stupčanom/kružnom dijagramu + Razvrstaj prema veličini + Prikaži legendu + Prikaži oznake + Prikaži postotke + Prikaži linije prosjeka + Grupiraj manje odsječke + Nema podataka za izradu dijagrama + Ukupno + Ostali + Postotak za odabranu vrijednost u odnosu na ukupni iznos + Postotak za odabranu vrijednost u odnosu na iznos trenutačnog složenog stupca + Spremi kao predložak + Ovaj konto sadržava transakcije. \nŠto želiš uraditi s tim transakcijama? + Ovaj konto sadržava podkonta. \nŠto želiš uraditi s tim podkontima? + Izbriši transakcije + Za spremanje transakcije, stvori i odredi konto za prijenos ILI deaktiviraj dvojno knjigovodstvo u postavkama + Stvori termine + Učitaj sigurnosnu kopiju … + Stvori sigurnosnu kopiju i izvezi + Aktiviraj DropBox + Aktiviraj ownCloud + Sigurnosna kopija + Aktiviraj izvoz u DropBox + Aktiviraj izvoz u ownCloud + Postavke za sigurnosnu kopiju + Stvori sigurnosnu kopiju + Stvori sigurnosnu kopiju aktivne knjige + Učitaj najnoviju sigurnosnu kopiju aktivne knjige + Sigurnosna kopija je uspješno stvorena + Sigurnosna kopija nije stvorena + Izvozi sva konta i sve transakcije + Instaliraj upravitelja datotekama za odabir datoteka + Odaberi sigurnosnu kopiju, koju želiš ponovo učitati + Favoriti + Otvori … + Izvještaji + Izvezi … + Postavke + Korisničko ime + Lozinka + owncloud + https:// + OC server nije nađen + OC korisničko ime/lozinka ne valja + Nevaljani slovni znakovi: \\ < > : \" | * ? + OC server je u redu + OC korisničko ime/lozinka je u redu + Dir ime je u redu + + Svaki sat + Svaka %d sata + Svakih %d sati + + + Dnevno + Svaka %d dana + Svakih %d dana + + + Tjedno + Svaka %d tjedna + Svakih %d tjedana + + + Mjesečno + Svaka %d mjeseca + Svakih %d mjeseci + + + Godišnje + Svake %d godine + Svakih %d godina + + Aktiviraj dnevnik urušavanja programa + Automatski šalji informacije o aplikacijskim greškama razvijateljima. + Format + Unesi staru lozinku + Unesi novu lozinku + Izvozi + Nema terminiranih izvoza + Stvori terminirane izvoze + Izvezeno u: %1$s + Legenda je pre dugačka + Opis konta + Nema nedavno korištenih konta + Nema favoriziranih konta + Terminirane radnje + "Završeno. Zadnje izvođenje %1$s" + Sljedeće + Gotovo + Standardna valuta + Postavke konta + Odaberi valutu + Opcije za feedback + Stvori standardna konta + Uvezi moja konta + Dozvoli da ja to obavim + Ostalo … + Automatski pošalji izvještaj o urušavanju programa + Deaktiviraj izvještavanje o urušavanju programa + Natrag + Postavi GnuCash + Dobro došla, dobro došao u GnuCash + Prije nego što kreneš s radom, \nnajprije namjesti par stvari\n\nZa nastavak, pritisni Sljedeće + Uređivač podjela + Prije spremanja, provjeri da sve stavke podjele imaju valjani iznos! + Nevaljani izraz! + Terminirana ponavljajuća transakcija + Prenesi sredstva + + Za prikaz detalja, odaberi jedan odsječak + Razdoblje: + Iz: + U: + Za prijenos sredstava, zadaj konvertiranu vrijednost ili tečaj + Tečaj + Dohvati tečaj + Konvertirani iznos + Bilanca + Rashod zadnjih tri mjeseca + Ukupno imovina + Ukupno obveze + Neto vrijednost + Imovina + Obveze + Kapital + Premjesti u: + Grupiraj po + Mjesecu + Kvartalu + Godini + Bilanca + Ukupno: + Google+ zajednica + Prevedi GnuCash + Izmijeni ideje, diskutiraj o promjenama ili prijavi greške + Prevodi ili ispravljaj prijevode na CrowdIn + Nema kompatibilne aplikacije za prihvaćanje izvezenih transakcija! + Premjesti … + Dupliciraj + Novčani tijek + Proračuni + Aktiviraj kompaktni prikaz + Aktiviraj stalni prikaz kompaktnog popisa transakcija + Nevaljani tečaj + npr. 1 %1$s = x.xx %2$s + Nevaljani iznos + + Tekući mjesec + Zadnja 3 mjeseca + Zadnjih 6 mjeseci + Zadnjih 12 mjeseci + Svo vrijeme + Proizvoljno razdoblje … + + + 1 + + + 2 + ABC + 3 + DEF + 4 + GHI + 5 + JKL + 6 + MNO + 7 + PQRS + 8 + TUV + 9 + WXYZ + 0 + + + Upravljaj knjigama + Upravljaj knjigama … + Za prikaz detalja, odaberi bilo koji dio dijagrama + Potvrdi brisanje knjige + Svi konti i sve transakcije ove knjige će biti izbrisane! + Izbriši knjigu + Zadnji izvoz: + Aktiviraj sinkronizaciju + Nova knjiga + Odabrana transakcija nije podijeljena i ne može se otvoriti + Broj podjela: %1$d + u %1$s + + %d konto + %d konta + %d konti + + + %d transakcija + %d transakcije + %d transakcija + + + RASHOD + PRIHOD + + Spoji se s Google Drive + Spajanje s Google Drive nije moguće + Unesi iznos u podjelu + vanjska usluga + Aktualiziraj ponavljanja terminiranih transakcija + Od + Svo vrijeme + Preporuči na Play Store stranici + do %1$s + na %1$s + %1$d puta + Kompaktni prikaz + Knjiga %1$d + nikad + Preimenuj knjigu + Preimenuj + Preimenuj + Odaberi sigurnosnu kopiju + Odaberi datoteku za spremanje sigurnosne kopije + Potvrdi ponovo učitavanje sigurnosne kopije + Otvorit će se nova knjiga sa sadržajem ove sigurnosne kopije. Želiš li nastaviti? + Učitaj sigurnosnu kopiju + Nema sigurnosnih kopija + Ne postoje sigurnosne kopije, koje bi se mogle učitati. + + gnucash_android_backup.gnca + Odaberi odredište nakon što izvoz završi. + Izvezi u Dropbox mapu pod „/Apps/GnuCash Android/„ + Postavke + Da, želim + export_accounts_csv_key + Izvezi sva konta (bez transakcija) u CSV + Izvezi kao CSV + Razdvojnik + Izvezi transakcije kao CSV + + Datum + ID transakcije + Broj + Opis + Napomene + Roba/Valuta + Razlog storniranja + Radnja + Zabilješka + Cjelokupno ime konta + Ime konta + Iznos s oznakom + Numerički iznos + Uskladi + Datum usklađivanja + Tečaj/cijena + + + Vrsta + Cjelokupno ime + Ime + Šifra + Opis + Boja + Napomene + robam + roban + Skriveno + Porez + Rezervirano mjesto + + diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 8f9d8d940..32e24d46f 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -20,15 +20,15 @@ Ubah Akun Tambah transaksi baru ke akun Lihat rincian akun - Tak ada akun untuk ditampilkan + Tidak ada akun untuk ditampilkan Nama akun Batal Simpan - Uji coba - Masukkan sandi - Sandi salah, silakan coba lagi - Sandi dibuat - Harap konfirmasi sandi Anda + Tes + Masukkan Kode akses + Kode akses salah, silakan coba lagi + Kode akses dibuat + Harap konfirmasi kode akses Anda Konfirmasi kode akses tidak valid. Silakan cobalagi Deskripsi Jumlah @@ -183,7 +183,7 @@ Semua Buat struktur akun yang paling sering digunakan di GnuCash secara default Buat akun default - Sebuah buku baru akan dibuka dengan akun default\n\nakun dan transaksi Anda saat ini tidak akan diubah! + A new book will be opened with the default accounts\n\nYour current accounts and transactions will not be modified! Transaksi Pilih tujuan untuk ekspor Memo @@ -209,13 +209,10 @@ OFX tidak mendukung transaksi double-entry Menghasilkan file QIF terpisah per mata uang Tidak seimbang: - Tambahkan split -  + Add split Favorit - Laci navigasi dibuka -  - Laci navigasi tertutup -  + Navigation drawer opened + Navigation drawer closed Laporan Bagan Pai Bagan Garis @@ -250,8 +247,7 @@ Pengaturan Cadangan Membuat Cadangan Buat cadangan dari pembukuan yang aktif - Pulihkan cadangan terbaru buku aktif -  + Restore most recent backup of active book Pencadangan berhasil Pencadangan gagal Ekspor seluruh akun dan transaksi @@ -267,15 +263,13 @@ owncloud https:// Server OC tidak ditemukan - Username / kata kunci OC tidak valid -  + OC username/password invalid Karakter tidak valid: \\ < > : \" | * ? Server OC OK - OC username / password OK -  + OC username/password OK Nama Dir OK - Per jam + Every %d hours Setiap %d hari @@ -319,11 +313,9 @@ Kembali Pengaturan GnuCash Selamat datang di GnuCash - Sebelum Anda menyelam, \nlmari kita siapkan beberapa hal yang pertama \n\n Untuk melanjutkan, tekan Next - Editor split -  - Periksa apakah semua split memiliki jumlah yang valid sebelum menyimpannya! - ! + Before you dive in, \nlet\'s setup a few things first\n\nTo continue, press Next + Split Editor + Check that all splits have valid amounts before saving! Ekspresi yang tidak valid! Transaksi berulang yang dijadwalkan Transfer Dana @@ -332,53 +324,46 @@ Periode: Dari: Ke: - Berikan nilai tukar atau nilai tukar yang dikonversi untuk mentransfer dana -  - Kurs -  - Ambil kutipan -  - Jumlah yang Dikonversi -  - Lembar -  - Biaya untuk 3 bulan terakhir -  - Total aset - Jumlah kewajiban - Kekayaan Bersih - Aset - Kewajiban - Ekuitas - Pindah ke: - Kelompok dengan - Bulan - Kuartal - Tahun - Neraca keuangan -  - Jumlah: - Komunitas Google+ - Menerjemahkan GnuCash - Berbagi ide-ide, mendiskusikan perubahan atau melaporkan masalah - Menerjemahkan atau bukti dibaca pada CrowdIn - Tidak ada aplikasi yang kompatibel untuk menerima transaksi diekspor! - Bergerak… - Duplikat - Arus Tunai - Anggaran - Mengaktifkan tampilan kompak - Memungkinkan untuk selalu menggunakan tampilan kompak untuk daftar transaksi - Edit nilai tukar - misalnya 1 %1$s = x.xx %2$s - Nominal tidak sah + Provide either the converted amount or exchange rate in order to transfer funds + Exchange rate + Fetch quote + Converted Amount + Sheet + Expenses for last 3 months + Total Assets + Total Liabilities + Net Worth + Assets + Liabilities + Equity + Move to: + Group By + Month + Quarter + Year + Balance Sheet + Total: + Google+ Community + Translate GnuCash + Share ideas, discuss changes or report problems + Translate or proof-read on CrowdIn + No compatible apps to receive the exported transactions! + Move… + Duplicate + Cash Flow + Budgets + Enable compact view + Enable to always use compact view for transactions list + Invalid exchange rate + e.g. 1 %1$s = x.xx %2$s + Invalid amount - Bulan berjalan - 3 bulan terakhir - 6 bulan terakhir - 12 bulan terakhir - Sepanjang waktu - Rentang ubahsuai… + Current month + Last 3 months + Last 6 months + Last 12 months + All time + Custom range… 1 @@ -402,61 +387,55 @@ WXYZ 0 + - Mengelola buku - Mengelola buku… - Memilih bagian dari tabel untuk melihat rincian - Konfirmasi penghapusan - Semua account dan transaksi dalam buku ini akan dihapus! - Menghapus buku - Terakhir Diekspor Di: - Mengaktifkan sinkronisasi - Buku baru - Transaksi dipilih telah ada perpecahan dan tidak dapat dibuka - perpecahan %1$d - di %1$s + Manage Books + Manage Books… + Select any part of the chart to view details + Confirm delete Book + All accounts and transactions in this book will be deleted! + Delete Book + Last Exported: + Enable Sync + New Book + The selected transaction has no splits and cannot be opened + %1$d splits + in %1$s - %d sub-akun + %d accounts - transaksi%d + %d transactions - PENGELUARAN - PENDAPATAN + EXPENSE + INCOME - Hubungakan ke Google play - Tidak dapat tersambung ke server - Masukkan jumlah - layanan Eksternal - Diperbarui transaksi berkala jadwal - Sejak - Sepanjang waktu - Merekomendasikan di Play Store - sampai %1$s - di %1$s - untuk %1$d kali - Tampilan Sederhana - Buku %1$d - tdk pernah - Mengubah nama buku - Ubah Nama - Ubah Nama - Pilih file backup - Pilih file untuk backup otomatis -  - Yakin memulihkan dari backup - Sebuah buku baru akan dibuka dengan isi backup ini. Apakah Anda ingin melanjutkan? - ? - Mengembalikan - Backup tidak ditemukan - Tidak ada file cadangan yang ada untuk dipulihkan -  + Connected to Google Drive + Unable to connect to Google Drive + Please enter an amount to split + external service + Updated transaction recurring schedule + Since + All time + Recommend in Play Store + until %1$s + on %1$s + for %1$d times + Compact View + Book %1$d + never + Rename Book + Rename + Rename + Select backup file + Select a file for automatic backups + Confirm restore from backup + A new book will be opened with the contents of this backup. Do you wish to proceed? + Restore + No backups found + There are no existing backup files to restore from - gnucash_android_backup.gnca -  - Pilih tujuan setelah ekspor selesai -  - Ekspor ke folder \'/ Apps / GnuCash Android /\' di Dropbox -  - Preferensi + gnucash_android_backup.gnca + Select the destination after export is complete + Export to \'/Apps/GnuCash Android/\' folder on Dropbox + Preferences diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 37681f758..2f3bfca4f 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -138,7 +138,7 @@ Todas as transações apagadas com sucesso! Importando contas Transações - Subcontas + Sub-Contas Procurar Formato de Exportação padrão Formato de arquivo a ser usado por padrão ao exportar transações @@ -151,8 +151,8 @@ Conta não editável Conta para transferências padrão - %d subconta - %d subconta + %d sub-conta + %d sub-contas DINHEIRO @@ -180,9 +180,9 @@ Cor de conta & Tipo - Apagar subcontas + Apagar sub-contas Recentes - Favoritas + Favoritos Todas Cria uma estrutura de contas GnuCash padrão Cria contas padrão @@ -222,8 +222,8 @@ Gráfico de Linhas Gráfico de Barras Preferências de relatórios - Cor da conta nos relatórios - Use cor da conta no gráfico de barras/linhas + Côr da conta nos relatórios + Use côr da conta no gráfico de barras/linhas Ordenar por tamanho Alterna visibilidade da legenda Alterna visibilidade das etiquetas @@ -428,7 +428,7 @@ Neste processo não serão recolhidas informações do utilizador! Agenda recorrente de transação atualizada Desde Desde o início - Recomendar na Play Store + Recomendado na Play Store até %1$s em %1$s por %1$d vezes diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index eedcb017a..fed5df41b 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -428,7 +428,7 @@ Neste processo não serão recolhidas informações do utilizador! Transação atualizada agendamento recorrente Desde Todo o tempo - Recomendar na Play Store + Recomendado na Play Store desde%1$s na %1$s por %1$d vezes diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 1b625cc34..9ba4502df 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -154,7 +154,6 @@ %d дочерний счёт %d шт. дочерних счетов - %d sub-accounts %d шт. дочерних счетов @@ -225,7 +224,7 @@ График Гистограмма Настройки отчётов - Цвет счёта в отчётах + Цвет счёта в отчётых Использовать цвет счёта в отчётах Отсортировать по размеру Показать легенду @@ -278,31 +277,26 @@ Каждый час Каждые %d часа - Every %d hours Каждые %d часов Ежедневно Каждые %d дня - Every %d days Каждые %d дней Еженедельно Каждые %d недели - Every %d weeks Каждые %d недель Ежемесячно Каждые %d месяца - Every %d months Каждые %d месяцев Ежегодно Каждые %d года - Every %d years Каждые %d лет Записывать отказы программы @@ -335,7 +329,7 @@ Назад Настройка GnuCash Добро пожаловать в GnuCash - Прежде, чем вы начнёте,\nдавайте настроим некоторые вещи.\n\nДля продолжения нажмите «Далее». + Прежде, чем вы начныте,\nдавайте настроим некоторые вещи.\n\nДля продолжения нажмите «Далее». Редактор разбиения Проверьте, что все части корректно распределены перед сохранением! Неверное выражение! @@ -347,7 +341,7 @@ С: До: Заполните или обменянную сумму или курс обмена - Курс обмена + EКурс обмена Получить котировки Обмененная сумма Сводка @@ -424,13 +418,11 @@ %d счета %d счета - %d accounts %d счетов %d транзакция %d транзакции - %d transactions %d транзакций @@ -457,7 +449,7 @@ Выберите файл резервной копии Выберите файл для автоматического резервного копирования Подтвердите восстановление из резервной копии - Новая книга будет открыта с содержанием этой резервной копии. Хотите продолжить? + Новая книга будет открыта с содержанием этой резервной копии. Вы хотите продолжить? Восстановить Резервные копии не найдены Нет существующих файлов резервных копий для восстановления diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 71645393c..be8308fd5 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -20,7 +20,7 @@ Redigera konto Lägg till en transaktion till ett konto Visa kontodetaljer - Inga konton att visa + Det finns inga konton att visa Kontonamn Avbryt Spara @@ -33,7 +33,7 @@ Beskrivning Belopp Lägg till transaktion - Inga transaktioner att visa + Det finns inga transaktioner att visa DEBIT KREDIT Konton @@ -79,7 +79,7 @@ Visa konto Dölja kontosaldo i widget Skapa konton - Inga konton finns i GnuCash.\nSkapa ett konto innan du lägger till en gränssnittskomponent + Inga konton finns i GnuCash.\nSkapa ett konto innan du lägger till en widget Licens Apache License v2.0. Klicka för Detaljer Allmänna inställningar @@ -293,7 +293,7 @@ Ange din gamla lösenkod Ange din nya lösenkod Exporter - Inga schemalagda exporter att visa + Ingen schemalagda exporter att Visa Skapa exportschema Exporterades till: %1$s Förklaringen är för lång @@ -391,8 +391,8 @@ WXYZ 0 + - Hantera bokföringar - Hantera bokföringar… + Hantera böcker + Hantera böcker… Välj någon del av diagrammet för att visa detaljer Bekräfta radera bokföring Alla konton och transaktioner i denna bokföring kommer att raderas! @@ -400,7 +400,7 @@ Senast exporterad: Aktivera synkronisering Ny bokföring - Valda transaktionen har inga delningar och kan inte öppnas + Valda transaktionen har ingen delningar och kan inte öppnas %1$d delar i %1$s diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 8b502ea05..70dd0e16b 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -18,9 +18,9 @@ 新增科目 編輯科目 - 在科目中新增交易 + 给科目添加交易 檢視帳戶詳細資訊 - 沒有科目可顯示 + 没有要显示的科目 科目名稱 取消 存檔 @@ -59,7 +59,7 @@ 另存為… Dropbox ownCloud - 傳送到… + Send to… 移動 移動 %1$d 交易 @@ -78,7 +78,7 @@ 建立會計科目 顯示科目名字 小工具中隱藏帳戶餘額 - 建立科目 + 创建科目 GnuCash裡還没有會計科目信息。\n使用小部件前需要添加會計科目 授權許可 Apache License v2.0,點擊查看詳细(將打開網頁)。 @@ -125,7 +125,7 @@ 知道了 輸入金額才能保存交易 - 匯入GnuCash科目時發生錯誤。 + 匯入GnuCash科目时發生錯誤。 GnuCash科目資料匯入完成。 匯入從GnuCash桌面版匯出的科目設置 匯入GnuCash科目 @@ -177,7 +177,7 @@ XML - 選擇顏色 + 选择一种颜色 科目顏色和類型 @@ -187,7 +187,8 @@ 所有 建立通用的科目結構 建立預設科目 - 這將用預設科目來建立新的帳簿\n\n目前擁有的科目與交易不會受影響 + 将会创建新的账簿附带默认的科目 +现在这个账簿不会受到影响 交易 選擇儲存的位置 描述 @@ -196,7 +197,7 @@ 提款 存款 付款 - 費用 + 费用 減少 增加 收入 @@ -220,10 +221,10 @@ 報表 圓形圖 折線圖 - 長條圖 + 橫條圖 報表設置 用不同顏色区分科目 - 在圓餅圖中使用科目的顏色 + 在饼图中使用科目的颜色 按數量排序 顯示圖例 顯示標籤 @@ -266,20 +267,20 @@ 密碼 ownCloud https:// - 沒有找到 ownCloud 伺服器 + 伺服器找不到。 帳號/密碼無效 無效字元: \\ < > : \" | * ? OC server OK OC username/password OK Dir name OK - 每 %d 個小時 + Every %d hours 每 %d 天 - 每 %d 週 + 每 %d 周 每 %d 月 @@ -311,13 +312,13 @@ No user-identifiable information will be collected as part of this process! 選擇幣種 回饋選項 建立預設科目 - 匯入科目 + 汇入科目 稍后处理 其他... 自動發送故障報告 禁用崩潰報告 後退 - 設定GnuCash + 设置GnuCash 歡迎來到GnuCash 在使用之前,需 \n要设置几个参数\n\n请点击“下一步”繼續 拆分交易 @@ -343,7 +344,7 @@ No user-identifiable information will be collected as part of this process! 負債 財產淨值 移動至 - 分組方式 + 分组方式 季度 @@ -352,13 +353,13 @@ No user-identifiable information will be collected as part of this process! Google+ 社群 翻譯GnuCash 在Google+上提交问题和建议 - 在CrowdIn上協助翻譯或校對GnuCash + 帮忙翻譯或校對( CrowdIn) 没有合适的应用接收汇出的文档 移動... 複製 現金流 預算 - 啟用緊湊視圖 + 啟用紧凑視圖 交易清單總是啟用緊湊視圖 匯率不正確 例如 1 %1$s = x.xx %2$s @@ -393,23 +394,23 @@ No user-identifiable information will be collected as part of this process! WXYZ 0 + - 管理帳簿 - 管理帳簿… + 管理帐簿 + 管理帐簿 選擇該圖表以查看詳細資訊的任何部分 確認删除 - 帳簿中所有科目和交易都將被刪除 ! - 删除帳簿 + 帐簿中所有科目和交易都將被刪除 ! + 删除帐簿 最後匯出︰ 啟用同步 新建帐簿 选择的交易没有拆分 %1$d 项分割 - 於 %1$s + 于 %1$s - %d 個科目 + %d个科目 - %d 個交易 + %d个交易 費用 @@ -419,29 +420,29 @@ No user-identifiable information will be collected as part of this process! 無法連線到伺服器 請輸入要拆分的金額 外部服務 - 排程交易已經更新 + 排程交易已经更新 自從 全部時間 在 Play Store 推薦 直到%1$s 在%1$s - %1$d 次 - 緊湊視圖 - 帳簿 %1$d - 從未 - 重新命名帳簿 - 重新命名 - 重新命名 - 選擇備份檔 - 選擇自動備份時用的檔案 - 確認恢復備份 - 將以這個備份的內容新建一本帳簿。確定要繼續? - 恢復 - 沒有找到備份 - 沒有能恢復的備份 + for %1$d times + 紧凑视图 + 账簿 %1$d + never + Rename Book + Rename + Rename + Select backup file + Select a file for automatic backups + Confirm restore from backup + A new book will be opened with the contents of this backup. Do you wish to proceed? + Restore + No backups found + There are no existing backup files to restore from - gnucash_android_備份.gnca - 匯出後再選擇目的地 - 匯出到 Dropbox 上的 \'/Apps/GnuCash Android/\' 資料夾 - 偏好設定 + gnucash_android_backup.gnca + Select the destination after export is complete + Export to \'/Apps/GnuCash Android/\' folder on Dropbox + Preferences diff --git a/app/src/main/res/xml/filepaths.xml b/app/src/main/res/xml/filepaths.xml index c4435e624..3c3463fc5 100644 --- a/app/src/main/res/xml/filepaths.xml +++ b/app/src/main/res/xml/filepaths.xml @@ -14,8 +14,9 @@ See the License for the specific language governing permissions and limitations under the License. --> - + + \ No newline at end of file diff --git a/app/src/main/res/xml/fragment_about_preferences.xml b/app/src/main/res/xml/fragment_about_preferences.xml index 47e375b21..19e4bbb63 100644 --- a/app/src/main/res/xml/fragment_about_preferences.xml +++ b/app/src/main/res/xml/fragment_about_preferences.xml @@ -18,11 +18,6 @@ - - -