Merge branch 'release/1.7.0'

pull/273/head v1.7.0
Alinson S. Xavier 9 years ago
commit 692fe3218f

1
.gitignore vendored

@ -20,3 +20,4 @@ captures/
docs/ docs/
gen/ gen/
local.properties local.properties
crowdin.yaml

@ -1,5 +1,21 @@
# Changelog # Changelog
### 1.7.0 (Mar 31, 2017)
* Sort habits automatically
* Allow swiping the header to see previous days
* Import backups directly from Google Drive or Dropbox
* Refresh data automatically at midnight
* Other minor bug fixes and enhancements
### 1.6.2 (Oct 13, 2016)
* Fix crash on Android 4.1
### 1.6.1 (Oct 10, 2016)
* Fix a crash at startup when database is corrupted
### 1.6.0 (Oct 10, 2016) ### 1.6.0 (Oct 10, 2016)
* Add option to make notifications sticky * Add option to make notifications sticky

@ -4,13 +4,13 @@ apply plugin: 'me.tatarka.retrolambda'
apply plugin: 'jacoco' apply plugin: 'jacoco'
android { android {
compileSdkVersion 23 compileSdkVersion 25
buildToolsVersion "23.0.3" buildToolsVersion "25.0.2"
defaultConfig { defaultConfig {
applicationId "org.isoron.uhabits" applicationId "org.isoron.uhabits"
minSdkVersion 15 minSdkVersion 15
targetSdkVersion 23 targetSdkVersion 25
buildConfigField "Integer", "databaseVersion", "15" buildConfigField "Integer", "databaseVersion", "15"
buildConfigField "String", "databaseFilename", "\"uhabits.db\"" buildConfigField "String", "databaseFilename", "\"uhabits.db\""
@ -53,7 +53,7 @@ dependencies {
androidTestApt 'com.google.dagger:dagger-compiler:2.2' androidTestApt 'com.google.dagger:dagger-compiler:2.2'
androidTestCompile 'com.android.support:support-annotations:23.3.0' androidTestCompile 'com.android.support:support-annotations:25.3.0'
androidTestCompile 'com.android.support.test:rules:0.5' androidTestCompile 'com.android.support.test:rules:0.5'
androidTestCompile 'com.android.support.test:runner:0.5' androidTestCompile 'com.android.support.test:runner:0.5'
androidTestCompile 'com.google.auto.factory:auto-factory:1.0-beta3' androidTestCompile 'com.google.auto.factory:auto-factory:1.0-beta3'
@ -64,10 +64,10 @@ dependencies {
apt 'com.google.dagger:dagger-compiler:2.2' apt 'com.google.dagger:dagger-compiler:2.2'
apt 'com.jakewharton:butterknife-compiler:8.0.1' apt 'com.jakewharton:butterknife-compiler:8.0.1'
compile 'com.android.support:appcompat-v7:23.3.0' compile 'com.android.support:appcompat-v7:25.3.0'
compile 'com.android.support:design:23.3.0' compile 'com.android.support:design:25.3.0'
compile 'com.android.support:preference-v14:23.3.0' compile 'com.android.support:preference-v14:25.3.0'
compile 'com.android.support:support-v4:23.3.0' compile 'com.android.support:support-v4:25.3.0'
compile 'com.getpebble:pebblekit:3.0.0' compile 'com.getpebble:pebblekit:3.0.0'
compile 'com.github.paolorotolo:appintro:3.4.0' compile 'com.github.paolorotolo:appintro:3.4.0'
compile 'com.google.auto.factory:auto-factory:1.0-beta3' compile 'com.google.auto.factory:auto-factory:1.0-beta3'

@ -63,6 +63,8 @@ public class BaseAndroidTest
protected AndroidTestComponent component; protected AndroidTestComponent component;
protected ModelFactory modelFactory;
@Before @Before
public void setUp() public void setUp()
{ {
@ -89,7 +91,7 @@ public class BaseAndroidTest
taskRunner = component.getTaskRunner(); taskRunner = component.getTaskRunner();
logger = component.getHabitsLogger(); logger = component.getHabitsLogger();
ModelFactory modelFactory = component.getModelFactory(); modelFactory = component.getModelFactory();
fixtures = new HabitFixtures(modelFactory, habitList); fixtures = new HabitFixtures(modelFactory, habitList);
latch = new CountDownLatch(1); latch = new CountDownLatch(1);

@ -225,7 +225,7 @@ public class BaseViewTest extends BaseAndroidTest
throws IOException throws IOException
{ {
File dir = FileUtils.getSDCardDir("test-screenshots"); File dir = FileUtils.getSDCardDir("test-screenshots");
if (dir == null) dir = FileUtils.getFilesDir("test-screenshots"); if (dir == null) dir = FileUtils.getFilesDir(targetContext,"test-screenshots");
if (dir == null) throw new RuntimeException( if (dir == null) throw new RuntimeException(
"Could not find suitable dir for screenshots"); "Could not find suitable dir for screenshots");

@ -39,12 +39,18 @@ public class HabitFixtures
} }
public Habit createEmptyHabit() public Habit createEmptyHabit()
{
return createEmptyHabit(null);
}
public Habit createEmptyHabit(Long id)
{ {
Habit habit = modelFactory.buildHabit(); Habit habit = modelFactory.buildHabit();
habit.setName("Meditate"); habit.setName("Meditate");
habit.setDescription("Did you meditate this morning?"); habit.setDescription("Did you meditate this morning?");
habit.setColor(3); habit.setColor(3);
habit.setFrequency(Frequency.DAILY); habit.setFrequency(Frequency.DAILY);
habit.setId(id);
habitList.add(habit); habitList.add(habit);
return habit; return habit;
} }

@ -60,6 +60,7 @@ public class CheckmarkPanelViewTest extends BaseViewTest
view = new CheckmarkPanelView(targetContext); view = new CheckmarkPanelView(targetContext);
view.setHabit(habit); view.setHabit(habit);
view.setCheckmarkValues(checkmarks); view.setCheckmarkValues(checkmarks);
view.setButtonCount(4);
view.setColor(ColorUtils.getAndroidTestColor(7)); view.setColor(ColorUtils.getAndroidTestColor(7));
measureView(view, dpToPixels(200), dpToPixels(200)); measureView(view, dpToPixels(200), dpToPixels(200));

@ -40,8 +40,6 @@ import static org.junit.Assert.*;
@MediumTest @MediumTest
public class ImportTest extends BaseAndroidTest public class ImportTest extends BaseAndroidTest
{ {
private File baseDir;
private Context context; private Context context;
@Override @Override
@ -50,11 +48,8 @@ public class ImportTest extends BaseAndroidTest
{ {
super.setUp(); super.setUp();
DateUtils.setFixedLocalTime(null); DateUtils.setFixedLocalTime(null);
fixtures.purgeHabits(habitList); fixtures.purgeHabits(habitList);
context = InstrumentationRegistry.getInstrumentation().getContext(); context = InstrumentationRegistry.getInstrumentation().getContext();
baseDir = FileUtils.getFilesDir("Backups");
if (baseDir == null) fail("baseDir should not be null");
} }
@Test @Test
@ -149,8 +144,7 @@ public class ImportTest extends BaseAndroidTest
private void importFromFile(String assetFilename) throws IOException private void importFromFile(String assetFilename) throws IOException
{ {
File file = File file = File.createTempFile("asset", "");
new File(String.format("%s/%s", baseDir.getPath(), assetFilename));
copyAssetToFile(assetFilename, file); copyAssetToFile(assetFilename, file);
assertTrue(file.exists()); assertTrue(file.exists());
assertTrue(file.canRead()); assertTrue(file.canRead());
@ -159,5 +153,7 @@ public class ImportTest extends BaseAndroidTest
assertThat(importer.canHandle(file), is(true)); assertThat(importer.canHandle(file), is(true));
importer.importHabitsFromFile(file); importer.importHabitsFromFile(file);
file.delete();
} }
} }

@ -0,0 +1,240 @@
/*
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
*
* This file is part of Loop Habit Tracker.
*
* Loop Habit Tracker is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Loop Habit Tracker is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.isoron.uhabits.models;
import android.support.test.runner.*;
import android.test.suitebuilder.annotation.*;
import org.hamcrest.*;
import org.isoron.uhabits.*;
import org.junit.*;
import org.junit.runner.*;
import java.io.*;
import java.util.*;
import static junit.framework.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.isoron.uhabits.models.HabitList.Order.*;
@SuppressWarnings("JavaDoc")
@RunWith(AndroidJUnit4.class)
@MediumTest
public class HabitListTest extends BaseAndroidTest
{
private ArrayList<Habit> habitsArray;
private HabitList activeHabits;
private HabitList reminderHabits;
@Override
public void setUp()
{
super.setUp();
habitList.removeAll();
habitsArray = new ArrayList<>();
for (int i = 0; i < 10; i++)
{
Habit habit = fixtures.createEmptyHabit((long) i);
habitsArray.add(habit);
if (i % 3 == 0)
habit.setReminder(new Reminder(8, 30, WeekdayList.EVERY_DAY));
habitList.update(habit);
}
habitsArray.get(0).setArchived(true);
habitsArray.get(1).setArchived(true);
habitsArray.get(4).setArchived(true);
habitsArray.get(7).setArchived(true);
activeHabits = habitList.getFiltered(new HabitMatcherBuilder().build());
reminderHabits = habitList.getFiltered(new HabitMatcherBuilder()
.setArchivedAllowed(true)
.setReminderRequired(true)
.build());
}
@Test
public void test_size()
{
assertThat(habitList.size(), equalTo(10));
}
@Test
public void test_countActive()
{
assertThat(activeHabits.size(), equalTo(6));
}
@Test
public void test_getByPosition()
{
assertThat(habitList.getByPosition(0), equalTo(habitsArray.get(0)));
assertThat(habitList.getByPosition(3), equalTo(habitsArray.get(3)));
assertThat(habitList.getByPosition(9), equalTo(habitsArray.get(9)));
assertThat(activeHabits.getByPosition(0), equalTo(habitsArray.get(2)));
}
@Test
public void test_getHabitsWithReminder()
{
assertThat(reminderHabits.size(), equalTo(4));
assertThat(reminderHabits.getByPosition(1),
equalTo(habitsArray.get(3)));
}
@Test
public void test_get_withInvalidId()
{
assertThat(habitList.getById(100L), is(nullValue()));
}
@Test
public void test_get_withValidId()
{
Habit habit1 = habitsArray.get(0);
Habit habit2 = habitList.getById(habit1.getId());
assertThat(habit1, equalTo(habit2));
}
@Test
public void test_reorder()
{
int operations[][] = {
{ 5, 2 }, { 3, 7 }, { 4, 4 }, { 3, 2 }
};
int expectedPosition[][] = {
{ 0, 1, 3, 4, 5, 2, 6, 7, 8, 9 },
{ 0, 1, 7, 3, 4, 2, 5, 6, 8, 9 },
{ 0, 1, 7, 3, 4, 2, 5, 6, 8, 9 },
{ 0, 1, 7, 2, 4, 3, 5, 6, 8, 9 },
};
for (int i = 0; i < operations.length; i++)
{
int from = operations[i][0];
int to = operations[i][1];
Habit fromHabit = habitList.getByPosition(from);
Habit toHabit = habitList.getByPosition(to);
habitList.reorder(fromHabit, toHabit);
int actualPositions[] = new int[10];
for (int j = 0; j < 10; j++)
{
Habit h = habitList.getById(j);
assertNotNull(h);
actualPositions[j] = habitList.indexOf(h);
}
assertThat(actualPositions, equalTo(expectedPosition[i]));
}
}
@Test
public void test_writeCSV() throws IOException
{
habitList.removeAll();
Habit h1 = fixtures.createEmptyHabit();
h1.setName("Meditate");
h1.setDescription("Did you meditate this morning?");
h1.setFrequency(Frequency.DAILY);
h1.setColor(3);
Habit h2 = fixtures.createEmptyHabit();
h2.setName("Wake up early");
h2.setDescription("Did you wake up before 6am?");
h2.setFrequency(new Frequency(2, 3));
h2.setColor(5);
habitList.update(h1);
habitList.update(h2);
String expectedCSV =
"Position,Name,Description,NumRepetitions,Interval,Color\n" +
"001,Meditate,Did you meditate this morning?,1,1,#AFB42B\n" +
"002,Wake up early,Did you wake up before 6am?,2,3,#00897B\n";
StringWriter writer = new StringWriter();
habitList.writeCSV(writer);
MatcherAssert.assertThat(writer.toString(), equalTo(expectedCSV));
}
@Test
public void test_ordering()
{
habitList.removeAll();
Habit h3 = fixtures.createEmptyHabit();
h3.setName("C Habit");
h3.setColor(0);
habitList.update(h3);
Habit h1 = fixtures.createEmptyHabit();
h1.setName("A Habit");
h1.setColor(2);
habitList.update(h1);
Habit h4 = fixtures.createEmptyHabit();
h4.setName("D Habit");
h4.setColor(1);
habitList.update(h4);
Habit h2 = fixtures.createEmptyHabit();
h2.setName("B Habit");
h2.setColor(2);
habitList.update(h2);
habitList.setOrder(BY_POSITION);
assertThat(habitList.getByPosition(0), equalTo(h3));
assertThat(habitList.getByPosition(1), equalTo(h1));
assertThat(habitList.getByPosition(2), equalTo(h4));
assertThat(habitList.getByPosition(3), equalTo(h2));
habitList.setOrder(BY_NAME);
assertThat(habitList.getByPosition(0), equalTo(h1));
assertThat(habitList.getByPosition(1), equalTo(h2));
assertThat(habitList.getByPosition(2), equalTo(h3));
assertThat(habitList.getByPosition(3), equalTo(h4));
habitList.remove(h1);
habitList.add(h1);
assertThat(habitList.getByPosition(0), equalTo(h1));
habitList.setOrder(BY_COLOR);
assertThat(habitList.getByPosition(0), equalTo(h3));
assertThat(habitList.getByPosition(1), equalTo(h4));
assertThat(habitList.getByPosition(2), equalTo(h1));
assertThat(habitList.getByPosition(3), equalTo(h2));
}
}

@ -125,17 +125,6 @@ public class SQLiteHabitListTest extends BaseAndroidTest
assertThat(habits.get(3).getName(), equalTo("habit 3")); assertThat(habits.get(3).getName(), equalTo("habit 3"));
} }
// @Test
// public void testGetAll_withoutArchived()
// {
// List<Habit> habits = habitList.toList();
// assertThat(habits.size(), equalTo(5));
// assertThat(habits.get(3).getName(), equalTo("habit 7"));
//
// List<Habit> another = habitList.toList();
// assertThat(habits, equalTo(another));
// }
@Test @Test
public void testGetById() public void testGetById()
{ {
@ -178,45 +167,6 @@ public class SQLiteHabitListTest extends BaseAndroidTest
assertThat(habitList.indexOf(h2), equalTo(-1)); assertThat(habitList.indexOf(h2), equalTo(-1));
} }
@Test
public void test_reorder()
{
// Same as HabitListTest.java
// TODO: remove duplication
int operations[][] = {
{5, 2}, {3, 7}, {4, 4}, {3, 2}
};
int expectedPosition[][] = {
{0, 1, 3, 4, 5, 2, 6, 7, 8, 9},
{0, 1, 7, 3, 4, 2, 5, 6, 8, 9},
{0, 1, 7, 3, 4, 2, 5, 6, 8, 9},
{0, 1, 7, 2, 4, 3, 5, 6, 8, 9},
};
for (int i = 0; i < operations.length; i++)
{
int from = operations[i][0];
int to = operations[i][1];
Habit fromHabit = habitList.getByPosition(from);
Habit toHabit = habitList.getByPosition(to);
habitList.reorder(fromHabit, toHabit);
int actualPositions[] = new int[10];
for (int j = 0; j < 10; j++)
{
Habit h = habitList.getById(j);
assertNotNull(h);
actualPositions[j] = habitList.indexOf(h);
}
assertThat(actualPositions, equalTo(expectedPosition[i]));
}
}
private HabitRecord getRecord(long id) private HabitRecord getRecord(long id)
{ {
return new Select() return new Select()

@ -56,7 +56,7 @@ public class ExportCSVTaskTest extends BaseAndroidTest
for (Habit h : habitList) selected.add(h); for (Habit h : habitList) selected.add(h);
taskRunner.execute( taskRunner.execute(
new ExportCSVTask(habitList, selected, archiveFilename -> { new ExportCSVTask(targetContext,habitList, selected, archiveFilename -> {
assertThat(archiveFilename, is(not(nullValue()))); assertThat(archiveFilename, is(not(nullValue())));
File f = new File(archiveFilename); File f = new File(archiveFilename);
assertTrue(f.exists()); assertTrue(f.exists());

@ -46,7 +46,7 @@ public class ExportDBTaskTest extends BaseAndroidTest
@Test @Test
public void testExportCSV() throws Throwable public void testExportCSV() throws Throwable
{ {
ExportDBTask task = new ExportDBTask(filename -> { ExportDBTask task = new ExportDBTask(targetContext, filename -> {
assertThat(filename, is(not(nullValue()))); assertThat(filename, is(not(nullValue())));
File f = new File(filename); File f = new File(filename);

@ -21,8 +21,8 @@
<manifest <manifest
package="org.isoron.uhabits" package="org.isoron.uhabits"
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="25" android:versionCode="27"
android:versionName="1.6.2"> android:versionName="1.7.0">
<uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.VIBRATE"/>
@ -223,5 +223,15 @@
</intent-filter> </intent-filter>
</receiver> </receiver>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="org.isoron.uhabits"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
</application> </application>
</manifest> </manifest>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

@ -38,7 +38,7 @@ import java.io.*;
*/ */
public class HabitsApplication extends Application public class HabitsApplication extends Application
{ {
private static Context context; private Context context;
private static AppComponent component; private static AppComponent component;
@ -58,26 +58,14 @@ public class HabitsApplication extends Application
HabitsApplication.component = component; HabitsApplication.component = component;
} }
@NonNull
@Deprecated
public static Context getContext()
{
if (context == null) throw new RuntimeException("context is null");
return context;
}
public static boolean isTestMode() public static boolean isTestMode()
{ {
try try
{ {
if (context != null) Class.forName ("org.isoron.uhabits.BaseAndroidTest");
{
String testClass = "org.isoron.uhabits.BaseAndroidTest";
context.getClassLoader().loadClass(testClass);
}
return true; return true;
} }
catch (final Exception e) catch (final ClassNotFoundException e)
{ {
return false; return false;
} }
@ -87,7 +75,7 @@ public class HabitsApplication extends Application
public void onCreate() public void onCreate()
{ {
super.onCreate(); super.onCreate();
HabitsApplication.context = this; context = this;
component = DaggerAppComponent component = DaggerAppComponent
.builder() .builder()
@ -96,11 +84,11 @@ public class HabitsApplication extends Application
if (isTestMode()) if (isTestMode())
{ {
File db = DatabaseUtils.getDatabaseFile(); File db = DatabaseUtils.getDatabaseFile(context);
if (db.exists()) db.delete(); if (db.exists()) db.delete();
} }
DatabaseUtils.initializeActiveAndroid(); DatabaseUtils.initializeActiveAndroid(context);
widgetUpdater = component.getWidgetUpdater(); widgetUpdater = component.getWidgetUpdater();
widgetUpdater.startListening(); widgetUpdater.startListening();
@ -125,7 +113,7 @@ public class HabitsApplication extends Application
@Override @Override
public void onTerminate() public void onTerminate()
{ {
HabitsApplication.context = null; context = null;
ActiveAndroid.dispose(); ActiveAndroid.dispose();
reminderScheduler.stopListening(); reminderScheduler.stopListening();

@ -40,6 +40,7 @@ import java.io.*;
import static android.os.Build.VERSION.*; import static android.os.Build.VERSION.*;
import static android.os.Build.VERSION_CODES.*; import static android.os.Build.VERSION_CODES.*;
import static android.support.v4.content.FileProvider.*;
/** /**
* Base class for all screens in the application. * Base class for all screens in the application.
@ -50,6 +51,8 @@ import static android.os.Build.VERSION_CODES.*;
*/ */
public class BaseScreen public class BaseScreen
{ {
public static final int REQUEST_CREATE_DOCUMENT = 1;
protected BaseActivity activity; protected BaseActivity activity;
@Nullable @Nullable
@ -230,11 +233,14 @@ public class BaseScreen
public void showSendFileScreen(@NonNull String archiveFilename) public void showSendFileScreen(@NonNull String archiveFilename)
{ {
File file = new File(archiveFilename);
Uri fileUri = getUriForFile(activity, "org.isoron.uhabits", file);
Intent intent = new Intent(); Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND); intent.setAction(Intent.ACTION_SEND);
intent.setType("application/zip"); intent.setType("application/zip");
intent.putExtra(Intent.EXTRA_STREAM, intent.putExtra(Intent.EXTRA_STREAM, fileUri);
Uri.fromFile(new File(archiveFilename))); intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
activity.startActivity(intent); activity.startActivity(intent);
} }

@ -70,7 +70,7 @@ public class BaseSystem
if (context == null) throw new RuntimeException( if (context == null) throw new RuntimeException(
"application context should not be null"); "application context should not be null");
File dir = FileUtils.getFilesDir("Logs"); File dir = FileUtils.getFilesDir(context, "Logs");
if (dir == null) throw new IOException("log dir should not be null"); if (dir == null) throw new IOException("log dir should not be null");
File logFile = File logFile =

@ -25,7 +25,7 @@ import android.support.v7.widget.Toolbar;
import android.widget.*; import android.widget.*;
import org.isoron.uhabits.BuildConfig; import org.isoron.uhabits.BuildConfig;
import org.isoron.uhabits.*; import org.isoron.uhabits.R;
import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.*;
import org.isoron.uhabits.intents.*; import org.isoron.uhabits.intents.*;
import org.isoron.uhabits.utils.*; import org.isoron.uhabits.utils.*;
@ -94,6 +94,13 @@ public class AboutRootView extends BaseRootView
getContext().startActivity(intent); getContext().startActivity(intent);
} }
@OnClick(R.id.tvTranslate)
public void onClickTranslate()
{
Intent intent = intents.helpTranslate(getContext());
getContext().startActivity(intent);
}
@OnClick(R.id.tvRate) @OnClick(R.id.tvRate)
public void onClickRate() public void onClickRate()
{ {

@ -24,7 +24,7 @@ import android.support.v7.app.*;
import com.google.auto.factory.*; import com.google.auto.factory.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.R;
import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.*;
import butterknife.*; import butterknife.*;

@ -78,6 +78,8 @@ public class HistoryEditorDialog extends AppCompatDialogFragment
{ {
long id = savedInstanceState.getLong("habit", -1); long id = savedInstanceState.getLong("habit", -1);
if (id > 0) this.habit = habitList.getById(id); if (id > 0) this.habit = habitList.getById(id);
historyChart.onRestoreInstanceState(
savedInstanceState.getParcelable("historyChart"));
} }
int padding = int padding =
@ -129,6 +131,7 @@ public class HistoryEditorDialog extends AppCompatDialogFragment
public void onSaveInstanceState(Bundle outState) public void onSaveInstanceState(Bundle outState)
{ {
outState.putLong("habit", habit.getId()); outState.putLong("habit", habit.getId());
outState.putParcelable("historyChart", historyChart.onSaveInstanceState());
} }
public void setController(@NonNull Controller controller) public void setController(@NonNull Controller controller)

@ -0,0 +1,63 @@
/*
* Copyright (C) 2017 Álinson Santos Xavier <isoron@gmail.com>
*
* This file is part of Loop Habit Tracker.
*
* Loop Habit Tracker is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Loop Habit Tracker is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.isoron.uhabits.activities.common.views;
import android.os.*;
import android.view.*;
public class BundleSavedState extends View.BaseSavedState
{
public static final Parcelable.Creator<BundleSavedState> CREATOR =
new Parcelable.Creator<BundleSavedState>()
{
@Override
public BundleSavedState createFromParcel(Parcel source)
{
return new BundleSavedState(source);
}
@Override
public BundleSavedState[] newArray(int size)
{
return new BundleSavedState[size];
}
};
public final Bundle bundle;
public BundleSavedState(Parcelable superState, Bundle bundle)
{
super(superState);
this.bundle = bundle;
}
public BundleSavedState(Parcel source)
{
super(source);
this.bundle = source.readBundle();
}
@Override
public void writeToParcel(Parcel out, int flags)
{
super.writeToParcel(out, flags);
out.writeBundle(bundle);
}
}

@ -21,6 +21,7 @@ package org.isoron.uhabits.activities.common.views;
import android.animation.*; import android.animation.*;
import android.content.*; import android.content.*;
import android.os.*;
import android.util.*; import android.util.*;
import android.view.*; import android.view.*;
import android.widget.*; import android.widget.*;
@ -32,7 +33,9 @@ public abstract class ScrollableChart extends View
private int dataOffset; private int dataOffset;
private int scrollerBucketSize; private int scrollerBucketSize = 1;
private int direction = 1;
private GestureDetector detector; private GestureDetector detector;
@ -40,6 +43,10 @@ public abstract class ScrollableChart extends View
private ValueAnimator scrollAnimator; private ValueAnimator scrollAnimator;
private ScrollController scrollController;
private int maxDataOffset = 10000;
public ScrollableChart(Context context) public ScrollableChart(Context context)
{ {
super(context); super(context);
@ -63,8 +70,7 @@ public abstract class ScrollableChart extends View
if (!scroller.isFinished()) if (!scroller.isFinished())
{ {
scroller.computeScrollOffset(); scroller.computeScrollOffset();
dataOffset = Math.max(0, scroller.getCurrX() / scrollerBucketSize); updateDataOffset();
postInvalidate();
} }
else else
{ {
@ -85,19 +91,44 @@ public abstract class ScrollableChart extends View
float velocityY) float velocityY)
{ {
scroller.fling(scroller.getCurrX(), scroller.getCurrY(), scroller.fling(scroller.getCurrX(), scroller.getCurrY(),
(int) velocityX / 2, 0, 0, 100000, 0, 0); direction * ((int) velocityX) / 2, 0, 0, getMaxX(), 0, 0);
invalidate(); invalidate();
scrollAnimator.setDuration(scroller.getDuration()); scrollAnimator.setDuration(scroller.getDuration());
scrollAnimator.start(); scrollAnimator.start();
return false; return false;
} }
@Override private int getMaxX()
public void onLongPress(MotionEvent e)
{ {
return maxDataOffset * scrollerBucketSize;
}
@Override
public void onRestoreInstanceState(Parcelable state)
{
BundleSavedState bss = (BundleSavedState) state;
int x = bss.bundle.getInt("x");
int y = bss.bundle.getInt("y");
direction = bss.bundle.getInt("direction");
dataOffset = bss.bundle.getInt("dataOffset");
maxDataOffset = bss.bundle.getInt("maxDataOffset");
scroller.startScroll(0, 0, x, y, 0);
scroller.computeScrollOffset();
super.onRestoreInstanceState(bss.getSuperState());
}
@Override
public Parcelable onSaveInstanceState()
{
Parcelable superState = super.onSaveInstanceState();
Bundle bundle = new Bundle();
bundle.putInt("x", scroller.getCurrX());
bundle.putInt("y", scroller.getCurrY());
bundle.putInt("dataOffset", dataOffset);
bundle.putInt("direction", direction);
bundle.putInt("maxDataOffset", maxDataOffset);
return new BundleSavedState(superState, bundle);
} }
@Override @Override
@ -111,12 +142,14 @@ public abstract class ScrollableChart extends View
if (parent != null) parent.requestDisallowInterceptTouchEvent(true); if (parent != null) parent.requestDisallowInterceptTouchEvent(true);
} }
scroller.startScroll(scroller.getCurrX(), scroller.getCurrY(),
(int) -dx, (int) dy, 0);
scroller.computeScrollOffset();
dataOffset = Math.max(0, scroller.getCurrX() / scrollerBucketSize);
postInvalidate();
dx = - direction * dx;
dx = Math.min(dx, getMaxX() - scroller.getCurrX());
scroller.startScroll(scroller.getCurrX(), scroller.getCurrY(), (int) dx,
(int) dy, 0);
scroller.computeScrollOffset();
updateDataOffset();
return true; return true;
} }
@ -138,6 +171,32 @@ public abstract class ScrollableChart extends View
return detector.onTouchEvent(event); return detector.onTouchEvent(event);
} }
public void setDirection(int direction)
{
if (direction != 1 && direction != -1)
throw new IllegalArgumentException();
this.direction = direction;
}
@Override
public void onLongPress(MotionEvent e)
{
}
public void setMaxDataOffset(int maxDataOffset)
{
this.maxDataOffset = maxDataOffset;
this.dataOffset = Math.min(dataOffset, maxDataOffset);
scrollController.onDataOffsetChanged(this.dataOffset);
postInvalidate();
}
public void setScrollController(ScrollController scrollController)
{
this.scrollController = scrollController;
}
public void setScrollerBucketSize(int scrollerBucketSize) public void setScrollerBucketSize(int scrollerBucketSize)
{ {
this.scrollerBucketSize = scrollerBucketSize; this.scrollerBucketSize = scrollerBucketSize;
@ -149,5 +208,25 @@ public abstract class ScrollableChart extends View
scroller = new Scroller(context, null, true); scroller = new Scroller(context, null, true);
scrollAnimator = ValueAnimator.ofFloat(0, 1); scrollAnimator = ValueAnimator.ofFloat(0, 1);
scrollAnimator.addUpdateListener(this); scrollAnimator.addUpdateListener(this);
scrollController = new ScrollController() {};
}
private void updateDataOffset()
{
int newDataOffset = scroller.getCurrX() / scrollerBucketSize;
newDataOffset = Math.max(0, newDataOffset);
newDataOffset = Math.min(maxDataOffset, newDataOffset);
if (newDataOffset != dataOffset)
{
dataOffset = newDataOffset;
scrollController.onDataOffsetChanged(dataOffset);
postInvalidate();
}
}
public interface ScrollController
{
default void onDataOffsetChanged(int newDataOffset) {}
} }
} }

@ -28,6 +28,7 @@ import android.view.*;
import com.android.datetimepicker.time.*; import com.android.datetimepicker.time.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.*;
import org.isoron.uhabits.R;
import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.*;
import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.common.dialogs.*;
import org.isoron.uhabits.commands.*; import org.isoron.uhabits.commands.*;

@ -24,7 +24,7 @@ import android.support.v4.app.*;
import android.view.*; import android.view.*;
import android.widget.*; import android.widget.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.R;
import org.isoron.uhabits.models.*; import org.isoron.uhabits.models.*;
import org.isoron.uhabits.utils.*; import org.isoron.uhabits.utils.*;

@ -25,6 +25,7 @@ import org.isoron.uhabits.*;
import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.*;
import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.activities.habits.list.model.*;
import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.preferences.*;
import org.isoron.uhabits.utils.*;
/** /**
* Activity that allows the user to see and modify the list of habits. * Activity that allows the user to see and modify the list of habits.
@ -43,6 +44,8 @@ public class ListHabitsActivity extends BaseActivity
private Preferences prefs; private Preferences prefs;
private MidnightTimer midnightTimer;
public ListHabitsComponent getListHabitsComponent() public ListHabitsComponent getListHabitsComponent()
{ {
return component; return component;
@ -77,6 +80,8 @@ public class ListHabitsActivity extends BaseActivity
screen.setSelectionMenu(selectionMenu); screen.setSelectionMenu(selectionMenu);
rootView.setController(controller, selectionMenu); rootView.setController(controller, selectionMenu);
midnightTimer = component.getMidnightTimer();
setScreen(screen); setScreen(screen);
controller.onStartup(); controller.onStartup();
} }
@ -84,6 +89,7 @@ public class ListHabitsActivity extends BaseActivity
@Override @Override
protected void onPause() protected void onPause()
{ {
midnightTimer.onPause();
screen.onDettached(); screen.onDettached();
adapter.cancelRefresh(); adapter.cancelRefresh();
super.onPause(); super.onPause();
@ -95,6 +101,7 @@ public class ListHabitsActivity extends BaseActivity
adapter.refresh(); adapter.refresh();
screen.onAttached(); screen.onAttached();
rootView.postInvalidate(); rootView.postInvalidate();
midnightTimer.onResume();
if (prefs.getTheme() == ThemeSwitcher.THEME_DARK && if (prefs.getTheme() == ThemeSwitcher.THEME_DARK &&
prefs.isPureBlackEnabled() != pureBlack) prefs.isPureBlackEnabled() != pureBlack)

@ -23,13 +23,14 @@ import org.isoron.uhabits.*;
import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.*;
import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.activities.habits.list.controllers.*;
import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.activities.habits.list.model.*;
import org.isoron.uhabits.utils.*;
import dagger.*; import dagger.*;
@ActivityScope @ActivityScope
@Component(modules = { ActivityModule.class }, @Component(modules = { ActivityModule.class },
dependencies = { AppComponent.class }) dependencies = { AppComponent.class })
public interface ListHabitsComponent extends ActivityComponent public interface ListHabitsComponent
{ {
CheckmarkButtonControllerFactory getCheckmarkButtonControllerFactory(); CheckmarkButtonControllerFactory getCheckmarkButtonControllerFactory();
@ -44,4 +45,6 @@ public interface ListHabitsComponent extends ActivityComponent
ListHabitsScreen getScreen(); ListHabitsScreen getScreen();
ListHabitsSelectionMenu getSelectionMenu(); ListHabitsSelectionMenu getSelectionMenu();
MidnightTimer getMidnightTimer();
} }

@ -41,6 +41,7 @@ import javax.inject.*;
public class ListHabitsController public class ListHabitsController
implements HabitCardListController.HabitListener implements HabitCardListController.HabitListener
{ {
@NonNull @NonNull
private final ListHabitsScreen screen; private final ListHabitsScreen screen;
@ -70,6 +71,8 @@ public class ListHabitsController
private ExportCSVTaskFactory exportCSVFactory; private ExportCSVTaskFactory exportCSVFactory;
private ExportDBTaskFactory exportDBFactory;
@Inject @Inject
public ListHabitsController(@NonNull BaseSystem system, public ListHabitsController(@NonNull BaseSystem system,
@NonNull CommandRunner commandRunner, @NonNull CommandRunner commandRunner,
@ -82,7 +85,8 @@ public class ListHabitsController
@NonNull WidgetUpdater widgetUpdater, @NonNull WidgetUpdater widgetUpdater,
@NonNull @NonNull
ImportDataTaskFactory importTaskFactory, ImportDataTaskFactory importTaskFactory,
@NonNull ExportCSVTaskFactory exportCSVFactory) @NonNull ExportCSVTaskFactory exportCSVFactory,
@NonNull ExportDBTaskFactory exportDBFactory)
{ {
this.adapter = adapter; this.adapter = adapter;
this.commandRunner = commandRunner; this.commandRunner = commandRunner;
@ -95,6 +99,7 @@ public class ListHabitsController
this.widgetUpdater = widgetUpdater; this.widgetUpdater = widgetUpdater;
this.importTaskFactory = importTaskFactory; this.importTaskFactory = importTaskFactory;
this.exportCSVFactory = exportCSVFactory; this.exportCSVFactory = exportCSVFactory;
this.exportDBFactory = exportDBFactory;
} }
public void onExportCSV() public void onExportCSV()
@ -110,7 +115,7 @@ public class ListHabitsController
public void onExportDB() public void onExportDB()
{ {
taskRunner.execute(new ExportDBTask(filename -> { taskRunner.execute(exportDBFactory.create(filename -> {
if (filename != null) screen.showSendFileScreen(filename); if (filename != null) screen.showSendFileScreen(filename);
else screen.showMessage(R.string.could_not_export); else screen.showMessage(R.string.could_not_export);
})); }));
@ -128,7 +133,8 @@ public class ListHabitsController
taskRunner.execute(() -> habitList.reorder(from, to)); taskRunner.execute(() -> habitList.reorder(from, to));
} }
public void onImportData(@NonNull File file) public void onImportData(@NonNull File file,
@NonNull OnFinishedListener finishedListener)
{ {
taskRunner.execute(importTaskFactory.create(file, result -> { taskRunner.execute(importTaskFactory.create(file, result -> {
switch (result) switch (result)
@ -146,6 +152,8 @@ public class ListHabitsController
screen.showMessage(R.string.could_not_import); screen.showMessage(R.string.could_not_import);
break; break;
} }
finishedListener.onFinish();
})); }));
} }
@ -208,4 +216,9 @@ public class ListHabitsController
prefs.updateLastHint(-1, DateUtils.getStartOfToday()); prefs.updateLastHint(-1, DateUtils.getStartOfToday());
screen.showIntroScreen(); screen.showIntroScreen();
} }
public interface OnFinishedListener
{
void onFinish();
}
} }

@ -112,6 +112,22 @@ public class ListHabitsMenu extends BaseMenu
invalidate(); invalidate();
return true; return true;
case R.id.actionSortColor:
adapter.setOrder(HabitList.Order.BY_COLOR);
return true;
case R.id.actionSortManual:
adapter.setOrder(HabitList.Order.BY_POSITION);
return true;
case R.id.actionSortName:
adapter.setOrder(HabitList.Order.BY_NAME);
return true;
case R.id.actionSortScore:
adapter.setOrder(HabitList.Order.BY_SCORE);
return true;
default: default:
return false; return false;
} }

@ -26,8 +26,9 @@ import android.support.v7.widget.Toolbar;
import android.view.*; import android.view.*;
import android.widget.*; import android.widget.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.R;
import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.*;
import org.isoron.uhabits.activities.common.views.*;
import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.activities.habits.list.controllers.*;
import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.activities.habits.list.model.*;
import org.isoron.uhabits.activities.habits.list.views.*; import org.isoron.uhabits.activities.habits.list.views.*;
@ -43,7 +44,7 @@ import butterknife.*;
public class ListHabitsRootView extends BaseRootView public class ListHabitsRootView extends BaseRootView
implements ModelObservable.Listener, TaskRunner.Listener implements ModelObservable.Listener, TaskRunner.Listener
{ {
public static final int MAX_CHECKMARK_COUNT = 21; public static final int MAX_CHECKMARK_COUNT = 60;
@BindView(R.id.listView) @BindView(R.id.listView)
HabitCardListView listView; HabitCardListView listView;
@ -132,6 +133,13 @@ public class ListHabitsRootView extends BaseRootView
listController.setSelectionListener(menu); listController.setSelectionListener(menu);
listView.setController(listController); listView.setController(listController);
menu.setListController(listController); menu.setListController(listController);
header.setScrollController(new ScrollableChart.ScrollController() {
@Override
public void onDataOffsetChanged(int newDataOffset)
{
listView.setDataOffset(newDataOffset);
}
});
} }
@Override @Override
@ -156,6 +164,7 @@ public class ListHabitsRootView extends BaseRootView
{ {
int count = getCheckmarkCount(); int count = getCheckmarkCount();
header.setButtonCount(count); header.setButtonCount(count);
header.setMaxDataOffset(Math.max(MAX_CHECKMARK_COUNT - count, 0));
listView.setCheckmarkCount(count); listView.setCheckmarkCount(count);
super.onSizeChanged(w, h, oldw, oldh); super.onSizeChanged(w, h, oldw, oldh);
} }

@ -19,7 +19,9 @@
package org.isoron.uhabits.activities.habits.list; package org.isoron.uhabits.activities.habits.list;
import android.app.*;
import android.content.*; import android.content.*;
import android.net.*;
import android.support.annotation.*; import android.support.annotation.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.*;
@ -31,24 +33,32 @@ import org.isoron.uhabits.commands.*;
import org.isoron.uhabits.intents.*; import org.isoron.uhabits.intents.*;
import org.isoron.uhabits.io.*; import org.isoron.uhabits.io.*;
import org.isoron.uhabits.models.*; import org.isoron.uhabits.models.*;
import org.isoron.uhabits.utils.*;
import java.io.*; import java.io.*;
import javax.inject.*; import javax.inject.*;
import static android.os.Build.VERSION.*;
import static android.os.Build.VERSION_CODES.*;
@ActivityScope @ActivityScope
public class ListHabitsScreen extends BaseScreen public class ListHabitsScreen extends BaseScreen
implements CommandRunner.Listener implements CommandRunner.Listener
{ {
public static final int RESULT_BUG_REPORT = 4; public static final int RESULT_IMPORT_DATA = 1;
public static final int RESULT_EXPORT_CSV = 2; public static final int RESULT_EXPORT_CSV = 2;
public static final int RESULT_EXPORT_DB = 3; public static final int RESULT_EXPORT_DB = 3;
public static final int RESULT_BUG_REPORT = 4;
public static final int RESULT_REPAIR_DB = 5; public static final int RESULT_REPAIR_DB = 5;
public static final int RESULT_IMPORT_DATA = 1; public static final int REQUEST_OPEN_DOCUMENT = 6;
public static final int REQUEST_SETTINGS = 7;
@Nullable @Nullable
private ListHabitsController controller; private ListHabitsController controller;
@ -125,6 +135,15 @@ public class ListHabitsScreen extends BaseScreen
@Override @Override
public void onResult(int requestCode, int resultCode, Intent data) public void onResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == REQUEST_OPEN_DOCUMENT)
onOpenDocumentResult(resultCode, data);
if (requestCode == REQUEST_SETTINGS)
onSettingsResult(resultCode);
}
private void onSettingsResult(int resultCode)
{ {
if (controller == null) return; if (controller == null) return;
@ -152,6 +171,30 @@ public class ListHabitsScreen extends BaseScreen
} }
} }
private void onOpenDocumentResult(int resultCode, Intent data)
{
if (controller == null) return;
if (resultCode != Activity.RESULT_OK) return;
try
{
Uri uri = data.getData();
ContentResolver cr = activity.getContentResolver();
InputStream is = cr.openInputStream(uri);
File cacheDir = activity.getExternalCacheDir();
File tempFile = File.createTempFile("import", "", cacheDir);
FileUtils.copy(is, tempFile);
controller.onImportData(tempFile, () -> tempFile.delete());
}
catch (IOException e)
{
showMessage(R.string.could_not_import);
e.printStackTrace();
}
}
public void setController(@Nullable ListHabitsController controller) public void setController(@Nullable ListHabitsController controller)
{ {
this.controller = controller; this.controller = controller;
@ -208,6 +251,21 @@ public class ListHabitsScreen extends BaseScreen
} }
public void showImportScreen() public void showImportScreen()
{
if (SDK_INT < KITKAT)
{
showImportScreenPreKitKat();
return;
}
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
activity.startActivityForResult(intent, REQUEST_OPEN_DOCUMENT);
}
public void showImportScreenPreKitKat()
{ {
File dir = dirFinder.findStorageDir(null); File dir = dirFinder.findStorageDir(null);
@ -220,7 +278,8 @@ public class ListHabitsScreen extends BaseScreen
FilePickerDialog picker = filePickerDialogFactory.create(dir); FilePickerDialog picker = filePickerDialogFactory.create(dir);
if (controller != null) if (controller != null)
picker.setListener(file -> controller.onImportData(file)); picker.setListener(file -> controller.onImportData(file, () -> {}));
activity.showDialog(picker.getDialog()); activity.showDialog(picker.getDialog());
} }
@ -233,7 +292,7 @@ public class ListHabitsScreen extends BaseScreen
public void showSettingsScreen() public void showSettingsScreen()
{ {
Intent intent = intentFactory.startSettingsActivity(activity); Intent intent = intentFactory.startSettingsActivity(activity);
activity.startActivityForResult(intent, 0); activity.startActivityForResult(intent, REQUEST_SETTINGS);
} }
public void toggleNightMode() public void toggleNightMode()

@ -27,6 +27,8 @@ import org.isoron.uhabits.activities.*;
import org.isoron.uhabits.activities.habits.list.*; import org.isoron.uhabits.activities.habits.list.*;
import org.isoron.uhabits.activities.habits.list.views.*; import org.isoron.uhabits.activities.habits.list.views.*;
import org.isoron.uhabits.models.*; import org.isoron.uhabits.models.*;
import org.isoron.uhabits.preferences.*;
import org.isoron.uhabits.utils.*;
import java.util.*; import java.util.*;
@ -41,7 +43,7 @@ import javax.inject.*;
@ActivityScope @ActivityScope
public class HabitCardListAdapter public class HabitCardListAdapter
extends RecyclerView.Adapter<HabitCardViewHolder> extends RecyclerView.Adapter<HabitCardViewHolder>
implements HabitCardListCache.Listener implements HabitCardListCache.Listener, MidnightTimer.MidnightListener
{ {
@NonNull @NonNull
private ModelObservable observable; private ModelObservable observable;
@ -55,19 +57,36 @@ public class HabitCardListAdapter
@NonNull @NonNull
private final HabitCardListCache cache; private final HabitCardListCache cache;
@NonNull
private Preferences preferences;
private final MidnightTimer midnightTimer;
@Inject @Inject
public HabitCardListAdapter(@NonNull HabitCardListCache cache) public HabitCardListAdapter(@NonNull HabitCardListCache cache,
@NonNull Preferences preferences,
@NonNull MidnightTimer midnightTimer)
{ {
this.preferences = preferences;
this.selected = new LinkedList<>(); this.selected = new LinkedList<>();
this.observable = new ModelObservable(); this.observable = new ModelObservable();
this.cache = cache; this.cache = cache;
this.midnightTimer = midnightTimer;
cache.setListener(this); cache.setListener(this);
cache.setCheckmarkCount(ListHabitsRootView.MAX_CHECKMARK_COUNT); cache.setCheckmarkCount(ListHabitsRootView.MAX_CHECKMARK_COUNT);
cache.setOrder(preferences.getDefaultOrder());
setHasStableIds(true); setHasStableIds(true);
} }
@Override
public void atMidnight()
{
cache.refreshAllHabits();
}
public void cancelRefresh() public void cancelRefresh()
{ {
cache.cancelTasks(); cache.cancelTasks();
@ -130,12 +149,18 @@ public class HabitCardListAdapter
return selected.isEmpty(); return selected.isEmpty();
} }
public boolean isSortable()
{
return cache.getOrder() == HabitList.Order.BY_POSITION;
}
/** /**
* Notify the adapter that it has been attached to a ListView. * Notify the adapter that it has been attached to a ListView.
*/ */
public void onAttached() public void onAttached()
{ {
cache.onAttached(); cache.onAttached();
midnightTimer.addListener(this);
} }
@Override @Override
@ -153,6 +178,20 @@ public class HabitCardListAdapter
listView.bindCardView(holder, habit, score, checkmarks, selected); listView.bindCardView(holder, habit, score, checkmarks, selected);
} }
@Override
public void onViewAttachedToWindow(@Nullable HabitCardViewHolder holder)
{
if (listView == null) return;
listView.attachCardView(holder);
}
@Override
public void onViewDetachedFromWindow(@Nullable HabitCardViewHolder holder)
{
if (listView == null) return;
listView.detachCardView(holder);
}
@Override @Override
public HabitCardViewHolder onCreateViewHolder(ViewGroup parent, public HabitCardViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) int viewType)
@ -168,6 +207,7 @@ public class HabitCardListAdapter
public void onDetached() public void onDetached()
{ {
cache.onDetached(); cache.onDetached();
midnightTimer.removeListener(this);
} }
@Override @Override
@ -260,6 +300,12 @@ public class HabitCardListAdapter
this.listView = listView; this.listView = listView;
} }
public void setOrder(HabitList.Order order)
{
cache.setOrder(order);
preferences.setDefaultOrder(order);
}
/** /**
* Selects or deselects the item at a given position. * Selects or deselects the item at a given position.
* *

@ -107,6 +107,11 @@ public class HabitCardListCache implements CommandRunner.Listener
return data.habits.size(); return data.habits.size();
} }
public HabitList.Order getOrder()
{
return filteredHabits.getOrder();
}
public int getScore(long habitId) public int getScore(long habitId)
{ {
return data.scores.get(habitId); return data.scores.get(habitId);
@ -180,6 +185,13 @@ public class HabitCardListCache implements CommandRunner.Listener
this.listener = listener; this.listener = listener;
} }
public void setOrder(HabitList.Order order)
{
allHabits.setOrder(order);
filteredHabits.setOrder(order);
refreshAllHabits();
}
/** /**
* Interface definition for a callback to be invoked when the data on the * Interface definition for a callback to be invoked when the data on the
* cache has been modified. * cache has been modified.

@ -74,7 +74,6 @@ public class CheckmarkButtonView extends TextView
res = new StyledResources(getContext()); res = new StyledResources(getContext());
setWillNotDraw(false); setWillNotDraw(false);
setHapticFeedbackEnabled(false);
setMinHeight( setMinHeight(
getResources().getDimensionPixelSize(R.dimen.checkmarkHeight)); getResources().getDimensionPixelSize(R.dimen.checkmarkHeight));

@ -53,6 +53,8 @@ public class CheckmarkPanelView extends LinearLayout implements Preferences.List
@NonNull @NonNull
private Habit habit; private Habit habit;
private int dataOffset;
public CheckmarkPanelView(Context context) public CheckmarkPanelView(Context context)
{ {
super(context); super(context);
@ -75,19 +77,23 @@ public class CheckmarkPanelView extends LinearLayout implements Preferences.List
return (CheckmarkButtonView) getChildAt(position); return (CheckmarkButtonView) getChildAt(position);
} }
public void setCheckmarkValues(int[] checkmarkValues) public void setButtonCount(int newButtonCount)
{ {
this.checkmarkValues = checkmarkValues; if(nButtons != newButtonCount)
if (this.nButtons != checkmarkValues.length)
{ {
this.nButtons = checkmarkValues.length; nButtons = newButtonCount;
addCheckmarkButtons(); addCheckmarkButtons();
} }
setupCheckmarkButtons(); setupCheckmarkButtons();
} }
public void setCheckmarkValues(int[] checkmarkValues)
{
this.checkmarkValues = checkmarkValues;
setupCheckmarkButtons();
}
public void setColor(int color) public void setColor(int color)
{ {
this.color = color; this.color = color;
@ -100,6 +106,12 @@ public class CheckmarkPanelView extends LinearLayout implements Preferences.List
setupCheckmarkButtons(); setupCheckmarkButtons();
} }
public void setDataOffset(int dataOffset)
{
this.dataOffset = dataOffset;
setupCheckmarkButtons();
}
public void setHabit(@NonNull Habit habit) public void setHabit(@NonNull Habit habit)
{ {
this.habit = habit; this.habit = habit;
@ -170,11 +182,13 @@ public class CheckmarkPanelView extends LinearLayout implements Preferences.List
{ {
long timestamp = DateUtils.getStartOfToday(); long timestamp = DateUtils.getStartOfToday();
long day = DateUtils.millisecondsInOneDay; long day = DateUtils.millisecondsInOneDay;
timestamp -= day * dataOffset;
for (int i = 0; i < nButtons; i++) for (int i = 0; i < nButtons; i++)
{ {
CheckmarkButtonView buttonView = indexToButton(i); CheckmarkButtonView buttonView = indexToButton(i);
buttonView.setValue(checkmarkValues[i]); if(i + dataOffset >= checkmarkValues.length) break;
buttonView.setValue(checkmarkValues[i + dataOffset]);
buttonView.setColor(color); buttonView.setColor(color);
setupButtonControllers(timestamp, buttonView); setupButtonControllers(timestamp, buttonView);
timestamp -= day; timestamp -= day;

@ -20,15 +20,17 @@
package org.isoron.uhabits.activities.habits.list.views; package org.isoron.uhabits.activities.habits.list.views;
import android.content.*; import android.content.*;
import android.os.*;
import android.support.annotation.*; import android.support.annotation.*;
import android.support.v7.widget.*; import android.support.v7.widget.*;
import android.support.v7.widget.helper.*; import android.support.v7.widget.helper.*;
import android.util.*; import android.util.*;
import android.view.*; import android.view.*;
import org.isoron.uhabits.models.*; import org.isoron.uhabits.activities.common.views.*;
import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.activities.habits.list.controllers.*;
import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.activities.habits.list.model.*;
import org.isoron.uhabits.models.*;
import java.util.*; import java.util.*;
@ -44,6 +46,10 @@ public class HabitCardListView extends RecyclerView
private int checkmarkCount; private int checkmarkCount;
private int dataOffset;
private LinkedList<HabitCardViewHolder> attachedHolders;
public HabitCardListView(Context context, AttributeSet attrs) public HabitCardListView(Context context, AttributeSet attrs)
{ {
super(context, attrs); super(context, attrs);
@ -54,6 +60,13 @@ public class HabitCardListView extends RecyclerView
TouchHelperCallback callback = new TouchHelperCallback(); TouchHelperCallback callback = new TouchHelperCallback();
touchHelper = new ItemTouchHelper(callback); touchHelper = new ItemTouchHelper(callback);
touchHelper.attachToRecyclerView(this); touchHelper.attachToRecyclerView(this);
attachedHolders = new LinkedList<>();
}
public void attachCardView(HabitCardViewHolder holder)
{
attachedHolders.add(holder);
} }
/** /**
@ -75,13 +88,12 @@ public class HabitCardListView extends RecyclerView
int[] checkmarks, int[] checkmarks,
boolean selected) boolean selected)
{ {
int visibleCheckmarks[] =
Arrays.copyOfRange(checkmarks, 0, checkmarkCount);
HabitCardView cardView = (HabitCardView) holder.itemView; HabitCardView cardView = (HabitCardView) holder.itemView;
cardView.setHabit(habit); cardView.setHabit(habit);
cardView.setSelected(selected); cardView.setSelected(selected);
cardView.setCheckmarkValues(visibleCheckmarks); cardView.setCheckmarkValues(checkmarks);
cardView.setCheckmarkCount(checkmarkCount);
cardView.setDataOffset(dataOffset);
cardView.setScore(score); cardView.setScore(score);
if (controller != null) setupCardViewController(holder); if (controller != null) setupCardViewController(holder);
return cardView; return cardView;
@ -92,6 +104,11 @@ public class HabitCardListView extends RecyclerView
return new HabitCardView(getContext()); return new HabitCardView(getContext());
} }
public void detachCardView(HabitCardViewHolder holder)
{
attachedHolders.remove(holder);
}
@Override @Override
public void setAdapter(RecyclerView.Adapter adapter) public void setAdapter(RecyclerView.Adapter adapter)
{ {
@ -109,6 +126,16 @@ public class HabitCardListView extends RecyclerView
this.controller = controller; this.controller = controller;
} }
public void setDataOffset(int dataOffset)
{
this.dataOffset = dataOffset;
for (HabitCardViewHolder holder : attachedHolders)
{
HabitCardView cardView = (HabitCardView) holder.itemView;
cardView.setDataOffset(dataOffset);
}
}
@Override @Override
protected void onAttachedToWindow() protected void onAttachedToWindow()
{ {
@ -123,6 +150,23 @@ public class HabitCardListView extends RecyclerView
super.onDetachedFromWindow(); super.onDetachedFromWindow();
} }
@Override
protected void onRestoreInstanceState(Parcelable state)
{
BundleSavedState bss = (BundleSavedState) state;
dataOffset = bss.bundle.getInt("dataOffset");
super.onRestoreInstanceState(bss.getSuperState());
}
@Override
protected Parcelable onSaveInstanceState()
{
Parcelable superState = super.onSaveInstanceState();
Bundle bundle = new Bundle();
bundle.putInt("dataOffset", dataOffset);
return new BundleSavedState(superState, bundle);
}
protected void setupCardViewController(@NonNull HabitCardViewHolder holder) protected void setupCardViewController(@NonNull HabitCardViewHolder holder)
{ {
HabitCardView cardView = (HabitCardView) holder.itemView; HabitCardView cardView = (HabitCardView) holder.itemView;
@ -168,7 +212,7 @@ public class HabitCardListView extends RecyclerView
{ {
int position = holder.getAdapterPosition(); int position = holder.getAdapterPosition();
if (controller != null) controller.onItemLongClick(position); if (controller != null) controller.onItemLongClick(position);
touchHelper.startDrag(holder); if (adapter.isSortable()) touchHelper.startDrag(holder);
} }
@Override @Override

@ -27,7 +27,7 @@ import android.support.annotation.*;
import android.util.*; import android.util.*;
import android.widget.*; import android.widget.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.R;
import org.isoron.uhabits.activities.common.views.*; import org.isoron.uhabits.activities.common.views.*;
import org.isoron.uhabits.models.*; import org.isoron.uhabits.models.*;
import org.isoron.uhabits.utils.*; import org.isoron.uhabits.utils.*;
@ -72,6 +72,8 @@ public class HabitCardView extends FrameLayout
@Nullable @Nullable
private Habit habit; private Habit habit;
private int dataOffset;
public HabitCardView(Context context) public HabitCardView(Context context)
{ {
super(context); super(context);
@ -90,6 +92,11 @@ public class HabitCardView extends FrameLayout
new Handler(Looper.getMainLooper()).post(() -> refresh()); new Handler(Looper.getMainLooper()).post(() -> refresh());
} }
public void setCheckmarkCount(int checkmarkCount)
{
checkmarkPanel.setButtonCount(checkmarkCount);
}
public void setCheckmarkValues(int checkmarks[]) public void setCheckmarkValues(int checkmarks[])
{ {
checkmarkPanel.setCheckmarkValues(checkmarks); checkmarkPanel.setCheckmarkValues(checkmarks);
@ -103,6 +110,12 @@ public class HabitCardView extends FrameLayout
checkmarkPanel.setController(controller); checkmarkPanel.setController(controller);
} }
public void setDataOffset(int dataOffset)
{
this.dataOffset = dataOffset;
checkmarkPanel.setDataOffset(dataOffset);
}
public void setHabit(@NonNull Habit habit) public void setHabit(@NonNull Habit habit)
{ {
if (this.habit != null) detachFromHabit(); if (this.habit != null) detachFromHabit();
@ -134,7 +147,7 @@ public class HabitCardView extends FrameLayout
{ {
long today = DateUtils.getStartOfToday(); long today = DateUtils.getStartOfToday();
long day = DateUtils.millisecondsInOneDay; long day = DateUtils.millisecondsInOneDay;
int offset = (int) ((today - timestamp) / day); int offset = (int) ((today - timestamp) / day) - dataOffset;
CheckmarkButtonView button = checkmarkPanel.indexToButton(offset); CheckmarkButtonView button = checkmarkPanel.indexToButton(offset);
float y = button.getHeight() / 2.0f; float y = button.getHeight() / 2.0f;

@ -20,30 +20,41 @@
package org.isoron.uhabits.activities.habits.list.views; package org.isoron.uhabits.activities.habits.list.views;
import android.content.*; import android.content.*;
import android.content.res.*;
import android.graphics.*;
import android.support.annotation.*; import android.support.annotation.*;
import android.text.*;
import android.util.*; import android.util.*;
import android.view.*;
import android.widget.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.*;
import org.isoron.uhabits.activities.common.views.*;
import org.isoron.uhabits.activities.habits.list.*;
import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.preferences.*;
import org.isoron.uhabits.utils.*; import org.isoron.uhabits.utils.*;
import java.util.*; import java.util.*;
public class HeaderView extends LinearLayout implements Preferences.Listener public class HeaderView extends ScrollableChart
implements Preferences.Listener, MidnightTimer.MidnightListener
{ {
private final Context context;
private int buttonCount; private int buttonCount;
@Nullable @Nullable
private Preferences prefs; private Preferences prefs;
@Nullable
private MidnightTimer midnightTimer;
private final TextPaint paint;
private RectF rect;
private int maxDataOffset;
public HeaderView(Context context, AttributeSet attrs) public HeaderView(Context context, AttributeSet attrs)
{ {
super(context, attrs); super(context, attrs);
this.context = context;
if (isInEditMode()) if (isInEditMode())
{ {
@ -56,18 +67,46 @@ public class HeaderView extends LinearLayout implements Preferences.Listener
HabitsApplication app = (HabitsApplication) appContext; HabitsApplication app = (HabitsApplication) appContext;
prefs = app.getComponent().getPreferences(); prefs = app.getComponent().getPreferences();
} }
if (context instanceof ListHabitsActivity)
{
ListHabitsActivity activity = (ListHabitsActivity) context;
midnightTimer = activity.getListHabitsComponent().getMidnightTimer();
}
Resources res = context.getResources();
setScrollerBucketSize((int) res.getDimension(R.dimen.checkmarkWidth));
setDirection(shouldReverseCheckmarks() ? 1 : -1);
StyledResources sr = new StyledResources(context);
paint = new TextPaint();
paint.setColor(Color.BLACK);
paint.setAntiAlias(true);
paint.setTextSize(getResources().getDimension(R.dimen.tinyTextSize));
paint.setTextAlign(Paint.Align.CENTER);
paint.setTypeface(Typeface.DEFAULT_BOLD);
paint.setColor(sr.getColor(R.attr.mediumContrastTextColor));
rect = new RectF();
}
@Override
public void atMidnight()
{
post(() -> invalidate());
} }
@Override @Override
public void onCheckmarkOrderChanged() public void onCheckmarkOrderChanged()
{ {
createButtons(); setDirection(shouldReverseCheckmarks() ? 1 : -1);
postInvalidate();
} }
public void setButtonCount(int buttonCount) public void setButtonCount(int buttonCount)
{ {
this.buttonCount = buttonCount; this.buttonCount = buttonCount;
createButtons(); postInvalidate();
} }
@Override @Override
@ -75,32 +114,56 @@ public class HeaderView extends LinearLayout implements Preferences.Listener
{ {
super.onAttachedToWindow(); super.onAttachedToWindow();
if (prefs != null) prefs.addListener(this); if (prefs != null) prefs.addListener(this);
if (midnightTimer != null) midnightTimer.addListener(this);
} }
@Override @Override
protected void onDetachedFromWindow() protected void onDetachedFromWindow()
{ {
if (midnightTimer != null) midnightTimer.removeListener(this);
if (prefs != null) prefs.removeListener(this); if (prefs != null) prefs.removeListener(this);
super.onDetachedFromWindow(); super.onDetachedFromWindow();
} }
private void createButtons() @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = (int) getContext()
.getResources()
.getDimension(R.dimen.checkmarkHeight);
setMeasuredDimension(width, height);
}
@Override
protected void onDraw(Canvas canvas)
{ {
removeAllViews(); super.onDraw(canvas);
GregorianCalendar day = DateUtils.getStartOfTodayCalendar(); GregorianCalendar day = DateUtils.getStartOfTodayCalendar();
Resources res = getContext().getResources();
float width = res.getDimension(R.dimen.checkmarkWidth);
float height = res.getDimension(R.dimen.checkmarkHeight);
boolean reverse = shouldReverseCheckmarks();
for (int i = 0; i < buttonCount; i++) day.add(GregorianCalendar.DAY_OF_MONTH, -getDataOffset());
addView( float em = paint.measureText("m");
inflate(context, R.layout.list_habits_header_checkmark, null));
for (int i = 0; i < getChildCount(); i++) for (int i = 0; i < buttonCount; i++)
{ {
int position = i; rect.set(0, 0, width, height);
if (shouldReverseCheckmarks()) position = getChildCount() - i - 1; rect.offset(canvas.getWidth(), 0);
if(reverse) rect.offset(- (i + 1) * width, 0);
else rect.offset((i - buttonCount) * width, 0);
String text = DateUtils.formatHeaderDate(day).toUpperCase();
String[] lines = text.split("\n");
int y1 = (int)(rect.centerY() - 0.25 * em);
int y2 = (int)(rect.centerY() + 1.25 * em);
View button = getChildAt(position); canvas.drawText(lines[0], rect.centerX(), y1, paint);
TextView label = (TextView) button.findViewById(R.id.tvCheck); canvas.drawText(lines[1], rect.centerX(), y2, paint);
label.setText(DateUtils.formatHeaderDate(day));
day.add(GregorianCalendar.DAY_OF_MONTH, -1); day.add(GregorianCalendar.DAY_OF_MONTH, -1);
} }
} }

@ -24,7 +24,7 @@ import android.os.*;
import android.support.annotation.*; import android.support.annotation.*;
import android.support.v7.widget.*; import android.support.v7.widget.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.R;
import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.*;
import org.isoron.uhabits.activities.habits.show.views.*; import org.isoron.uhabits.activities.habits.show.views.*;
import org.isoron.uhabits.models.*; import org.isoron.uhabits.models.*;

@ -24,6 +24,10 @@ import android.view.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.*;
import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.*;
import org.isoron.uhabits.models.*;
import org.isoron.uhabits.tasks.*;
import java.util.*;
import javax.inject.*; import javax.inject.*;
@ -33,12 +37,38 @@ public class ShowHabitsMenu extends BaseMenu
@NonNull @NonNull
private final ShowHabitScreen screen; private final ShowHabitScreen screen;
@NonNull
private final Habit habit;
@NonNull
private final TaskRunner taskRunner;
@NonNull
private ExportCSVTaskFactory exportCSVFactory;
@Inject @Inject
public ShowHabitsMenu(@NonNull BaseActivity activity, public ShowHabitsMenu(@NonNull BaseActivity activity,
@NonNull ShowHabitScreen screen) @NonNull ShowHabitScreen screen,
@NonNull Habit habit,
@NonNull ExportCSVTaskFactory exportCSVFactory,
@NonNull TaskRunner taskRunner)
{ {
super(activity); super(activity);
this.screen = screen; this.screen = screen;
this.habit = habit;
this.taskRunner = taskRunner;
this.exportCSVFactory = exportCSVFactory;
}
public void exportHabit()
{
List<Habit> selected = new LinkedList<>();
selected.add(habit);
ExportCSVTask task = exportCSVFactory.create(selected, filename -> {
if (filename != null) screen.showSendFileScreen(filename);
else screen.showMessage(R.string.could_not_export);
});
taskRunner.execute(task);
} }
@Override @Override
@ -50,6 +80,10 @@ public class ShowHabitsMenu extends BaseMenu
screen.showEditHabitDialog(); screen.showEditHabitDialog();
return true; return true;
case R.id.export:
this.exportHabit();
return true;
default: default:
return false; return false;
} }

@ -25,6 +25,7 @@ import android.util.*;
import android.widget.*; import android.widget.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.*;
import org.isoron.uhabits.R;
import org.isoron.uhabits.activities.common.views.*; import org.isoron.uhabits.activities.common.views.*;
import org.isoron.uhabits.models.*; import org.isoron.uhabits.models.*;
import org.isoron.uhabits.tasks.*; import org.isoron.uhabits.tasks.*;

@ -25,6 +25,7 @@ import android.util.*;
import android.widget.*; import android.widget.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.*;
import org.isoron.uhabits.R;
import org.isoron.uhabits.activities.common.views.*; import org.isoron.uhabits.activities.common.views.*;
import org.isoron.uhabits.models.*; import org.isoron.uhabits.models.*;
import org.isoron.uhabits.tasks.*; import org.isoron.uhabits.tasks.*;

@ -25,6 +25,7 @@ import android.util.*;
import android.widget.*; import android.widget.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.*;
import org.isoron.uhabits.R;
import org.isoron.uhabits.activities.common.views.*; import org.isoron.uhabits.activities.common.views.*;
import org.isoron.uhabits.models.*; import org.isoron.uhabits.models.*;
import org.isoron.uhabits.tasks.*; import org.isoron.uhabits.tasks.*;

@ -25,6 +25,7 @@ import android.util.*;
import android.widget.*; import android.widget.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.*;
import org.isoron.uhabits.R;
import org.isoron.uhabits.activities.common.views.*; import org.isoron.uhabits.activities.common.views.*;
import org.isoron.uhabits.models.*; import org.isoron.uhabits.models.*;
import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.preferences.*;

@ -25,6 +25,7 @@ import android.util.*;
import android.widget.*; import android.widget.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.*;
import org.isoron.uhabits.R;
import org.isoron.uhabits.activities.common.views.*; import org.isoron.uhabits.activities.common.views.*;
import org.isoron.uhabits.models.*; import org.isoron.uhabits.models.*;
import org.isoron.uhabits.tasks.*; import org.isoron.uhabits.tasks.*;

@ -25,7 +25,7 @@ import android.content.res.*;
import android.util.*; import android.util.*;
import android.widget.*; import android.widget.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.R;
import org.isoron.uhabits.models.*; import org.isoron.uhabits.models.*;
import org.isoron.uhabits.utils.*; import org.isoron.uhabits.utils.*;

@ -61,9 +61,6 @@ public class SettingsFragment extends PreferenceFragmentCompat
setResultOnPreferenceClick("bugReport", ListHabitsScreen.RESULT_BUG_REPORT); setResultOnPreferenceClick("bugReport", ListHabitsScreen.RESULT_BUG_REPORT);
updateRingtoneDescription(); updateRingtoneDescription();
if (InterfaceUtils.isLocaleFullyTranslated())
removePreference("translate", "linksCategory");
} }
@Override @Override
@ -110,14 +107,6 @@ public class SettingsFragment extends PreferenceFragmentCompat
BackupManager.dataChanged("org.isoron.uhabits"); BackupManager.dataChanged("org.isoron.uhabits");
} }
private void removePreference(String preferenceKey, String categoryKey)
{
PreferenceCategory cat =
(PreferenceCategory) findPreference(categoryKey);
Preference pref = findPreference(preferenceKey);
cat.removePreference(pref);
}
private void setResultOnPreferenceClick(String key, final int result) private void setResultOnPreferenceClick(String key, final int result)
{ {
Preference pref = findPreference(key); Preference pref = findPreference(key);

@ -25,7 +25,7 @@ import android.support.v7.widget.*;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.widget.*; import android.widget.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.R;
import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.*;
import org.isoron.uhabits.models.*; import org.isoron.uhabits.models.*;
import org.isoron.uhabits.utils.*; import org.isoron.uhabits.utils.*;

@ -39,6 +39,12 @@ public class IntentFactory
{ {
} }
public Intent helpTranslate(Context context)
{
String url = context.getString(R.string.translateURL);
return buildViewIntent(url);
}
public Intent rateApp(Context context) public Intent rateApp(Context context)
{ {
String url = context.getString(R.string.playStoreURL); String url = context.getString(R.string.playStoreURL);

@ -19,12 +19,14 @@
package org.isoron.uhabits.io; package org.isoron.uhabits.io;
import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import com.activeandroid.ActiveAndroid; import com.activeandroid.ActiveAndroid;
import org.isoron.uhabits.AppContext;
import org.isoron.uhabits.models.*; import org.isoron.uhabits.models.*;
import org.isoron.uhabits.utils.DatabaseUtils; import org.isoron.uhabits.utils.DatabaseUtils;
import org.isoron.uhabits.utils.FileUtils; import org.isoron.uhabits.utils.FileUtils;
@ -39,10 +41,14 @@ import javax.inject.*;
*/ */
public class LoopDBImporter extends AbstractImporter public class LoopDBImporter extends AbstractImporter
{ {
@NonNull
private Context context;
@Inject @Inject
public LoopDBImporter(@NonNull HabitList habits) public LoopDBImporter(@NonNull @AppContext Context context, @NonNull HabitList habits)
{ {
super(habits); super(habits);
this.context = context;
} }
@Override @Override
@ -68,8 +74,8 @@ public class LoopDBImporter extends AbstractImporter
public void importHabitsFromFile(@NonNull File file) throws IOException public void importHabitsFromFile(@NonNull File file) throws IOException
{ {
ActiveAndroid.dispose(); ActiveAndroid.dispose();
File originalDB = DatabaseUtils.getDatabaseFile(); File originalDB = DatabaseUtils.getDatabaseFile(context);
FileUtils.copy(file, originalDB); FileUtils.copy(file, originalDB);
DatabaseUtils.initializeActiveAndroid(); DatabaseUtils.initializeActiveAndroid(context);
} }
} }

@ -48,9 +48,7 @@ public abstract class HabitList implements Iterable<Habit>
public HabitList() public HabitList()
{ {
observable = new ModelObservable(); observable = new ModelObservable();
filter = new HabitMatcherBuilder() filter = new HabitMatcherBuilder().setArchivedAllowed(true).build();
.setArchivedAllowed(true)
.build();
} }
protected HabitList(@NonNull HabitMatcher filter) protected HabitList(@NonNull HabitMatcher filter)
@ -106,6 +104,15 @@ public abstract class HabitList implements Iterable<Habit>
return observable; return observable;
} }
public abstract Order getOrder();
/**
* Changes the order of the elements on the list.
*
* @param order the new order criterea
*/
public abstract void setOrder(@NonNull Order order);
/** /**
* Returns the index of the given habit in the list, or -1 if the list does * Returns the index of the given habit in the list, or -1 if the list does
* not contain the habit. * not contain the habit.
@ -228,4 +235,12 @@ public abstract class HabitList implements Iterable<Habit>
csv.close(); csv.close();
} }
public enum Order
{
BY_NAME,
BY_COLOR,
BY_SCORE,
BY_POSITION
}
} }

@ -25,6 +25,8 @@ import org.isoron.uhabits.models.*;
import java.util.*; import java.util.*;
import static org.isoron.uhabits.models.HabitList.Order.*;
/** /**
* In-memory implementation of {@link HabitList}. * In-memory implementation of {@link HabitList}.
*/ */
@ -33,16 +35,23 @@ public class MemoryHabitList extends HabitList
@NonNull @NonNull
private LinkedList<Habit> list; private LinkedList<Habit> list;
private Comparator<Habit> comparator = null;
@NonNull
private Order order;
public MemoryHabitList() public MemoryHabitList()
{ {
super(); super();
list = new LinkedList<>(); list = new LinkedList<>();
order = Order.BY_POSITION;
} }
protected MemoryHabitList(@NonNull HabitMatcher matcher) protected MemoryHabitList(@NonNull HabitMatcher matcher)
{ {
super(matcher); super(matcher);
list = new LinkedList<>(); list = new LinkedList<>();
order = Order.BY_POSITION;
} }
@Override @Override
@ -57,6 +66,7 @@ public class MemoryHabitList extends HabitList
if (id == null) habit.setId((long) list.size()); if (id == null) habit.setId((long) list.size());
list.addLast(habit); list.addLast(habit);
resort();
} }
@Override @Override
@ -82,10 +92,17 @@ public class MemoryHabitList extends HabitList
public HabitList getFiltered(HabitMatcher matcher) public HabitList getFiltered(HabitMatcher matcher)
{ {
MemoryHabitList habits = new MemoryHabitList(matcher); MemoryHabitList habits = new MemoryHabitList(matcher);
habits.comparator = comparator;
for (Habit h : this) if (matcher.matches(h)) habits.add(h); for (Habit h : this) if (matcher.matches(h)) habits.add(h);
return habits; return habits;
} }
@Override
public Order getOrder()
{
return order;
}
@Override @Override
public int indexOf(@NonNull Habit h) public int indexOf(@NonNull Habit h)
{ {
@ -112,6 +129,14 @@ public class MemoryHabitList extends HabitList
list.add(toPos, from); list.add(toPos, from);
} }
@Override
public void setOrder(@NonNull Order order)
{
this.order = order;
this.comparator = getComparatorByOrder(order);
resort();
}
@Override @Override
public int size() public int size()
{ {
@ -123,4 +148,34 @@ public class MemoryHabitList extends HabitList
{ {
// NOP // NOP
} }
private Comparator<Habit> getComparatorByOrder(Order order)
{
Comparator<Habit> nameComparator =
(h1, h2) -> h1.getName().compareTo(h2.getName());
Comparator<Habit> colorComparator = (h1, h2) -> {
Integer c1 = h1.getColor();
Integer c2 = h2.getColor();
if (c1.equals(c2)) return nameComparator.compare(h1, h2);
else return c1.compareTo(c2);
};
Comparator<Habit> scoreComparator = (h1, h2) -> {
int s1 = h1.getScores().getTodayValue();
int s2 = h2.getScores().getTodayValue();
return Integer.compare(s2, s1);
};
if (order == BY_POSITION) return null;
if (order == BY_NAME) return nameComparator;
if (order == BY_COLOR) return colorComparator;
if (order == BY_SCORE) return scoreComparator;
throw new IllegalStateException();
}
private void resort()
{
if (comparator != null) Collections.sort(list, comparator);
}
} }

@ -39,10 +39,15 @@ public class SQLiteHabitList extends HabitList
private static SQLiteHabitList instance; private static SQLiteHabitList instance;
@NonNull
private final SQLiteUtils<HabitRecord> sqlite; private final SQLiteUtils<HabitRecord> sqlite;
@NonNull
private final ModelFactory modelFactory; private final ModelFactory modelFactory;
@NonNull
private Order order;
public SQLiteHabitList(@NonNull ModelFactory modelFactory) public SQLiteHabitList(@NonNull ModelFactory modelFactory)
{ {
super(); super();
@ -50,16 +55,19 @@ public class SQLiteHabitList extends HabitList
if (cache == null) cache = new HashMap<>(); if (cache == null) cache = new HashMap<>();
sqlite = new SQLiteUtils<>(HabitRecord.class); sqlite = new SQLiteUtils<>(HabitRecord.class);
order = Order.BY_POSITION;
} }
protected SQLiteHabitList(@NonNull ModelFactory modelFactory, protected SQLiteHabitList(@NonNull ModelFactory modelFactory,
@NonNull HabitMatcher filter) @NonNull HabitMatcher filter,
@NonNull Order order)
{ {
super(filter); super(filter);
this.modelFactory = modelFactory; this.modelFactory = modelFactory;
if (cache == null) cache = new HashMap<>(); if (cache == null) cache = new HashMap<>();
sqlite = new SQLiteUtils<>(HabitRecord.class); sqlite = new SQLiteUtils<>(HabitRecord.class);
this.order = order;
} }
public static SQLiteHabitList getInstance( public static SQLiteHabitList getInstance(
@ -118,7 +126,20 @@ public class SQLiteHabitList extends HabitList
@Override @Override
public HabitList getFiltered(HabitMatcher filter) public HabitList getFiltered(HabitMatcher filter)
{ {
return new SQLiteHabitList(modelFactory, filter); return new SQLiteHabitList(modelFactory, filter, order);
}
@Override
@NonNull
public Order getOrder()
{
return order;
}
@Override
public void setOrder(@NonNull Order order)
{
this.order = order;
} }
@Override @Override
@ -214,6 +235,13 @@ public class SQLiteHabitList extends HabitList
getObservable().notifyListeners(); getObservable().notifyListeners();
} }
@Override
public void repair()
{
super.repair();
rebuildOrder();
}
@Override @Override
public int size() public int size()
{ {
@ -249,12 +277,38 @@ public class SQLiteHabitList extends HabitList
habits.add(habit); habits.add(habit);
} }
if(order == Order.BY_SCORE)
{
Collections.sort(habits, (lhs, rhs) -> {
int s1 = lhs.getScores().getTodayValue();
int s2 = rhs.getScores().getTodayValue();
return Integer.compare(s2, s1);
});
}
return habits; return habits;
} }
private void appendOrderBy(StringBuilder query) private void appendOrderBy(StringBuilder query)
{ {
switch (order)
{
case BY_POSITION:
query.append("order by position "); query.append("order by position ");
break;
case BY_NAME:
case BY_SCORE:
query.append("order by name ");
break;
case BY_COLOR:
query.append("order by color, name ");
break;
default:
throw new IllegalStateException();
}
} }
private void appendSelect(StringBuilder query) private void appendSelect(StringBuilder query)
@ -282,11 +336,4 @@ public class SQLiteHabitList extends HabitList
appendOrderBy(query); appendOrderBy(query);
return query.toString(); return query.toString();
} }
@Override
public void repair()
{
super.repair();
rebuildOrder();
}
} }

@ -22,6 +22,8 @@ package org.isoron.uhabits.models.sqlite.records;
import android.annotation.*; import android.annotation.*;
import android.database.*; import android.database.*;
import android.support.annotation.*; import android.support.annotation.*;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.activeandroid.*; import com.activeandroid.*;
import com.activeandroid.annotation.*; import com.activeandroid.annotation.*;

@ -24,6 +24,7 @@ import android.preference.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.*;
import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.*;
import org.isoron.uhabits.models.*;
import java.util.*; import java.util.*;
@ -61,6 +62,21 @@ public class Preferences
return prefs.getInt("pref_default_habit_palette_color", fallbackColor); return prefs.getInt("pref_default_habit_palette_color", fallbackColor);
} }
public HabitList.Order getDefaultOrder()
{
String name = prefs.getString("pref_default_order", "BY_POSITION");
try
{
return HabitList.Order.valueOf(name);
}
catch (IllegalArgumentException e)
{
setDefaultOrder(HabitList.Order.BY_POSITION);
return HabitList.Order.BY_POSITION;
}
}
public int getDefaultScoreSpinnerPosition() public int getDefaultScoreSpinnerPosition()
{ {
int defaultScoreInterval = prefs.getInt("pref_score_view_interval", 1); int defaultScoreInterval = prefs.getInt("pref_score_view_interval", 1);
@ -69,6 +85,11 @@ public class Preferences
return defaultScoreInterval; return defaultScoreInterval;
} }
public void setDefaultOrder(HabitList.Order order)
{
prefs.edit().putString("pref_default_order", order.name()).apply();
}
public void setDefaultScoreSpinnerPosition(int position) public void setDefaultScoreSpinnerPosition(int position)
{ {
prefs.edit().putInt("pref_score_view_interval", position).apply(); prefs.edit().putInt("pref_score_view_interval", position).apply();

@ -40,6 +40,9 @@ public class PebbleReceiver extends PebbleDataReceiver
public static final UUID WATCHAPP_UUID = public static final UUID WATCHAPP_UUID =
UUID.fromString("82629d99-8ea6-4631-a022-9ca77a12a058"); UUID.fromString("82629d99-8ea6-4631-a022-9ca77a12a058");
@NonNull
private Context context;
private HabitList allHabits; private HabitList allHabits;
private CommandRunner commandRunner; private CommandRunner commandRunner;
@ -61,6 +64,8 @@ public class PebbleReceiver extends PebbleDataReceiver
if (context == null) throw new RuntimeException("context is null"); if (context == null) throw new RuntimeException("context is null");
if (data == null) throw new RuntimeException("data is null"); if (data == null) throw new RuntimeException("data is null");
this.context = context;
HabitsApplication app = HabitsApplication app =
(HabitsApplication) context.getApplicationContext(); (HabitsApplication) context.getApplicationContext();
@ -136,7 +141,7 @@ public class PebbleReceiver extends PebbleDataReceiver
private void sendDict(@NonNull PebbleDictionary dict) private void sendDict(@NonNull PebbleDictionary dict)
{ {
PebbleKit.sendDataToPebble(HabitsApplication.getContext(), PebbleKit.sendDataToPebble(context,
PebbleReceiver.WATCHAPP_UUID, dict); PebbleReceiver.WATCHAPP_UUID, dict);
} }

@ -19,10 +19,13 @@
package org.isoron.uhabits.tasks; package org.isoron.uhabits.tasks;
import android.content.Context;
import android.support.annotation.*; import android.support.annotation.*;
import com.google.auto.factory.*; import com.google.auto.factory.*;
import org.isoron.uhabits.AppContext;
import org.isoron.uhabits.activities.ActivityContext;
import org.isoron.uhabits.io.*; import org.isoron.uhabits.io.*;
import org.isoron.uhabits.models.*; import org.isoron.uhabits.models.*;
import org.isoron.uhabits.utils.*; import org.isoron.uhabits.utils.*;
@ -35,6 +38,9 @@ public class ExportCSVTask implements Task
{ {
private String archiveFilename; private String archiveFilename;
@NonNull
private final Context context;
@NonNull @NonNull
private final List<Habit> selectedHabits; private final List<Habit> selectedHabits;
@ -44,10 +50,12 @@ public class ExportCSVTask implements Task
@NonNull @NonNull
private final HabitList habitList; private final HabitList habitList;
public ExportCSVTask(@Provided @NonNull HabitList habitList, public ExportCSVTask(@Provided @AppContext @NonNull Context context,
@Provided @NonNull HabitList habitList,
@NonNull List<Habit> selectedHabits, @NonNull List<Habit> selectedHabits,
@NonNull Listener listener) @NonNull Listener listener)
{ {
this.context = context;
this.listener = listener; this.listener = listener;
this.habitList = habitList; this.habitList = habitList;
this.selectedHabits = selectedHabits; this.selectedHabits = selectedHabits;
@ -58,7 +66,7 @@ public class ExportCSVTask implements Task
{ {
try try
{ {
File dir = FileUtils.getFilesDir("CSV"); File dir = FileUtils.getFilesDir(context, "CSV");
if (dir == null) return; if (dir == null) return;
HabitsCSVExporter exporter; HabitsCSVExporter exporter;

@ -19,22 +19,33 @@
package org.isoron.uhabits.tasks; package org.isoron.uhabits.tasks;
import android.content.Context;
import android.support.annotation.*; import android.support.annotation.*;
import com.google.auto.factory.AutoFactory;
import com.google.auto.factory.Provided;
import org.isoron.uhabits.AppContext;
import org.isoron.uhabits.activities.ActivityContext;
import org.isoron.uhabits.utils.*; import org.isoron.uhabits.utils.*;
import java.io.*; import java.io.*;
@AutoFactory(allowSubclasses = true)
public class ExportDBTask implements Task public class ExportDBTask implements Task
{ {
private String filename; private String filename;
@NonNull
private Context context;
@NonNull @NonNull
private final Listener listener; private final Listener listener;
public ExportDBTask(@NonNull Listener listener) public ExportDBTask(@Provided @AppContext @NonNull Context context, @NonNull Listener listener)
{ {
this.listener = listener; this.listener = listener;
this.context = context;
} }
@Override @Override
@ -44,10 +55,10 @@ public class ExportDBTask implements Task
try try
{ {
File dir = FileUtils.getFilesDir("Backups"); File dir = FileUtils.getFilesDir(context, "Backups");
if (dir == null) return; if (dir == null) return;
filename = DatabaseUtils.saveDatabaseCopy(dir); filename = DatabaseUtils.saveDatabaseCopy(context, dir);
} }
catch (IOException e) catch (IOException e)
{ {

@ -47,9 +47,8 @@ public abstract class DatabaseUtils
} }
@NonNull @NonNull
public static File getDatabaseFile() public static File getDatabaseFile(Context context)
{ {
Context context = HabitsApplication.getContext();
String databaseFilename = getDatabaseFilename(); String databaseFilename = getDatabaseFilename();
String root = context.getFilesDir().getPath(); String root = context.getFilesDir().getPath();
@ -68,9 +67,8 @@ public abstract class DatabaseUtils
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static void initializeActiveAndroid() public static void initializeActiveAndroid(Context context)
{ {
Context context = HabitsApplication.getContext();
Configuration dbConfig = new Configuration.Builder(context) Configuration dbConfig = new Configuration.Builder(context)
.setDatabaseName(getDatabaseFilename()) .setDatabaseName(getDatabaseFilename())
.setDatabaseVersion(BuildConfig.databaseVersion) .setDatabaseVersion(BuildConfig.databaseVersion)
@ -82,14 +80,14 @@ public abstract class DatabaseUtils
} }
@SuppressWarnings("ResultOfMethodCallIgnored") @SuppressWarnings("ResultOfMethodCallIgnored")
public static String saveDatabaseCopy(File dir) throws IOException public static String saveDatabaseCopy(Context context, File dir) throws IOException
{ {
SimpleDateFormat dateFormat = DateFormats.getBackupDateFormat(); SimpleDateFormat dateFormat = DateFormats.getBackupDateFormat();
String date = dateFormat.format(DateUtils.getLocalTime()); String date = dateFormat.format(DateUtils.getLocalTime());
String format = "%s/Loop Habits Backup %s.db"; String format = "%s/Loop Habits Backup %s.db";
String filename = String.format(format, dir.getAbsolutePath(), date); String filename = String.format(format, dir.getAbsolutePath(), date);
File db = getDatabaseFile(); File db = getDatabaseFile(context);
File dbCopy = new File(filename); File dbCopy = new File(filename);
FileUtils.copy(db, dbCopy); FileUtils.copy(db, dbCopy);

@ -187,6 +187,11 @@ public abstract class DateUtils
return getStartOfDay(DateUtils.getLocalTime()); return getStartOfDay(DateUtils.getLocalTime());
} }
public static long millisecondsUntilTomorrow()
{
return getStartOfToday() + millisecondsInOneDay - getLocalTime();
}
public static GregorianCalendar getStartOfTodayCalendar() public static GregorianCalendar getStartOfTodayCalendar()
{ {
return getCalendar(getStartOfToday()); return getCalendar(getStartOfToday());

@ -87,9 +87,8 @@ public abstract class FileUtils
} }
@Nullable @Nullable
public static File getFilesDir(@Nullable String relativePath) public static File getFilesDir(@NonNull Context context, @Nullable String relativePath)
{ {
Context context = HabitsApplication.getContext();
File externalFilesDirs[] = File externalFilesDirs[] =
ContextCompat.getExternalFilesDirs(context, null); ContextCompat.getExternalFilesDirs(context, null);

@ -24,17 +24,8 @@ import android.content.res.*;
import android.graphics.*; import android.graphics.*;
import android.util.*; import android.util.*;
import java.util.*;
public abstract class InterfaceUtils public abstract class InterfaceUtils
{ {
// TODO: Move this to another place, or detect automatically
private static String fullyTranslatedLanguages[] = {
"ca", "zh", "en", "de", "in", "it", "ko", "pl", "pt", "es", "tk", "uk",
"ja", "fr", "hr", "sl"
};
private static Typeface fontAwesome; private static Typeface fontAwesome;
public static Typeface getFontAwesome(Context context) public static Typeface getFontAwesome(Context context)
@ -58,15 +49,4 @@ public abstract class InterfaceUtils
DisplayMetrics metrics = resources.getDisplayMetrics(); DisplayMetrics metrics = resources.getDisplayMetrics();
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, metrics); return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, metrics);
} }
public static boolean isLocaleFullyTranslated()
{
final String currentLanguage = Locale.getDefault().getLanguage();
for(String lang : fullyTranslatedLanguages)
if(currentLanguage.equals(lang)) return true;
return false;
}
} }

@ -0,0 +1,77 @@
/*
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
*
* This file is part of Loop Habit Tracker.
*
* Loop Habit Tracker is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Loop Habit Tracker is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.isoron.uhabits.utils;
import org.isoron.uhabits.activities.*;
import java.util.*;
import java.util.concurrent.*;
import javax.inject.*;
/**
* A class that emits events when a new day starts.
*/
@ActivityScope
public class MidnightTimer
{
private final List<MidnightListener> listeners;
private ScheduledExecutorService executor;
@Inject
public MidnightTimer()
{
this.listeners = new LinkedList<>();
}
public synchronized void addListener(MidnightListener listener)
{
this.listeners.add(listener);
}
public synchronized void onPause()
{
executor.shutdownNow();
}
public synchronized void onResume()
{
executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(() -> notifyListeners(),
DateUtils.millisecondsUntilTomorrow() + 1000,
DateUtils.millisecondsInOneDay, TimeUnit.MILLISECONDS);
}
public synchronized void removeListener(MidnightListener listener)
{
this.listeners.remove(listener);
}
private synchronized void notifyListeners()
{
for (MidnightListener l : listeners) l.atMidnight();
}
public interface MidnightListener
{
void atMidnight();
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 397 B

@ -31,6 +31,7 @@
style="@style/Toolbar"/> style="@style/Toolbar"/>
<ScrollView <ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/toolbar"> android:layout_below="@id/toolbar">
@ -86,6 +87,11 @@
style="@style/About.Item.Clickable" style="@style/About.Item.Clickable"
android:text="@string/pref_send_feedback"/> android:text="@string/pref_send_feedback"/>
<TextView
android:id="@+id/tvTranslate"
style="@style/About.Item.Clickable"
android:text="@string/help_translate"/>
<TextView <TextView
android:id="@+id/tvSource" android:id="@+id/tvSource"
style="@style/About.Item.Clickable" style="@style/About.Item.Clickable"
@ -117,6 +123,9 @@
<TextView <TextView
style="@style/About.Item" style="@style/About.Item"
android:text="Nikhil (regularcoder)"/> android:text="Nikhil (regularcoder)"/>
<TextView
style="@style/About.Item"
android:text="JanetQC"/>
</LinearLayout> </LinearLayout>
@ -129,17 +138,33 @@
android:text="@string/translators" android:text="@string/translators"
android:textColor="?aboutScreenColor"/> android:textColor="?aboutScreenColor"/>
<TextView
style="@style/About.Item"
android:text="Mihail Stefanov (Bǎlgarski)"/>
<TextView <TextView
style="@style/About.Item" style="@style/About.Item"
android:text="Angga Rifandi (Bahasa Indonesia)"/> android:text="Angga Rifandi (Bahasa Indonesia)"/>
<TextView
style="@style/About.Item"
android:text="David Nos (Català)"/>
<TextView <TextView
style="@style/About.Item" style="@style/About.Item"
android:text="Tomáš Borovec (Čeština)"/> android:text="Tomáš Borovec (Čeština)"/>
<TextView <TextView
style="@style/About.Item" style="@style/About.Item"
android:text="David Nos (Català)"/> android:text="Rancher (Cрпски)"/>
<TextView
style="@style/About.Item"
android:text="Yussuf (Dansk)"/>
<TextView
style="@style/About.Item"
android:text="Sølv Ræven (Dansk)"/>
<TextView <TextView
style="@style/About.Item" style="@style/About.Item"
@ -157,6 +182,22 @@
style="@style/About.Item" style="@style/About.Item"
android:text="Ander Raso Vazquez (Español)"/> android:text="Ander Raso Vazquez (Español)"/>
<TextView
style="@style/About.Item"
android:text="Beriain (Euskara)"/>
<TextView
style="@style/About.Item"
android:text="Andreas Michelakis (Ελληνικά)"/>
<TextView
style="@style/About.Item"
android:text="Eman (Fārsi)"/>
<TextView
style="@style/About.Item"
android:text="Saeed Esmaili (Fārsi)"/>
<TextView <TextView
style="@style/About.Item" style="@style/About.Item"
android:text="François Mahé (Français)"/> android:text="François Mahé (Français)"/>
@ -205,6 +246,10 @@
style="@style/About.Item" style="@style/About.Item"
android:text="Dmitriy Bogdanov (Русский)"/> android:text="Dmitriy Bogdanov (Русский)"/>
<TextView
style="@style/About.Item"
android:text="Andrei Pleș (Română)"/>
<TextView <TextView
style="@style/About.Item" style="@style/About.Item"
android:text="Dušan Strgar (Slovenščina)"/> android:text="Dušan Strgar (Slovenščina)"/>
@ -272,10 +317,6 @@
<TextView <TextView
style="@style/About.Item" style="@style/About.Item"
android:text="Aman Satnami (हिन्दी)"/> android:text="Aman Satnami (हिन्दी)"/>
<TextView
style="@style/About.Item"
android:text="Andreas Michelakis (Ελληνικά)"/>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>

@ -79,7 +79,7 @@
<EditText <EditText
android:id="@+id/tvFreqNum" android:id="@+id/tvFreqNum"
style="@style/dialogFormInputSmallNumber"/> style="@style/dialogFormInputLargeNumber"/>
<TextView <TextView
android:id="@+id/textView3" android:id="@+id/textView3"
@ -89,7 +89,7 @@
<EditText <EditText
android:id="@+id/tvFreqDen" android:id="@+id/tvFreqDen"
style="@style/dialogFormInputSmallNumber"/> style="@style/dialogFormInputLargeNumber"/>
<TextView <TextView
android:id="@+id/textView5" android:id="@+id/textView5"

@ -21,6 +21,7 @@
<ScrollView <ScrollView
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/scrollView"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/toolbar" android:layout_below="@id/toolbar"

@ -45,6 +45,26 @@
android:checkable="true" android:checkable="true"
android:enabled="true" android:enabled="true"
android:title="@string/hide_completed"/> android:title="@string/hide_completed"/>
<item android:title="@string/sort">
<menu>
<item
android:id="@+id/actionSortManual"
android:title="@string/manually"/>
<item
android:id="@+id/actionSortName"
android:title="@string/by_name"/>
<item
android:id="@+id/actionSortColor"
android:title="@string/by_color"/>
<item
android:id="@+id/actionSortScore"
android:title="@string/by_score"/>
</menu>
</item>
</menu> </menu>
</item> </item>
@ -73,5 +93,4 @@
android:orderInCategory="100" android:orderInCategory="100"
android:title="@string/about" android:title="@string/about"
app:showAsAction="never"/> app:showAsAction="never"/>
</menu> </menu>

@ -21,6 +21,11 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/export"
android:title="@string/export"
app:showAsAction="never"/>
<item <item
android:id="@+id/action_edit_habit" android:id="@+id/action_edit_habit"
android:icon="?iconEdit" android:icon="?iconEdit"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
~
~ This file is part of Loop Habit Tracker.
~
~ Loop Habit Tracker is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by the
~ Free Software Foundation, either version 3 of the License, or (at your
~ option) any later version.
~
~ Loop Habit Tracker is distributed in the hope that it will be useful, but
~ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
~ more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources>
<!-- App introduction -->
<!-- Middle part of the sentence '1 time in xx days' -->
</resources>

@ -1,190 +1,162 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
~
~ This file is part of Loop Habit Tracker.
~
~ Loop Habit Tracker is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by the
~ Free Software Foundation, either version 3 of the License, or (at your
~ option) any later version.
~
~ Loop Habit Tracker is distributed in the hope that it will be useful, but
~ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
~ more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources> <resources>
<string name="app_name">لوب ملاحق العادة </string>
<!-- There is no letter P in arabic so the name is unfortunately translated to "Loob" --> <string name="main_activity_title">عادات</string>
<string name="app_name">"لوب ملاحق العادة "</string> <string name="action_settings">إعدادات</string>
<string name="main_activity_title">"عادات"</string> <string name="edit">تعديل</string>
<string name="action_settings">"إعدادات"</string> <string name="delete">حذف</string>
<string name="edit">"تعديل"</string> <string name="archive">أرشيف</string>
<string name="delete">"حذف"</string> <string name="unarchive">إزالة من الأرشيف</string>
<string name="archive">"أرشيف"</string> <string name="add_habit">إضافة العادة</string>
<string name="unarchive">"إزالة من الأرشيف"</string> <string name="color_picker_default_title">غير اللون</string>
<string name="add_habit">"إضافة العادة"</string> <string name="toast_habit_created">تم صنع عادة </string>
<string name="color_picker_default_title">"غير اللون"</string> <string name="toast_habit_deleted">تم حذف عادة </string>
<string name="toast_habit_created">"تم صنع عادة "</string> <string name="toast_habit_restored">تم ترجيع عادة</string>
<string name="toast_habit_deleted">"تم حذف عادة "</string> <string name="toast_nothing_to_undo">لا شيء للتراجع</string>
<string name="toast_habit_restored">"تم ترجيع عادة"</string> <string name="toast_nothing_to_redo">لا شيء لتكرار</string>
<string name="toast_nothing_to_undo">"لا شيء للتراجع"</string> <string name="toast_habit_changed">تم تغييرعادة</string>
<string name="toast_nothing_to_redo">"لا شيء لتكرار"</string> <string name="toast_habit_changed_back">تم ترجيع العادة إلى أصلها</string>
<string name="toast_habit_changed">"تم تغييرعادة"</string> <string name="toast_habit_archived">تم أرشيف العادات</string>
<string name="toast_habit_unarchived">تم إزالة العادة من الأرشيف </string>
<!-- This appears when the user edits a habit, and then undoes the action. The habit is "changed back" to what is was before. Alternatively, "Habit restored". --> <string name="overview">نظرة عامة</string>
<string name="toast_habit_changed_back">"تم ترجيع العادة إلى أصلها"</string> <string name="habit_strength">قوة العادة</string>
<string name="toast_habit_archived">"تم أرشيف العادات"</string> <string name="history">التاريخ</string>
<string name="toast_habit_unarchived">"تم إزالة العادة من الأرشيف "</string> <string name="clear">مسح</string>
<string name="overview">"نظرة عامة"</string> <string name="description_hint">السؤال (هل ... اليوم؟)</string>
<string name="habit_strength">"قوة العادة"</string> <string name="repeat">كرر</string>
<string name="history">"التاريخ"</string> <string name="times_every">مرات في</string>
<string name="clear">"مسح"</string> <string name="days">أيام</string>
<string name="description_hint">"السؤال (هل ... اليوم؟)"</string> <string name="reminder">تذكير</string>
<string name="discard">حذف</string>
<!-- This and the next two terms form the sentence "Repeat 3 times in 7 days" that you see when you create a habit. Let me know if you have trouble adapting this into your language. --> <string name="save">حفظ</string>
<string name="repeat">"كرر"</string> <string name="streaks">تقدم متتالية</string>
<string name="times_every">"مرات في"</string> <string name="no_habits_found"> لا يوجد لديك عادات مفعله</string>
<string name="days">"أيام"</string> <string name="long_press_to_toggle">أضغط و إستمر لتحقق أو ازل</string>
<string name="reminder">"تذكير"</string> <string name="reminder_off">أوقف</string>
<string name="discard">"حذف"</string> <string name="validation_name_should_not_be_blank">لا يمكن أن يكون الإسم فارغ</string>
<string name="save">"حفظ"</string> <string name="validation_number_should_be_positive">يجب أن يكون الرقم إيجابي</string>
<string name="validation_at_most_one_rep_per_day">يمكن أن يكون التكرار واحدة فقط كل يوم </string>
<!-- Streak as in "winning streak". That is, the number of times a user has performed a habit consecutively. Similar terms are "chains" or "series". --> <string name="create_habit">اخلق عادة</string>
<string name="streaks">"تقدم متتالية"</string> <string name="edit_habit">تعديل العادة</string>
<string name="no_habits_found">" لا يوجد لديك عادات مفعله"</string> <string name="check">حقق</string>
<string name="long_press_to_toggle">"أضغط و إستمر لتحقق أو ازل"</string> <string name="snooze">لاحقا</string>
<string name="reminder_off">"أوقف"</string>
<string name="validation_name_should_not_be_blank">"لا يمكن أن يكون الإسم فارغ"</string>
<string name="validation_number_should_be_positive">"يجب أن يكون الرقم إيجابي"</string>
<string name="validation_at_most_one_rep_per_day">"يمكن أن يكون التكرار واحدة فقط كل يوم "</string>
<string name="create_habit">"اخلق عادة"</string>
<string name="edit_habit">"تعديل العادة"</string>
<string name="check">"حقق"</string>
<string name="snooze">"لاحقا"</string>
<!-- App introduction --> <!-- App introduction -->
<string name="intro_title_1">"أهلا بك"</string> <string name="intro_title_1">أهلا بك</string>
<string name="intro_description_1">"لوب يساعدك على خلق والحفاظ على العادات الجيدة."</string> <string name="intro_description_1">لوب يساعدك على خلق والحفاظ على العادات الجيدة.</string>
<string name="intro_title_2">"إنشاء بعض عادات جديدة"</string> <string name="intro_title_2">إنشاء بعض عادات جديدة</string>
<string name="intro_description_2">"كل يوم، بعد أداء عادتك، وضع علامة على التطبيق."</string> <string name="intro_description_2">كل يوم، بعد أداء عادتك، وضع علامة على التطبيق.</string>
<string name="intro_title_3">"حافظ على القيام بذلك"</string> <string name="intro_title_3">حافظ على القيام بذلك</string>
<string name="intro_description_3">"العادة المستمرة لفترات طويلة تكسب نجمة كامله"</string> <string name="intro_description_3">العادة المستمرة لفترات طويلة تكسب نجمة كامله</string>
<string name="intro_title_4">"تتبع تقدمك"</string> <string name="intro_title_4">تتبع تقدمك</string>
<string name="intro_description_4">"رسوم بيانية مفصلة تبين لكم كيف تحسن عاداتك مع مرور الوقت."</string> <string name="intro_description_4">رسوم بيانية مفصلة تبين لكم كيف تحسن عاداتك مع مرور الوقت.</string>
<string name="interval_15_minutes">"15 دقيقة"</string> <string name="interval_15_minutes">15 دقيقة</string>
<string name="interval_30_minutes">"30 دقيقة"</string> <string name="interval_30_minutes">30 دقيقة</string>
<string name="interval_1_hour">"ساعة واحدة"</string> <string name="interval_1_hour">ساعة واحدة</string>
<string name="interval_2_hour">"ساعتين"</string> <string name="interval_2_hour">ساعتين</string>
<string name="interval_4_hour">"أربع ساعات"</string> <string name="interval_4_hour">أربع ساعات</string>
<string name="interval_8_hour">"ثماني ساعات"</string> <string name="interval_8_hour">ثماني ساعات</string>
<string name="pref_toggle_title">"تبديل بكبسه"</string> <string name="interval_24_hour">24 ساعة</string>
<string name="pref_toggle_description">"أكثر سهولة، لكنه ممكن يسبب كبسات غير مقصوده"</string> <string name="pref_toggle_title">تبديل بكبسه</string>
<string name="pref_snooze_interval_title">"فترتي الغفوى على التذكير"</string> <string name="pref_toggle_description">أكثر سهولة، لكنه ممكن يسبب كبسات غير مقصوده</string>
<string name="pref_rate_this_app">"تقييم هذا التطبيق على جوجل بلاي"</string> <string name="pref_snooze_interval_title">فترتي الغفوى على التذكير</string>
<string name="pref_send_feedback">"أرسل الملاحظات إلى المطور"</string> <string name="pref_rate_this_app">تقييم هذا التطبيق على جوجل بلاي</string>
<string name="pref_view_source_code">"إفحص التعليمات البرمجية على GitHub"</string> <string name="pref_send_feedback">أرسل الملاحظات إلى المطور</string>
<string name="pref_view_app_introduction">"عرض المقدمه"</string> <string name="pref_view_source_code">إفحص التعليمات البرمجية على GitHub</string>
<string name="links">"روابط"</string> <string name="pref_view_app_introduction">عرض المقدمه</string>
<string name="behavior">"سلوك"</string> <string name="links">روابط</string>
<string name="name">"اسم"</string> <string name="behavior">سلوك</string>
<string name="show_archived">"عرض أرشفة"</string> <string name="name">اسم</string>
<string name="settings">"إعدادات"</string> <string name="settings">إعدادات</string>
<string name="snooze_interval">"فترتي الغفوه"</string> <string name="snooze_interval">فترتي الغفوه</string>
<string name="hint_title">"هل كنت تعلم؟"</string> <string name="hint_title">هل كنت تعلم؟</string>
<string name="hint_drag">"لإعادة ترتيب القوائم، أضغط اسم من هذه العادة، ثم اسحبه إلى المكان الصحيح."</string> <string name="hint_drag">لإعادة ترتيب القوائم، أضغط اسم من هذه العادة، ثم اسحبه إلى المكان الصحيح.</string>
<string name="hint_landscape">"يمكنك ان ترى المزيد أيام عن طريق وضع الهاتف في وضع أفقي."</string> <string name="hint_landscape">يمكنك ان ترى المزيد أيام عن طريق وضع الهاتف في وضع أفقي.</string>
<string name="delete_habits">"حذف عادات"</string> <string name="delete_habits">حذف عادات</string>
<string name="delete_habits_message">"سيتم حذف عادات بشكل دائم. هذا العمل لا يمكن التراجع عنه."</string> <string name="delete_habits_message">سيتم حذف عادات بشكل دائم. هذا العمل لا يمكن التراجع عنه.</string>
<string name="weekends">"عطلة نهاية الأسبوع"</string> <string name="weekends">عطلة نهاية الأسبوع</string>
<string name="any_weekday">أيام الأسبوع</string>
<!-- Fuzzy --> <string name="any_day">أي يوم</string>
<string name="any_weekday">"أيام الأسبوع"</string> <string name="select_weekdays">إختار أيام </string>
<string name="export_to_csv">تصدير البيانات (CSV)</string>
<!-- Fuzzy --> <string name="done_label">منجز</string>
<string name="any_day">"أي يوم"</string> <string name="clear_label">نظف</string>
<string name="select_hours">تحديد ساعات</string>
<!-- This is a bit unclear to me. It is like a prompt asking the user to select specific days, or is it more like an alarm mode where it will only activate on select days? --> <string name="select_minutes">تحديد دقائق </string>
<string name="select_weekdays">"إختار أيام "</string> <string name="about">معلومات حول</string>
<string name="translators">المترجمين</string>
<!-- Fuzzy --> <string name="developers">المطورين</string>
<string name="export_to_csv">"تصدير البيانات (CSV)"</string> <string name="version_n">الإصدار %s</string>
<string name="done_label">"منجز"</string> <string name="frequency">تردد</string>
<string name="clear_label">"نظف"</string> <string name="checkmark">علامة الاختيار</string>
<string name="select_hours">"تحديد ساعات"</string> <string name="strength">القوة</string>
<string name="select_minutes">"تحديد دقائق "</string> <string name="best_streaks">أكثر تقدم</string>
<string name="current_streaks">تقدم الحالي</string>
<!-- Short description used on the Google Play store. There is an 80-character limit. --> <string name="number_of_repetitions">عدد من حالات التكرار</string>
<string name="store_short_description">"خلق عادات جيدة وتتبع تقدمك على مر الزمن"</string> <string name="last_x_days">آخر %d أيام</string>
<string name="store_description_1">"لب يساعدك على خلق والحفاظ على العادات الجيدة، مما يسمح لك لتحقيق أهدافكة. الرسوم البيانية والإحصاءات التفصيلية تبين لكم كيف تحسن عاداتك مع مرور الوقت. هو تماما خالية من الاعلانات ومفتوحة المصدر."</string> <string name="last_x_weeks">آخر %d أسابيع</string>
<string name="store_feature_interface">"&lt;b&gt;واجهة بسيطة، جميلة وحديثة &lt;/b&gt; <string name="last_x_months">آخر %d أشهر</string>
لوب يحتوي على واجهة بسيطة وهي سهلة الاستخدام و تتابع نظام تصميم الماتريل دسيجن."</string> <string name="last_x_years">آخر %d سنين</string>
<string name="store_feature_score">"&lt;b&gt;نتيجة العادات&lt;/b&gt; <string name="all_time">كل الوقت</string>
بالإضافة إلى عرض التقدم الحالي، لوب ديه خوارزمية متقدمة لحساب قوة عاداتك. كل التكرار يجعل هذه العادة أقوى، وفي كل يوم غاب يجعلها أضعف. مع ذلك غيب أيام قليلة بعد تقدم طويلة ، لن تدمر تماما تقدمك ."</string> <string name="every_day">كل يوم</string>
<string name="store_feature_statistics">"&lt;b&gt;الرسوم البيانية والإحصاءات المفصلة&lt;/b&gt; <string name="every_week">كل اسبوع</string>
نرى بوضوح كيف كنت قد تحسنت عاداتك بمرور الوقت مع الرسوم البيانية الجميله ومفصلة. انتقل إلى الوراء لنرى التاريخ الكامل لعاداتك."</string> <string name="two_times_per_week">مرتين في الأسبوع</string>
<string name="store_feature_schedules">"&lt;b&gt;جداول مرنة&lt;/b&gt; <string name="five_times_per_week">خمس مرات في الأسبوع</string>
تؤيد كل من العادات اليومية والعادات مع جداول أكثر تعقيدا، مثل 3 مرات كل أسبوع، مرة واحدة كل أسبوعين، أو مرة كل يومين."</string> <string name="custom_frequency">مخصص...</string>
<string name="store_feature_reminders">"&lt;b&gt;تذكير&lt;/b&gt; <string name="help">مساعدة والأسئلة المتداولة</string>
إنشاء تذكير لكل فرد من عاداتك، في ساعة اختيار من اليوم. تحقق بسهولة، رفض أو غفوة عادتك مباشرة من الإخطار، دون الحاجة إلى فتح التطبيق."</string> <string name="could_not_export">فشل في تصدير البيانات.</string>
<string name="store_feature_opensource">"&lt;b&gt;خالية تماما من الإعلانات و المصدر المفتوح&lt;/b&gt; <string name="could_not_import">فشل في استيراد البيانات.</string>
لا توجد على الاطلاق الإعلانات والشعارات المزعجة أو أذونات إضافية في هذا التطبيق، و سوف يكون هناك أبدا."</string> <string name="file_not_recognized">الملف غير المعترف.</string>
<string name="store_feature_wear">"&lt;b&gt;الأمثل للساعات الذكية&lt;/b&gt; <string name="habits_imported">نجح إستيراد العادات.</string>
يمكن التحقق من رسائل التذكير، رفض أو غفوة عادتك مباشرة من ساعتك الاندرويد وير. "</string> <string name="full_backup_success">نجح تصدير النسخ الاحتياطي الكامل.</string>
<string name="about">"معلومات حول"</string> <string name="import_data">استيراد بيانات.</string>
<string name="translators">"المترجمين"</string> <string name="export_full_backup">صدر نسخة احتياطية كاملة.</string>
<string name="developers">"المطورين"</string> <string name="import_data_summary">تدعم النسخ الاحتياطي الكامل المصدرة من هذا التطبيق، فضلا عن الملفات التي تم إنشاؤها من Tickmate, HabitBull و Rewire. انظر التعليمات لمزيد من المعلومات.</string>
<string name="export_as_csv_summary">صدر ملف التي يمكن فتحها ببرنامج جداول البيانات مثل إكسل أو وبينوفيس. لا يمكن إستيراد هذا الملف.</string>
<!-- %s will get replaced by the version number. For example, "Versão %d" will become "Versão 1.2.0". --> <string name="export_full_backup_summary">إنشاء ملف يحتوي على كافة البيانات. يمكن استيراد هذا الملف نفسه.</string>
<string name="version_n">"الإصدار %s"</string> <string name="bug_report_failed">فشل في توليد تقرير الاعطال</string>
<string name="frequency">"تردد"</string> <string name="generate_bug_report">توليد تقرير الاعطال</string>
<string name="checkmark">"علامة الاختيار"</string> <string name="troubleshooting">استكشاف الأخطاء وإصلاحها</string>
<string name="help_translate">المساعدة في ترجمة هذا البرنامج</string>
<!-- This is a shorter version of "Habit Strength" --> <string name="night_mode">الوضع الليلي</string>
<string name="strength">"القوة"</string> <string name="use_pure_black">استخدام أسود نقي في الوضع الليلي</string>
<string name="best_streaks">"أكثر تقدم"</string> <string name="pure_black_description">يستبدل خلفيات رمادية مع أسود نقي في الوضع الليلي. يقلل من استهلاك البطارية في الهواتف مع شاشة AMOLED.</string>
<string name="current_streaks">"تقدم الحالي"</string> <string name="interface_preferences">السطح البيني</string>
<string name="number_of_repetitions">"عدد من حالات التكرار"</string> <string name="reverse_days">ترتيب عكسي أيام</string>
<string name="last_x_days">"آخر %d أيام"</string> <string name="reverse_days_description">عرض أيام في ترتيب عكسي على الشاشة الرئيسية</string>
<string name="last_x_weeks">"آخر %d أسابيع"</string> <string name="day">يوم</string>
<string name="last_x_months">"آخر %d أشهر"</string> <string name="week">أسبوع</string>
<string name="last_x_years">"آخر %d سنين"</string> <string name="month">شهر</string>
<string name="quarter">ربع سنه</string>
<!-- "All time" number of repetitions. Or number of repetitions "since the beginning". --> <string name="year">عام</string>
<string name="all_time">"كل الوقت"</string> <string name="total">المجموع</string>
<string name="every_day">"كل يوم"</string>
<string name="every_week">"كل اسبوع"</string>
<string name="two_times_per_week">"مرتين في الأسبوع"</string>
<string name="five_times_per_week">"خمس مرات في الأسبوع"</string>
<string name="custom_frequency">"مخصص..."</string>
<string name="help">"مساعدة والأسئلة المتداولة"</string>
<string name="could_not_export">"فشل في تصدير البيانات."</string>
<string name="could_not_import">"فشل في استيراد البيانات."</string>
<!-- Appears when the user tries to import a file which we do not support or recognize. -->
<string name="file_not_recognized">"الملف غير المعترف."</string>
<string name="habits_imported">"نجح إستيراد العادات."</string>
<string name="full_backup_success">"نجح تصدير النسخ الاحتياطي الكامل."</string>
<string name="import_data">"استيراد بيانات."</string>
<string name="export_full_backup">"صدر نسخة احتياطية كاملة."</string>
<string name="import_data_summary">"تدعم النسخ الاحتياطي الكامل المصدرة من هذا التطبيق، فضلا عن الملفات التي تم إنشاؤها من Tickmate, HabitBull و Rewire. انظر التعليمات لمزيد من المعلومات."</string>
<string name="export_as_csv_summary">"صدر ملف التي يمكن فتحها ببرنامج جداول البيانات مثل إكسل أو وبينوفيس. لا يمكن إستيراد هذا الملف."</string>
<string name="export_full_backup_summary">"إنشاء ملف يحتوي على كافة البيانات. يمكن استيراد هذا الملف نفسه."</string>
<string name="bug_report_failed">"فشل في توليد تقرير الاعطال"</string>
<string name="generate_bug_report">"توليد تقرير الاعطال"</string>
<string name="troubleshooting">"استكشاف الأخطاء وإصلاحها"</string>
<string name="help_translate">"المساعدة في ترجمة هذا البرنامج"</string>
<string name="night_mode">"الوضع الليلي"</string>
<string name="use_pure_black">"استخدام أسود نقي في الوضع الليلي"</string>
<string name="pure_black_description">"يستبدل خلفيات رمادية مع أسود نقي في الوضع الليلي. يقلل من استهلاك البطارية في الهواتف مع شاشة AMOLED."</string>
<string name="interface_preferences">"السطح البيني"</string>
<string name="reverse_days">"ترتيب عكسي أيام"</string>
<string name="reverse_days_description">"عرض أيام في ترتيب عكسي على الشاشة الرئيسية"</string>
<string name="day">"يوم"</string>
<string name="week">"أسبوع"</string>
<string name="month">"شهر"</string>
<!-- Three-month period -->
<string name="quarter">"ربع سنه"</string>
<string name="year">"عام"</string>
<!-- Middle part of the sentence '1 time in xx days' --> <!-- Middle part of the sentence '1 time in xx days' -->
<!-- Middle part of the sentence '1 time in xx days' --> <string name="time_every">مرات في</string>
<string name="time_every">"مرات في"</string> <string name="every_x_days">كل %d أيام</string>
<string name="every_x_days">"كل %d أيام"</string> <string name="every_x_weeks">كل %d أسابيع</string>
<string name="every_x_weeks">"كل %d أسابيع"</string> <string name="every_x_months">كل %d أشهر</string>
<string name="every_x_months">"كل %d أشهر"</string> <string name="score">النقاط</string>
<string name="reminder_sound">صوت تذكير</string>
<!-- The old "habit strength" has been replaced by "score". Feel free to translate "score" as "strength" or "stability" if it sounds more natural in your language. --> <string name="none">صامت</string>
<string name="score">"النقاط"</string> <string name="action">عمل</string>
<string name="reminder_sound">"صوت تذكير"</string> <string name="download">تحميل</string>
<string name="export">استخراج</string>
<!-- Appears when the user disables the reminder sound. Could also be "no sound", "mute" or "silent". -->
<string name="none">"صامت"</string>
</resources> </resources>

@ -0,0 +1,157 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
~
~ This file is part of Loop Habit Tracker.
~
~ Loop Habit Tracker is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by the
~ Free Software Foundation, either version 3 of the License, or (at your
~ option) any later version.
~
~ Loop Habit Tracker is distributed in the hope that it will be useful, but
~ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
~ more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources>
<string name="app_name">Loop Следене на навици</string>
<string name="main_activity_title">Навици</string>
<string name="action_settings">Настройки</string>
<string name="edit">Редактиране</string>
<string name="delete">Изтриване</string>
<string name="archive">Архивиране</string>
<string name="unarchive">Разархивиране</string>
<string name="add_habit">Добавяне на навик</string>
<string name="color_picker_default_title">Промяна на цвят</string>
<string name="toast_habit_created">Навикът е създаден</string>
<string name="toast_habit_deleted">Навиците са изтрити</string>
<string name="toast_habit_restored">Навиците са възстановени</string>
<string name="toast_nothing_to_undo">Нищо за отмяна</string>
<string name="toast_nothing_to_redo">Нищо за възстановяване</string>
<string name="toast_habit_changed">Навикът е променен</string>
<string name="toast_habit_changed_back">Промяната на навика е отменена.</string>
<string name="toast_habit_archived">Навиците са архивирани</string>
<string name="toast_habit_unarchived">Навиците са разархивирани</string>
<string name="overview">Обобщение</string>
<string name="habit_strength">Сила на навика</string>
<string name="history">История</string>
<string name="clear">Изчистване</string>
<string name="description_hint">Въпрос (Днес, ... ли?)</string>
<string name="repeat">Повтори</string>
<string name="times_every">пъти в период от</string>
<string name="days">дни</string>
<string name="reminder">Напомняне</string>
<string name="discard">Отказ</string>
<string name="save">Запазване</string>
<string name="streaks">Поредици</string>
<string name="no_habits_found">Нямате активни навици</string>
<string name="long_press_to_toggle">Натиснете и задръжте за да добавите или премахнете отметка</string>
<string name="reminder_off">Изключено</string>
<string name="validation_name_should_not_be_blank">Името не може да бъде празно.</string>
<string name="validation_number_should_be_positive">Числото трябва да е положително.</string>
<string name="validation_at_most_one_rep_per_day">Позволено е до едно повторение на ден.</string>
<string name="create_habit">Създаване на навик</string>
<string name="edit_habit">Редактиране на навик</string>
<string name="check">Потвърди</string>
<string name="snooze">По-късно</string>
<!-- App introduction -->
<string name="intro_title_1">Добре дошли</string>
<string name="intro_description_1">Loop Следене на навици ви помага да създавате и поддържате добри навици.</string>
<string name="intro_title_2">Създайте нови навици</string>
<string name="intro_description_2">Всеки ден, след изпълнението на навика, поставете отметка в приложението.</string>
<string name="intro_title_3">Продължавайте да го изпълнявате</string>
<string name="intro_description_3">Навици изпълнявани редовно за дълго време ще получат пълна звезда.</string>
<string name="intro_title_4">Следете прогреса си</string>
<string name="intro_description_4">Подробни диаграми ви показват как вашите навици са се подобрили с времето.</string>
<string name="interval_15_minutes">15 минути</string>
<string name="interval_30_minutes">30 минути</string>
<string name="interval_1_hour">1 час</string>
<string name="interval_2_hour">2 часа</string>
<string name="interval_4_hour">4 часа</string>
<string name="interval_8_hour">8 часа</string>
<string name="pref_toggle_title">Маркиране с кратко натискане</string>
<string name="pref_toggle_description">Поставяне на отметки с кратко натискане вместо с натискане и задържане. По-удобно, но може да доведе до неволно маркиране.</string>
<string name="pref_snooze_interval_title">Интервал на напомняне след отлагане</string>
<string name="pref_rate_this_app">Оценяване на това приложение в Google Play</string>
<string name="pref_send_feedback">Изпращане на отзиви към разработчика</string>
<string name="pref_view_source_code">Преглед на програмния код в GitHub</string>
<string name="pref_view_app_introduction">Преглед на въведение в приложението</string>
<string name="links">Препратки</string>
<string name="behavior">Поведение</string>
<string name="name">Име</string>
<string name="settings">Настройки</string>
<string name="snooze_interval">Интервал на отлагане</string>
<string name="hint_title">Знаете ли че?</string>
<string name="hint_drag">За да пренаредите записите, натиснете и задръжте върху името на навика и го придърпайте до правилното място.</string>
<string name="hint_landscape">Може да виждате повече дни като обърнете телефона си в хоризонтално положение.</string>
<string name="delete_habits">Изтриване на навици</string>
<string name="delete_habits_message">Навиците ще се изтрият перманентно. Това действие не може да бъде отменено.</string>
<string name="weekends">Събота и неделя</string>
<string name="any_weekday">От понеделник до петък</string>
<string name="any_day">Всеки ден от седмицата</string>
<string name="select_weekdays">Избор на дни</string>
<string name="export_to_csv">Експортиране като CSV</string>
<string name="done_label">Готово</string>
<string name="clear_label">Изчистване</string>
<string name="select_hours">Избиране на час</string>
<string name="select_minutes">Избиране на минута</string>
<string name="about">Информация</string>
<string name="translators">Преводачи</string>
<string name="developers">Разработчици</string>
<string name="version_n">Версия %s</string>
<string name="frequency">Честота</string>
<string name="checkmark">Отметка</string>
<string name="strength">Сила</string>
<string name="best_streaks">Най-добри поредици</string>
<string name="current_streaks">Текуща поредица</string>
<string name="number_of_repetitions">Брой повторения</string>
<string name="last_x_days">Последните %d дни</string>
<string name="last_x_weeks">Последните %d седмици</string>
<string name="last_x_months">Последните %d месеци</string>
<string name="last_x_years">Последните %d години</string>
<string name="all_time">От началото</string>
<string name="every_day">Всеки ден</string>
<string name="every_week">Всяка седмица</string>
<string name="two_times_per_week">2 пъти седмично</string>
<string name="five_times_per_week">5 пъти седмично</string>
<string name="custom_frequency">Друго ...</string>
<string name="help">Помощ &amp; ЧЗВ</string>
<string name="could_not_export">Неуспешно експортиране на данни.</string>
<string name="could_not_import">Неуспешно импортиране на данни.</string>
<string name="file_not_recognized">Файлът не е разпознат.</string>
<string name="habits_imported">Навиците са импортирани успешно.</string>
<string name="full_backup_success">Пълно резервно копие е експортирано успешно.</string>
<string name="import_data">Импортиране на данни</string>
<string name="export_full_backup">Експортиране на пълно резервно копие</string>
<string name="import_data_summary">Поддържа пълни резервни копия експортирани чрез това приложение, както и файлове генерирани чрез Tickmate, HabitBull или Rewire. Вижте ЧЗВ за повече информация.</string>
<string name="export_as_csv_summary">Генерира файлове, които могат да се отварят със софтуер за електронни таблици като Microsoft Excel или OpenOffice Calc. Този файл не може да се импортира обратно.</string>
<string name="export_full_backup_summary">Генерира файл, който съдържа всичките ви данни. Този файл може да бъде импортиран обратно.</string>
<string name="bug_report_failed">Неуспешно генериране на доклад за грешки.</string>
<string name="generate_bug_report">Генериране на доклад за грешки</string>
<string name="troubleshooting">Отстраняване на проблеми</string>
<string name="help_translate">Помагане за превода на това приложение</string>
<string name="night_mode">Нощен режим</string>
<string name="use_pure_black">Използване на чисто черно при нощен режим</string>
<string name="pure_black_description">Заменя сивите фонове с чисто черни при нощен режим. Намаля разхода на батерията при телефони с AMOLED дисплеи.</string>
<string name="interface_preferences">Интерфейс</string>
<string name="reverse_days">Обратен ред на дните</string>
<string name="reverse_days_description">Показва дните на основния екран в обратен ред</string>
<string name="day">Ден</string>
<string name="week">Седмица</string>
<string name="month">Месец</string>
<string name="quarter">Тримесечие</string>
<string name="year">Година</string>
<!-- Middle part of the sentence '1 time in xx days' -->
<string name="time_every">път в период от</string>
<string name="every_x_days">На всеки %d дни</string>
<string name="every_x_weeks">На всеки %d седмици</string>
<string name="every_x_months">На всеки %d месеца</string>
<string name="score">Сила</string>
<string name="reminder_sound">Звук за напомняне</string>
<string name="none">Няма</string>
</resources>

@ -1,180 +1,161 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
~
~ This file is part of Loop Habit Tracker.
~
~ Loop Habit Tracker is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by the
~ Free Software Foundation, either version 3 of the License, or (at your
~ option) any later version.
~
~ Loop Habit Tracker is distributed in the hope that it will be useful, but
~ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
~ more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources> <resources>
<string name="app_name">"Loop Habit Tracker"</string> <string name="main_activity_title">Hàbits</string>
<string name="main_activity_title">"Hàbits"</string> <string name="action_settings">Ajustaments</string>
<string name="action_settings">"Ajustaments"</string> <string name="edit">Editar</string>
<string name="edit">"Editar"</string> <string name="delete">Esborrar</string>
<string name="delete">"Esborrar"</string> <string name="archive">Arxivar</string>
<string name="archive">"Arxivar"</string> <string name="unarchive">Treure de l\'arxiu</string>
<string name="unarchive">"Treure de l'arxiu"</string> <string name="add_habit">Afegir hàbit</string>
<string name="add_habit">"Afegir hàbit"</string> <string name="color_picker_default_title">Canviar color</string>
<string name="color_picker_default_title">"Canviar color"</string> <string name="toast_habit_created">Hàbit creat.</string>
<string name="toast_habit_created">"Hàbit creat."</string> <string name="toast_habit_deleted">Hàbits esborrats.</string>
<string name="toast_habit_deleted">"Hàbits esborrats."</string> <string name="toast_habit_restored">Hàbits restaurats.</string>
<string name="toast_habit_restored">"Hàbits restaurats."</string> <string name="toast_nothing_to_undo">Res a desfer.</string>
<string name="toast_nothing_to_undo">"Res a desfer."</string> <string name="toast_nothing_to_redo">Res a refer.</string>
<string name="toast_nothing_to_redo">"Res a refer."</string> <string name="toast_habit_changed">Hàbit modificat.</string>
<string name="toast_habit_changed">"Hàbit modificat."</string> <string name="toast_habit_changed_back">Hàbit restaurat.</string>
<string name="toast_habit_archived">Hàbits arxivats.</string>
<!-- This appears when the user edits a habit, and then undoes the action. The habit is "changed back" to what is was before. Alternatively, "Habit restored". --> <string name="toast_habit_unarchived">Hàbits trets de l\'arxiu.</string>
<string name="toast_habit_changed_back">"Hàbit restaurat."</string> <string name="overview">Visió general</string>
<string name="toast_habit_archived">"Hàbits arxivats."</string> <string name="habit_strength">Fortalesa de l\'hàbit</string>
<string name="toast_habit_unarchived">"Hàbits trets de l'arxiu."</string> <string name="history">Història</string>
<string name="overview">"Visió general"</string> <string name="clear">Netejar</string>
<string name="habit_strength">"Fortalesa de l'hàbit"</string> <string name="description_hint">Pregunta (Avui vas...?)</string>
<string name="history">"Història"</string> <string name="repeat">Repetir</string>
<string name="clear">"Netejar"</string> <string name="times_every">vegades en</string>
<string name="description_hint">"Pregunta (Avui vas...?)"</string> <string name="days">dies</string>
<string name="reminder">Recordatori</string>
<!-- This and the next two terms form the sentence "Repeat 3 times in 7 days" that you see when you create a habit. Let me know if you have trouble adapting this into your language. --> <string name="discard">Descartar</string>
<string name="repeat">"Repetir"</string> <string name="save">Desar</string>
<string name="times_every">"vegades en"</string> <string name="streaks">Ratxa</string>
<string name="days">"dies"</string> <string name="no_habits_found">No tens hàbits actius</string>
<string name="reminder">"Recordatori"</string> <string name="long_press_to_toggle">Prem i manté per a marcar o desmarcar</string>
<string name="discard">"Descartar"</string> <string name="reminder_off">Desactivat</string>
<string name="save">"Desar"</string> <string name="validation_name_should_not_be_blank">El nom no pot estar buit</string>
<string name="validation_number_should_be_positive">El número ha de ser positiu</string>
<!-- Streak as in "winning streak". That is, the number of times a user has performed a habit consecutively. Similar terms are "chains" or "series". --> <string name="validation_at_most_one_rep_per_day">Pots tenir com a màxim una repetició per dia</string>
<string name="streaks">"Ratxa"</string> <string name="create_habit">Crear hàbit</string>
<string name="no_habits_found">"No tens hàbits actius"</string> <string name="edit_habit">Editar hàbit</string>
<string name="long_press_to_toggle">"Prem i manté per a marcar o desmarcar"</string> <string name="check">Revisar</string>
<string name="reminder_off">"Desactivat"</string> <string name="snooze">Més tard</string>
<string name="validation_name_should_not_be_blank">"El nom no pot estar buit"</string>
<string name="validation_number_should_be_positive">"El número ha de ser positiu"</string>
<string name="validation_at_most_one_rep_per_day">"Pots tenir com a màxim una repetició per dia"</string>
<string name="create_habit">"Crear hàbit"</string>
<string name="edit_habit">"Editar hàbit"</string>
<string name="check">"Revisar"</string>
<string name="snooze">"Més tard"</string>
<!-- App introduction --> <!-- App introduction -->
<string name="intro_title_1">"Benvingut"</string> <string name="intro_title_1">Benvingut</string>
<string name="intro_description_1">"Loop Habit Tracker t'ajuda a crear i mantenir bons hàbits"</string> <string name="intro_description_1">Loop Habit Tracker t\'ajuda a crear i mantenir bons hàbits</string>
<string name="intro_title_2">"Crear alguns hàbits nous"</string> <string name="intro_title_2">Crear alguns hàbits nous</string>
<string name="intro_description_2">"Cada dia, després de complir el teu hàbit, posa una marca amb la app"</string> <string name="intro_description_2">Cada dia, després de complir el teu hàbit, posa una marca amb la app</string>
<string name="intro_title_3">"Continua fent-ho"</string> <string name="intro_title_3">Continua fent-ho</string>
<string name="intro_description_3">"Els hàbits que facis consistentment durant una llarga temporada obtindran una estrella"</string> <string name="intro_description_3">Els hàbits que facis consistentment durant una llarga temporada obtindran una estrella</string>
<string name="intro_title_4">"Segueix el teu progrès"</string> <string name="intro_title_4">Segueix el teu progrès</string>
<string name="intro_description_4">"Els gràfics detallats et mostren com han mirollat els teus hàbits al llarg del temps"</string> <string name="intro_description_4">Els gràfics detallats et mostren com han mirollat els teus hàbits al llarg del temps</string>
<string name="interval_15_minutes">"15 minuts"</string> <string name="interval_15_minutes">15 minuts</string>
<string name="interval_30_minutes">"30 minuts"</string> <string name="interval_30_minutes">30 minuts</string>
<string name="interval_1_hour">"1 hora"</string> <string name="interval_1_hour">1 hora</string>
<string name="interval_2_hour">"2 hores"</string> <string name="interval_2_hour">2 hores</string>
<string name="interval_4_hour">"4 hores"</string> <string name="interval_4_hour">4 hores</string>
<string name="interval_8_hour">"8 hores"</string> <string name="interval_8_hour">8 hores</string>
<string name="pref_toggle_title">"Activar/desactivar repeticions prement curt"</string> <string name="interval_24_hour">24 hores</string>
<string name="pref_toggle_description">"Més adequat, però pot causar activacions accidentals"</string> <string name="pref_toggle_title">Activar/desactivar repeticions prement curt</string>
<string name="pref_snooze_interval_title">"Interval d'endarreriment en recordatoris"</string> <string name="pref_toggle_description">Més adequat, però pot causar activacions accidentals</string>
<string name="pref_rate_this_app">"Valora aquesta app a Google Play"</string> <string name="pref_snooze_interval_title">Interval d\'endarreriment en recordatoris</string>
<string name="pref_send_feedback">"Enviar resposta al desenvolupador"</string> <string name="pref_rate_this_app">Valora aquesta app a Google Play</string>
<string name="pref_view_source_code">"Veure codi font a Github"</string> <string name="pref_send_feedback">Enviar resposta al desenvolupador</string>
<string name="pref_view_app_introduction">"Veure introducció de l'app"</string> <string name="pref_view_source_code">Veure codi font a Github</string>
<string name="links">"Enllaços"</string> <string name="pref_view_app_introduction">Veure introducció de l\'app</string>
<string name="behavior">"Comportament"</string> <string name="links">Enllaços</string>
<string name="name">"Nom"</string> <string name="behavior">Comportament</string>
<string name="show_archived">"Mostrar arxivats"</string> <string name="name">Nom</string>
<string name="settings">"Ajustaments"</string> <string name="settings">Ajustaments</string>
<string name="snooze_interval">"Interval d'endarreriment"</string> <string name="snooze_interval">Interval d\'endarreriment</string>
<string name="hint_title">"Ho sabies?"</string> <string name="hint_title">Ho sabies?</string>
<string name="hint_drag">"Per a ordenar les entrades, prem i mantè sobre el nom de l'hàbit, després arrossega'l al lloc correcte."</string> <string name="hint_drag">Per a ordenar les entrades, prem i mantè sobre el nom de l\'hàbit, després arrossega\'l al lloc correcte.</string>
<string name="hint_landscape">"Pots veure més dies posant el teu telèfon en orientació apaisada."</string> <string name="hint_landscape">Pots veure més dies posant el teu telèfon en orientació apaisada.</string>
<string name="delete_habits">"Esborrar hàbits"</string> <string name="delete_habits">Esborrar hàbits</string>
<string name="delete_habits_message">"Els hàbits seran esborrats permanentment. Aquesta acció no es pot desfer."</string> <string name="delete_habits_message">Els hàbits seran esborrats permanentment. Aquesta acció no es pot desfer.</string>
<string name="weekends">"Caps de setmana"</string> <string name="weekends">Caps de setmana</string>
<string name="any_weekday">"Dilluns a divendres"</string> <string name="any_weekday">Dilluns a divendres</string>
<string name="any_day">"Qualsevol dia de la setmana"</string> <string name="any_day">Qualsevol dia de la setmana</string>
<string name="select_weekdays">"Selecciona els dies"</string> <string name="select_weekdays">Selecciona els dies</string>
<string name="export_to_csv">"Exportar a CSV"</string> <string name="export_to_csv">Exportar a CSV</string>
<string name="done_label">"Fet"</string> <string name="done_label">Fet</string>
<string name="clear_label">"Treure"</string> <string name="clear_label">Treure</string>
<string name="select_hours">"Selecciona les hores"</string> <string name="select_hours">Selecciona les hores</string>
<string name="select_minutes">"Selecciona els minuts"</string> <string name="select_minutes">Selecciona els minuts</string>
<string name="about">En quant a</string>
<!-- Short description used on the Google Play store. There is an 80-character limit. --> <string name="translators">Traductors</string>
<string name="store_short_description">"Crea bons hàbits i segueix el seu progrés al llarg del temps (sense publicitat)"</string> <string name="developers">Desenvolupadors</string>
<string name="store_description_1">"Loop t'ajuda a crear i mantenir bons hàbits, permetent-te aconseguir els teus objectius a llarg termini. Els gràfics i estadístiques detallades et mostren com han millorat els teus hàbits al llarg del temps. És completament de codi obert i lliure de publicitat."</string> <string name="version_n">Versió %s</string>
<string name="store_feature_interface">"&lt;b&gt;Senzilla, bonica i moderna interfície&lt;/b&gt; <string name="frequency">Freqüència</string>
Loop té una interfície minimalista que és fàcil d'utilitzar i segueix les guies de \"material design\"."</string> <string name="checkmark">Marca</string>
<string name="store_feature_score">"&lt;b&gt;Puntuació d'hàbit&lt;/b&gt; <string name="strength">Fortalesa</string>
A més de mostrar la teva ratxa actual, Loop té un algoritme avançat per a calcular la fortalesa dels teus hàbits. Cada repetició fa el teu hàbit més fort, i cada dia que fallis el farà més dèbil. Tot i això uns quants dies que fallis després d'una llarga ratxa no malmetrà completament el teu progrès."</string> <string name="best_streaks">Millors ratxes</string>
<string name="store_feature_statistics">"&lt;b&gt;Gràfics i estadístiques detallades&lt;/b&gt; <string name="current_streaks">Ratxa actual</string>
Permet veure de forma clara com han millorat els teus hàbits al llarg del temps amb gràfics bonics i detallats. Pots anar enrera i veure també l'històric complet dels teus hàbits."</string> <string name="number_of_repetitions">Nombre de repeticions</string>
<string name="store_feature_schedules">"&lt;b&gt;Planificació flexible&lt;/b&gt; <string name="last_x_days">Últims %d dies</string>
Suporta tant hàbits diaris com hàbits amb planificacions més complexes, com per exemple 3 vegades per setmana; un cop setmana si setmana no; o un dia si i altre no."</string> <string name="last_x_weeks">Últimes %d setmanes</string>
<string name="store_feature_reminders">"&lt;b&gt;Recordatoris&lt;/b&gt; <string name="last_x_months">Últims %d mesos</string>
Crea un recordatori individual per a cada hàbit, a l'hora escollida del dia. Revisa fàcilment, endarrereix o anul·la el teu hàbit directament des de la notificació, sense obrir l'app."</string> <string name="last_x_years">Últims %d anys</string>
<string name="store_feature_opensource">"&lt;b&gt;Completament de codi obert i lliure de publicitat&lt;/b&gt; <string name="all_time">Tot el temps</string>
No hi ha cap tipus de publicitat, notificacions molestes o permisos intrusius en aquesta app, i mai n'hi haurà. El codi font complet està disponible sota la llicència GPLv3."</string> <string name="every_day">Cada dia</string>
<string name="store_feature_wear">"&lt;b&gt;Optimitzat per a rellotges intel·ligents&lt;/b&gt; <string name="every_week">Cada setmana</string>
Els recordatoris poden ser revisats, endarrerits o anul·lats directament des del teu rellotge Android Wear."</string> <string name="two_times_per_week">2 cops per setmana</string>
<string name="about">"En quant a"</string> <string name="five_times_per_week">5 cops per setmana</string>
<string name="translators">"Traductors"</string> <string name="custom_frequency">Personalitzar ...</string>
<string name="developers">"Desenvolupadors"</string> <string name="help">Ajuda i Preguntes Freqüents</string>
<string name="could_not_export">Error exportant dades.</string>
<!-- %s will get replaced by the version number. For example, "Versão %d" will become "Versão 1.2.0". --> <string name="could_not_import">Error important dades.</string>
<string name="version_n">"Versió %s"</string> <string name="file_not_recognized">Fitxer no reconegut.</string>
<string name="frequency">"Freqüència"</string> <string name="habits_imported">Hàbits importats correctament.</string>
<string name="checkmark">"Marca"</string> <string name="full_backup_success">Còpia de seguretat sencera exportada satisfactòriament.</string>
<string name="import_data">Importar dades</string>
<!-- This is a shorter version of "Habit Strength" --> <string name="export_full_backup">Exportar còpia de seguretat sencera</string>
<string name="strength">"Fortalesa"</string> <string name="import_data_summary">Suporta còpies de seguretat exportades per aquesta app, també fitxers generats per Tickmate, HabitBull o Rewire. Mira les Preguntes Freqüents per a més informació.</string>
<string name="best_streaks">"Millors ratxes"</string> <string name="export_as_csv_summary">Genera fitxers que poden ser oberts per programari de fulles de càlcul, com ara Microsoft Excel o OpenOffice Calc. Aquest fitxer no pot tornar-se a importar.</string>
<string name="current_streaks">"Ratxa actual"</string> <string name="export_full_backup_summary">Genera un fitxer que contè totes les teves dades. Aquest fitxer pot tornar-se a importar.</string>
<string name="number_of_repetitions">"Nombre de repeticions"</string> <string name="bug_report_failed">Ha fallat la generació de l\'informe d\'error.</string>
<string name="last_x_days">"Últims %d dies"</string> <string name="generate_bug_report">Generar informe d\'error</string>
<string name="last_x_weeks">"Últimes %d setmanes"</string> <string name="troubleshooting">Resolució de problemes</string>
<string name="last_x_months">"Últims %d mesos"</string> <string name="help_translate">Ajuda a traduïr aquesta app</string>
<string name="last_x_years">"Últims %d anys"</string> <string name="night_mode">Mode nocturn</string>
<string name="use_pure_black">Utilitzar negre pur en el mode nocturn</string>
<!-- "All time" number of repetitions. Or number of repetitions "since the beginning". --> <string name="pure_black_description">Reemplaça fons grisos per negre pur en el mode nocturn. Redueix consum de bateria en telèfons amb pantalla AMOLED.</string>
<string name="all_time">"Tot el temps"</string> <string name="interface_preferences">Interfície</string>
<string name="every_day">"Cada dia"</string> <string name="reverse_days">Ordre invers de dies</string>
<string name="every_week">"Cada setmana"</string> <string name="reverse_days_description">Mostra els dies en ordre invers en la pantalla principal</string>
<string name="two_times_per_week">"2 cops per setmana"</string> <string name="day">Dia</string>
<string name="five_times_per_week">"5 cops per setmana"</string> <string name="week">Setmana</string>
<string name="custom_frequency">"Personalitzar ..."</string> <string name="month">Mes</string>
<string name="help">"Ajuda i Preguntes Freqüents"</string> <string name="quarter">Quatrimestre</string>
<string name="could_not_export">"Error exportant dades."</string> <string name="year">Any</string>
<string name="could_not_import">"Error important dades."</string>
<!-- Appears when the user tries to import a file which we do not support or recognize. -->
<string name="file_not_recognized">"Fitxer no reconegut."</string>
<string name="habits_imported">"Hàbits importats correctament."</string>
<string name="full_backup_success">"Còpia de seguretat sencera exportada satisfactòriament."</string>
<string name="import_data">"Importar dades"</string>
<string name="export_full_backup">"Exportar còpia de seguretat sencera"</string>
<string name="import_data_summary">"Suporta còpies de seguretat exportades per aquesta app, també fitxers generats per Tickmate, HabitBull o Rewire. Mira les Preguntes Freqüents per a més informació."</string>
<string name="export_as_csv_summary">"Genera fitxers que poden ser oberts per programari de fulles de càlcul, com ara Microsoft Excel o OpenOffice Calc. Aquest fitxer no pot tornar-se a importar."</string>
<string name="export_full_backup_summary">"Genera un fitxer que contè totes les teves dades. Aquest fitxer pot tornar-se a importar."</string>
<string name="bug_report_failed">"Ha fallat la generació de l'informe d'error."</string>
<string name="generate_bug_report">"Generar informe d'error"</string>
<string name="troubleshooting">"Resolució de problemes"</string>
<string name="help_translate">"Ajuda a traduïr aquesta app"</string>
<string name="night_mode">"Mode nocturn"</string>
<string name="use_pure_black">"Utilitzar negre pur en el mode nocturn"</string>
<string name="pure_black_description">"Reemplaça fons grisos per negre pur en el mode nocturn. Redueix consum de bateria en telèfons amb pantalla AMOLED."</string>
<string name="interface_preferences">"Interfície"</string>
<string name="reverse_days">"Ordre invers de dies"</string>
<string name="reverse_days_description">"Mostra els dies en ordre invers en la pantalla principal"</string>
<string name="day">"Dia"</string>
<string name="week">"Setmana"</string>
<string name="month">"Mes"</string>
<!-- Three-month period -->
<string name="quarter">"Quatrimestre"</string>
<string name="year">"Any"</string>
<!-- Middle part of the sentence '1 time in xx days' --> <!-- Middle part of the sentence '1 time in xx days' -->
<!-- Middle part of the sentence '1 time in xx days' --> <string name="time_every">vegades en</string>
<string name="time_every">"vegades en"</string> <string name="every_x_days">Cada %d dies</string>
<string name="every_x_days">"Cada %d dies"</string> <string name="every_x_weeks">Cada %d setmanes</string>
<string name="every_x_weeks">"Cada %d setmanes"</string> <string name="every_x_months">Cada %d mesos</string>
<string name="every_x_months">"Cada %d mesos"</string> <string name="score">Puntuació</string>
<string name="reminder_sound">So de recordatori</string>
<!-- The old "habit strength" has been replaced by "score". Feel free to translate "score" as "strength" or "stability" if it sounds more natural in your language. --> <string name="none">Cap</string>
<string name="score">"Puntuació"</string> <string name="filter">Filtre</string>
<string name="reminder_sound">"So de recordatori"</string> <string name="action">Acció</string>
<string name="habit">Hàbit</string>
<!-- Appears when the user disables the reminder sound. Could also be "no sound", "mute" or "silent". --> <string name="export">Exportar</string>
<string name="none">"Cap"</string>
</resources> </resources>

@ -1,183 +1,178 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
~
~ This file is part of Loop Habit Tracker.
~
~ Loop Habit Tracker is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by the
~ Free Software Foundation, either version 3 of the License, or (at your
~ option) any later version.
~
~ Loop Habit Tracker is distributed in the hope that it will be useful, but
~ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
~ more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources> <resources>
<string name="app_name">Sledování zvyků</string>
<!-- Fuzzy --> <string name="main_activity_title">Zvyky</string>
<string name="app_name">"Loop Habit Tracker"</string> <string name="action_settings">Nastavení</string>
<string name="main_activity_title">"Zvyky"</string> <string name="edit">Upravit</string>
<string name="action_settings">"Nastavení"</string> <string name="delete">Smazat</string>
<string name="edit">"Upravit"</string> <string name="archive">Archivovat</string>
<string name="delete">"Smazat"</string> <string name="unarchive">Obnovit</string>
<string name="archive">"Archivovat"</string> <string name="add_habit">Přidat zvyk</string>
<string name="unarchive">"Obnovit"</string> <string name="color_picker_default_title">Změnit barvu</string>
<string name="add_habit">"Přidat zvyk"</string> <string name="toast_habit_created">Zvyk vytvořen.</string>
<string name="color_picker_default_title">"Změnit barvu"</string> <string name="toast_habit_deleted">Zvyky smazány.</string>
<string name="toast_habit_created">"Zvyk vytvořen."</string> <string name="toast_habit_restored">Zvyky obnoveny.</string>
<string name="toast_habit_deleted">"Zvyky smazány."</string> <string name="toast_nothing_to_undo">Nelze jít zpět.</string>
<string name="toast_habit_restored">"Zvyky obnoveny."</string> <string name="toast_nothing_to_redo">Nelze jít vpřed.</string>
<string name="toast_nothing_to_undo">"Nelze jít zpět."</string> <string name="toast_habit_changed">Zvyk změněn.</string>
<string name="toast_nothing_to_redo">"Nelze jít vpřed."</string> <string name="toast_habit_changed_back">Zvyk změněn zpět.</string>
<string name="toast_habit_changed">"Zvyk změněn."</string> <string name="toast_habit_archived">Archivováno.</string>
<string name="toast_habit_unarchived">Zvyky obnoveny.</string>
<!-- This appears when the user edits a habit, and then undoes the action. The habit is "changed back" to what is was before. Alternatively, "Habit restored". --> <string name="overview">Přehled</string>
<string name="toast_habit_changed_back">"Zvyk změněn zpět."</string> <string name="habit_strength">Síla zvyku</string>
<string name="toast_habit_archived">"Archivováno."</string> <string name="history">Historie</string>
<string name="toast_habit_unarchived">"Zvyky obnoveny."</string> <string name="clear">Smazat</string>
<string name="overview">"Přehled"</string> <string name="description_hint">Otázka (Dělal jsi dnes...?)</string>
<string name="habit_strength">"Síla zvyku"</string> <string name="repeat">Opakovat</string>
<string name="history">"Historie"</string> <string name="times_every">krát za</string>
<string name="clear">"Smazat"</string> <string name="days">dní</string>
<string name="description_hint">"Otázka (Dělal jsi dnes...?)"</string> <string name="reminder">Připomenout</string>
<string name="discard">Zrušit</string>
<!-- This and the next two terms form the sentence "Repeat 3 times in 7 days" that you see when you create a habit. Let me know if you have trouble adapting this into your language. --> <string name="save">Uložit</string>
<string name="repeat">"Opakovat"</string> <string name="streaks">Serie</string>
<string name="times_every">"krát za"</string> <string name="no_habits_found">Nemáš žádné aktivní zvyky</string>
<string name="days">"dní"</string> <string name="long_press_to_toggle">Stiskni a drž pro označení</string>
<string name="reminder">"Připomenout"</string> <string name="reminder_off">Vyp.</string>
<string name="discard">"Zrušit"</string> <string name="validation_name_should_not_be_blank">Jméno musíte vyplnit.</string>
<string name="save">"Uložit"</string> <string name="validation_number_should_be_positive">Číslo musí být kladné.</string>
<string name="validation_at_most_one_rep_per_day">Můžete mít maximálně jedno označení denně.</string>
<!-- I need some synonyms or context, thx --> <string name="create_habit">Vytvořit zvyk</string>
<!-- Streak as in "winning streak". That is, the number of times a user has performed a habit consecutively. Similar terms are "chains" or "series". --> <string name="edit_habit">Upravit zvyk</string>
<string name="streaks">"Serie"</string> <string name="check">Označeno</string>
<string name="no_habits_found">"Nemáš žádné aktivní zvyky"</string> <string name="snooze">Odložit</string>
<string name="long_press_to_toggle">"Stiskni a drž pro označení"</string>
<string name="reminder_off">"Off"</string>
<string name="validation_name_should_not_be_blank">"Jméno musíte vyplnit."</string>
<string name="validation_number_should_be_positive">"Číslo musí být kladné."</string>
<string name="validation_at_most_one_rep_per_day">"Můžete mít maximálně jedno označení denně."</string>
<string name="create_habit">"Vytvořit zvyk"</string>
<string name="edit_habit">"Upravit zvyk"</string>
<string name="check">"Označeno"</string>
<string name="snooze">"Odložit"</string>
<!-- App introduction --> <!-- App introduction -->
<string name="intro_title_1">"Vítejte"</string> <string name="intro_title_1">Vítejte</string>
<string name="intro_description_1">"Sledování zvyků ti pomůže vytvořit a dosáhnout dobrých návyků."</string> <string name="intro_description_1">Sledování zvyků ti pomůže vytvořit a dosáhnout dobrých návyků.</string>
<string name="intro_title_2">"Vytvoř si nové zvyky"</string> <string name="intro_title_2">Vytvoř si nové zvyky</string>
<string name="intro_description_2">"Každý den po splnění zvyku, si ho v aplikaci zaškrtni."</string> <string name="intro_description_2">Každý den po splnění zvyku, si ho v aplikaci zaškrtni.</string>
<string name="intro_title_3">"Jen tak dál"</string> <string name="intro_title_3">Jen tak dál</string>
<string name="intro_description_3">"Zvyky, které vykonáváš pravidelně delší dobu, se označí hvězdou."</string> <string name="intro_description_3">Zvyky, které vykonáváš pravidelně delší dobu, se označí hvězdou.</string>
<string name="intro_title_4">"Sleduj svůj postup"</string> <string name="intro_title_4">Sleduj svůj postup</string>
<string name="intro_description_4">"Detailní grafy ti ukážou, jak se tvé zvyky v průběhu času zlepšily."</string> <string name="intro_description_4">Detailní grafy ti ukážou, jak se tvé zvyky v průběhu času zlepšily.</string>
<string name="interval_15_minutes">"15 minut"</string> <string name="interval_15_minutes">15 minut</string>
<string name="interval_30_minutes">"30 minut"</string> <string name="interval_30_minutes">30 minut</string>
<string name="interval_1_hour">"Hodina"</string> <string name="interval_1_hour">Hodina</string>
<string name="interval_2_hour">"2 hodiny"</string> <string name="interval_2_hour">2 hodiny</string>
<string name="interval_4_hour">"4 hodiny"</string> <string name="interval_4_hour">4 hodiny</string>
<string name="interval_8_hour">"8 hodin"</string> <string name="interval_8_hour">8 hodin</string>
<string name="pref_toggle_title">"Označte opakování krátkým stisknutím"</string> <string name="interval_24_hour">24 hodin</string>
<string name="pref_toggle_description">"Praktičtější, ale může způsobit nechtěné označení."</string> <string name="pref_toggle_title">Označte opakování krátkým stisknutím</string>
<string name="pref_snooze_interval_title">"Doba odložení upomínky"</string> <string name="pref_toggle_description">Praktičtější, ale může způsobit nechtěné označení.</string>
<string name="pref_rate_this_app">"Ohodnoťte nás v Google Play"</string> <string name="pref_snooze_interval_title">Doba odložení upomínky</string>
<string name="pref_send_feedback">"Zpětná vazba vývojáři"</string> <string name="pref_rate_this_app">Ohodnoťte nás v Google Play</string>
<string name="pref_view_source_code">"Zobrazit zdroj. kód na GitHub"</string> <string name="pref_send_feedback">Zpětná vazba vývojáři</string>
<string name="pref_view_app_introduction">"Představení aplikace"</string> <string name="pref_view_source_code">Zobrazit zdroj. kód na GitHub</string>
<string name="links">"Odkazy"</string> <string name="pref_view_app_introduction">Představení aplikace</string>
<string name="behavior">"Chování"</string> <string name="links">Odkazy</string>
<string name="name">"Jméno"</string> <string name="behavior">Chování</string>
<string name="show_archived">"Zobrazit archiv"</string> <string name="name">Jméno</string>
<string name="settings">"Nastavení"</string> <string name="settings">Nastavení</string>
<string name="snooze_interval">"Interval odkladu"</string> <string name="snooze_interval">Interval odkladu</string>
<string name="hint_title">"Věděli jste?"</string> <string name="hint_title">Věděli jste?</string>
<string name="hint_drag">"Přeřazení záznamů proveď stisknutím a podržením názvu zvyku a poté přesunutím na správné místo."</string> <string name="hint_drag">Přeřazení záznamů proveď stisknutím a podržením názvu zvyku a poté přesunutím na správné místo.</string>
<string name="hint_landscape">"Můžeš vidět více dnů otočením telefonu na šířku."</string> <string name="hint_landscape">Můžeš vidět více dnů otočením telefonu na šířku.</string>
<string name="delete_habits">"Smazat zvyky"</string> <string name="delete_habits">Smazat zvyky</string>
<string name="delete_habits_message">"Zvyky budou navždy odstraněny. Toto nelze vzít zpět."</string> <string name="delete_habits_message">Zvyky budou navždy odstraněny. Toto nelze vzít zpět.</string>
<string name="weekends">"Víkendy"</string> <string name="habit_not_found">Zvyk smazán / nenalezen</string>
<string name="any_weekday">"Pondělí až pátek"</string> <string name="weekends">Víkendy</string>
<string name="any_day">"Jakýkoliv den v týdnu"</string> <string name="any_weekday">Pondělí až pátek</string>
<string name="select_weekdays">"Vyber dny"</string> <string name="any_day">Jakýkoliv den v týdnu</string>
<string name="export_to_csv">"Exportuj CSV"</string> <string name="select_weekdays">Vyber dny</string>
<string name="done_label">"Hotovo"</string> <string name="export_to_csv">Exportuj CSV</string>
<string name="clear_label">"Smazat"</string> <string name="done_label">Hotovo</string>
<string name="select_hours">"Vyber hodiny"</string> <string name="clear_label">Smazat</string>
<string name="select_minutes">"Vyber minuty"</string> <string name="select_hours">Vyber hodiny</string>
<string name="select_minutes">Vyber minuty</string>
<!-- Short description used on the Google Play store. There is an 80-character limit. --> <string name="about">O nás</string>
<string name="store_short_description">"Vytvoř si prospěšné návyky a sleduj jejich vývoj v průběhu času (bez reklam)"</string> <string name="translators">Překladatelé</string>
<string name="store_description_1">"Aplikace ti pomůže vytvořit a udržovat si prospěšné návyky a dosáhnout tak tvých dlouhodobých cílů. Detailní grafy a statistiky ti ukáží, jak se tvoje zvyky postupem času zlepšují. Vše je kompletně bez reklam a open source."</string> <string name="developers">Vývojáři</string>
<string name="store_feature_interface">"&lt;b&gt;Jednoduché, krásné a moderní prostředí&lt;/b&gt; <string name="version_n">Verze %s</string>
Aplikace má minimalistický design s jednoduchým použitím. Dodržuje pravidla material designu."</string> <string name="frequency">Frekvence</string>
<string name="store_feature_score">"&lt;b&gt;Síla zvyku&lt;/b&gt; <string name="checkmark">Zatržítko</string>
Pro zobrazení aktuální úspěšné serie aplikace využívá pokročilý algoritmus, aby vypočítala sílu tvých zvyků. Každé opakování dělá tvůj zvyk silnějším a každé nedodržení ho oslabuje. Ale pár vynechaných dní po dlouhé řadě kompletně nezničí celý tvůj postup."</string> <string name="strength">Síla</string>
<string name="store_feature_statistics">"&lt;b&gt;Detailní grafy a statistika&lt;/b&gt; <string name="best_streaks">Nejlepší serie</string>
Přehledně vidíš na krásných grafech, jak moc se tvoje zvyky zlepšují v průběhu času. Jeď zpět, abys viděl kompletní historii."</string> <string name="current_streaks">Aktuální serie</string>
<string name="store_feature_schedules">"&lt;b&gt;Flexibilní časový plán&lt;/b&gt; <string name="number_of_repetitions">Počet opakování</string>
Podpora jak denních návyků, tak návyků s komplexnějším rozvrhem. Jako jsou 3 krát týdně, jednou za dva týdny, nebo obden."</string> <string name="last_x_days">Posledních %d dnů</string>
<string name="store_feature_reminders">"&lt;b&gt;Upomínky&lt;/b&gt; <string name="last_x_weeks">Posledních %d týdnů</string>
Vytvoř si individuální upomínku pro každý zvyk ve zvolený čas. Jednoduše potvrď, přeskoč nebo odlož notifikace bez nutnosti otevření aplikace."</string> <string name="last_x_months">Posledních %d měsíců</string>
<string name="store_feature_opensource">"&lt;b&gt;Kompletně bez reklam a open source&lt;/b&gt; <string name="last_x_years">Posledních %d roků</string>
Nejsou tu naprosto žádné reklamy, otravné notifikace nebo dotěrná povolení aplikace. A nikdy nebudou. Kompletní zdrojový kód je dostupný pod GPLv3."</string> <string name="all_time">Bez omezení</string>
<string name="store_feature_wear">"&lt;b&gt;Optimalizované pro chytré hodinky&lt;/b&gt; <string name="every_day">Každý den</string>
Upomínky mohou být potvrzen, odloženy nebo smazány přímo z tvého zařízení s Android Wear."</string> <string name="every_week">Každý týden</string>
<string name="about">"O nás"</string> <string name="two_times_per_week">2 krát týdně</string>
<string name="translators">"Překladatelé"</string> <string name="five_times_per_week">5 krát týdně</string>
<string name="developers">"Vývojáři"</string> <string name="custom_frequency">Vlastní...</string>
<string name="help">Pomoc a FAQ</string>
<!-- %s will get replaced by the version number. For example, "Versão %d" will become "Versão 1.2.0". --> <string name="could_not_export">Export selhal.</string>
<string name="version_n">"Verze %s"</string> <string name="could_not_import">Import selhal.</string>
<string name="frequency">"Frekvence"</string> <string name="file_not_recognized">Soubor netozpoznán.</string>
<string name="checkmark">"Zatržítko"</string> <string name="habits_imported">Zvyky úspěšně importovány.</string>
<string name="full_backup_success">Kompletní záloha úspěšně exportována.</string>
<!-- This is a shorter version of "Habit Strength" --> <string name="import_data">Importovat</string>
<string name="strength">"Síla"</string> <string name="export_full_backup">Kompletní export</string>
<string name="best_streaks">"Nejlepší serie"</string> <string name="import_data_summary">Podpora exportů z této aplikace, ale také souborů vygenerovaných aplikacemi od Tickmate, HabitBull nebo Rewire. Pro více info si prečti FAQ.</string>
<string name="current_streaks">"Aktuální serie"</string> <string name="export_as_csv_summary">Generuje soubory, které můžeš otevřít v tabulkových editorech, jako jsou Microsoft Excel nebo OpenOffice Calc. Tyto soubory nelze importovat zpět.</string>
<string name="number_of_repetitions">"Počet opakování"</string> <string name="export_full_backup_summary">Generuje soubor, který obsahuje všechna tvoje data. Tento soubor můžeš importovat zpět.</string>
<string name="last_x_days">"Posledních %d dnů"</string> <string name="bug_report_failed">Generace výpisu chyb selhala.</string>
<string name="last_x_weeks">"Posledních %d týdnů"</string> <string name="generate_bug_report">Generovat výpis chyb</string>
<string name="last_x_months">"Posledních %d měsíců"</string> <string name="troubleshooting">Řešení problémů</string>
<string name="last_x_years">"Posledních %d roků"</string> <string name="help_translate">Pomozte s překladem aplikace</string>
<string name="night_mode">Noční téma</string>
<!-- "All time" number of repetitions. Or number of repetitions "since the beginning". --> <string name="use_pure_black">Zobrazit čistě černou v nočním tématu</string>
<string name="all_time">"Bez omezení"</string> <string name="pure_black_description">Nahradí šedé pozadí čistou černou v nočním tématu. Snižuje spotřebu baterie v telefonech s AMOLED displejem.</string>
<string name="every_day">"Každý den"</string> <string name="interface_preferences">Rozhraní</string>
<string name="every_week">"Každý týden"</string> <string name="reverse_days">Otočit pořadí dnů</string>
<string name="two_times_per_week">"2 krát týdně"</string> <string name="reverse_days_description">Zobrazí dny na úvodní stránce v obráceném pořadí</string>
<string name="five_times_per_week">"5 krát týdně"</string> <string name="day">Den</string>
<string name="custom_frequency">"Vlastní..."</string> <string name="week">Týden</string>
<string name="help">"Pomoc a FAQ"</string> <string name="month">Měsíc</string>
<string name="could_not_export">"Export selhal."</string> <string name="quarter">Čtvrtletí</string>
<string name="could_not_import">"Import selhal."</string> <string name="year">Rok</string>
<string name="total">Celkem</string>
<!-- Appears when the user tries to import a file which we do not support or recognize. -->
<string name="file_not_recognized">"Soubor netozpoznán."</string>
<string name="habits_imported">"Zvyky úspěšně importovány."</string>
<string name="full_backup_success">"Kompletní záloha úspěšně exportována."</string>
<string name="import_data">"Importovat"</string>
<string name="export_full_backup">"Kompletní export"</string>
<string name="import_data_summary">"Podpora exportů z této aplikace, ale také souborů vygenerovaných aplikacemi od Tickmate, HabitBull nebo Rewire. Pro více info si prečti FAQ."</string>
<string name="export_as_csv_summary">"Generuje soubory, které můžeš otevřít v tabulkových editorech, jako jsou Microsoft Excel nebo OpenOffice Calc. Tyto soubory nelze importovat zpět."</string>
<string name="export_full_backup_summary">"Generuje soubor, který obsahuje všechna tvoje data. Tento soubor můžeš importovat zpět."</string>
<string name="bug_report_failed">"Generace výpisu chyb selhala."</string>
<string name="generate_bug_report">"Generovat výpis chyb"</string>
<string name="troubleshooting">"Řešení problémů"</string>
<string name="help_translate">"Pomozte s překladem aplikace"</string>
<string name="night_mode">"Noční téma"</string>
<string name="use_pure_black">"Zobrazit čistě černou v nočním tématu"</string>
<string name="pure_black_description">"Nahradí šedé pozadí čistou černou v nočním tématu. Snižuje spotřebu baterie v telefonech s AMOLED displejem."</string>
<string name="interface_preferences">"Rozhraní"</string>
<string name="reverse_days">"Otočit pořadí dnů"</string>
<string name="reverse_days_description">"Zobrazí dny na úvodní stránce v obráceném pořadí"</string>
<string name="day">"Den"</string>
<string name="week">"Týden"</string>
<string name="month">"Měsíc"</string>
<!-- Three-month period -->
<string name="quarter">"Čtvrtletí"</string>
<string name="year">"Rok"</string>
<!-- Middle part of the sentence '1 time in xx days' --> <!-- Middle part of the sentence '1 time in xx days' -->
<!-- Middle part of the sentence '1 time in xx days' --> <string name="time_every">krát za</string>
<string name="time_every">"krát za"</string> <string name="every_x_days">Každých %d dní</string>
<string name="every_x_days">"Každých %d dní"</string> <string name="every_x_weeks">Každých %d týdnů</string>
<string name="every_x_weeks">"Každých %d týdnů"</string> <string name="every_x_months">Každých %d měsíců</string>
<string name="every_x_months">"Každých %d měsíců"</string> <string name="score">Skóre</string>
<string name="reminder_sound">Zvuk upomínky</string>
<!-- The old "habit strength" has been replaced by "score". Feel free to translate "score" as "strength" or "stability" if it sounds more natural in your language. --> <string name="none">Žádný</string>
<string name="score">"Skóre"</string> <string name="filter">Filtr</string>
<string name="reminder_sound">"Zvuk upomínky"</string> <string name="hide_completed">Skrýt dokončené</string>
<string name="hide_archived">Skrýt archivované</string>
<!-- Appears when the user disables the reminder sound. Could also be "no sound", "mute" or "silent". --> <string name="sticky_notifications">Připnout notifikaci</string>
<string name="none">"Žádný"</string> <string name="sticky_notifications_description">Zabraňuje notifikaci její odstranění odsunutím.</string>
<string name="repair_database">Opravit databázi</string>
<string name="database_repaired">Databáze opravena.</string>
<string name="uncheck">Odznačit</string>
<string name="toggle">Přepnout</string>
<string name="action">Akce</string>
<string name="habit">Zvyk</string>
<string name="sort">Řadit</string>
<string name="manually">Manuálně</string>
<string name="by_name">Abecedně</string>
<string name="by_color">Podle barvy</string>
<string name="by_score">Podle skóre</string>
<string name="download">Stáhnout</string>
<string name="export">Export</string>
</resources> </resources>

@ -1,180 +1,154 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
~
~ This file is part of Loop Habit Tracker.
~
~ Loop Habit Tracker is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by the
~ Free Software Foundation, either version 3 of the License, or (at your
~ option) any later version.
~
~ Loop Habit Tracker is distributed in the hope that it will be useful, but
~ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
~ more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources> <resources>
<string name="app_name">"Loop Vane Tracker"</string> <string name="app_name">Loop Vane Tracker</string>
<string name="main_activity_title">"Vaner"</string> <string name="main_activity_title">Vaner</string>
<string name="action_settings">"Indstillinger"</string> <string name="action_settings">Indstillinger</string>
<string name="edit">"Rediger"</string> <string name="edit">Rediger</string>
<string name="delete">"Slet"</string> <string name="delete">Slet</string>
<string name="archive">"Arkiver"</string> <string name="archive">Arkiver</string>
<string name="unarchive">"Fjern fra arkiv"</string> <string name="unarchive">Fjern fra arkiv</string>
<string name="add_habit">"Tilføj vane"</string> <string name="add_habit">Tilføj vane</string>
<string name="color_picker_default_title">"Skift farve"</string> <string name="color_picker_default_title">Skift farve</string>
<string name="toast_habit_created">"Vanen er skabt."</string> <string name="toast_habit_created">Vanen er skabt.</string>
<string name="toast_habit_deleted">"Vanen er slettet."</string> <string name="toast_habit_deleted">Vanen er slettet.</string>
<string name="toast_habit_restored">"Vanen er genskabt."</string> <string name="toast_habit_restored">Vanen er genskabt.</string>
<string name="toast_nothing_to_undo">"Intet at fortryde."</string> <string name="toast_nothing_to_undo">Intet at fortryde.</string>
<string name="toast_nothing_to_redo">"Intet at gengøre."</string> <string name="toast_nothing_to_redo">Intet at gengøre.</string>
<string name="toast_habit_changed">"Vanen er ændret"</string> <string name="toast_habit_changed">Vanen er ændret</string>
<string name="toast_habit_changed_back">Vanen er ændret tilbage.</string>
<!-- This appears when the user edits a habit, and then undoes the action. The habit is "changed back" to what is was before. Alternatively, "Habit restored". --> <string name="toast_habit_archived">Vanerne er arkiveret.</string>
<string name="toast_habit_changed_back">"Vanen er ændret tilbage."</string> <string name="toast_habit_unarchived">Vanerne er fjernet fra arkivet.</string>
<string name="toast_habit_archived">"Vanerne er arkiveret."</string> <string name="overview">Overblik</string>
<string name="toast_habit_unarchived">"Vanerne er fjernet fra arkivet."</string> <string name="habit_strength">Vanestyrke</string>
<string name="overview">"Overblik"</string> <string name="history">Historie</string>
<string name="habit_strength">"Vanestyrke"</string> <string name="clear">Rens</string>
<string name="history">"Historie"</string> <string name="description_hint">Spørgsmål (Fik du &#8230; i dag)</string>
<string name="clear">"Rens"</string> <string name="repeat">Gentag</string>
<string name="description_hint">"Spørgsmål (Fik du … i dag)"</string> <string name="times_every">gange på</string>
<string name="days">dage</string>
<!-- This and the next two terms form the sentence "Repeat 3 times in 7 days" that you see when you create a habit. Let me know if you have trouble adapting this into your language. --> <string name="reminder">Påmindelse</string>
<string name="repeat">"Gentag"</string> <string name="discard">Forkast</string>
<string name="times_every">"gange på"</string> <string name="save">Gem</string>
<string name="days">"dage"</string> <string name="streaks">i træk</string>
<string name="reminder">"Påmindelse"</string> <string name="no_habits_found">Du har ingen aktive vaner</string>
<string name="discard">"Forkast"</string> <string name="long_press_to_toggle">Tryk og hold nede for at afkrydse</string>
<string name="save">"Gem"</string> <string name="reminder_off">Slukket</string>
<string name="validation_name_should_not_be_blank">Navn skal udfyldes.</string>
<!-- Streak as in "winning streak". That is, the number of times a user has performed a habit consecutively. Similar terms are "chains" or "series". --> <string name="validation_number_should_be_positive">Tallet skal være positivt.</string>
<string name="streaks">"i træk"</string> <string name="validation_at_most_one_rep_per_day">Du kan højst have én gentagelse per dag</string>
<string name="no_habits_found">"Du har ingen aktive vaner"</string> <string name="create_habit">Skab en vane</string>
<string name="long_press_to_toggle">"Tryk og hold nede for at afkrydse"</string> <string name="edit_habit">Rediger vane</string>
<string name="reminder_off">"Slukket"</string> <string name="check">Tjek</string>
<string name="validation_name_should_not_be_blank">"Navn skal udfyldes."</string> <string name="snooze">Senere</string>
<string name="validation_number_should_be_positive">"Tallet skal være positivt."</string>
<string name="validation_at_most_one_rep_per_day">"Du kan højst have én gentagelse per dag"</string>
<string name="create_habit">"Skab en vane"</string>
<string name="edit_habit">"Rediger vane"</string>
<string name="check">"Tjek"</string>
<string name="snooze">"Senere"</string>
<!-- App introduction --> <!-- App introduction -->
<string name="intro_title_1">"Velkommen"</string> <string name="intro_title_1">Velkommen</string>
<string name="intro_description_1">"Loop Habit Tracker hjælper dig med at holde gode vaner."</string> <string name="intro_description_1">Loop Habit Tracker hjælper dig med at holde gode vaner.</string>
<string name="intro_title_2">"Skab nogle nye vaner"</string> <string name="intro_title_2">Skab nogle nye vaner</string>
<string name="intro_description_2">"Hver dag, efter at have udført din vane, skal du sætte et flueben i app'en."</string> <string name="intro_description_2">Hver dag, efter at have udført din vane, skal du sætte et flueben i app\'en.</string>
<string name="intro_title_3">"Fortsæt"</string> <string name="intro_title_3">Fortsæt</string>
<string name="intro_description_3">"Vaner fulgt regelmæssigt gennem langtid modtager en stjerne."</string> <string name="intro_description_3">Vaner fulgt regelmæssigt gennem langtid modtager en stjerne.</string>
<string name="intro_title_4">"Følg dine fremskridt"</string> <string name="intro_title_4">Følg dine fremskridt</string>
<string name="intro_description_4">"Detaljerede grafer viser dig hvordan dine vaner udvikler sig over tid."</string> <string name="intro_description_4">Detaljerede grafer viser dig hvordan dine vaner udvikler sig over tid.</string>
<string name="interval_15_minutes">"15 minutter"</string> <string name="interval_15_minutes">15 minutter</string>
<string name="interval_30_minutes">"30 minutter"</string> <string name="interval_30_minutes">30 minutter</string>
<string name="interval_1_hour">"1 time"</string> <string name="interval_1_hour">1 time</string>
<string name="interval_2_hour">"2 timer"</string> <string name="interval_2_hour">2 timer</string>
<string name="interval_4_hour">"4 timer"</string> <string name="interval_4_hour">4 timer</string>
<string name="interval_8_hour">"8 timer"</string> <string name="interval_8_hour">8 timer</string>
<string name="pref_toggle_title">"Vælg gentagelser med kort tryk"</string> <string name="pref_toggle_title">Vælg gentagelser med kort tryk</string>
<string name="pref_toggle_description">"Mere bekvemmeligt, men kan forårsage uhensigtede tryk."</string> <string name="pref_toggle_description">Mere bekvemmeligt, men kan forårsage uhensigtede tryk.</string>
<string name="pref_snooze_interval_title">"Snooze interval på påmindelserne"</string> <string name="pref_snooze_interval_title">Snooze interval på påmindelserne</string>
<string name="pref_rate_this_app">"Bedøm denne app på Google Play"</string> <string name="pref_rate_this_app">Bedøm denne app på Google Play</string>
<string name="pref_send_feedback">"Send feedback til udvikleren"</string> <string name="pref_send_feedback">Send feedback til udvikleren</string>
<string name="pref_view_source_code">"Se kildekoden på GitHub"</string> <string name="pref_view_source_code">Se kildekoden på GitHub</string>
<string name="pref_view_app_introduction">"Se app introduktion"</string> <string name="pref_view_app_introduction">Se app introduktion</string>
<string name="links">"Henvisninger"</string> <string name="links">Henvisninger</string>
<string name="behavior">"Opførelse"</string> <string name="behavior">Opførelse</string>
<string name="name">"Navn"</string> <string name="name">Navn</string>
<string name="show_archived">"Vis arkiverede"</string> <string name="settings">Indstillinger</string>
<string name="settings">"Indstillinger"</string> <string name="hint_title">Vidste du?</string>
<string name="snooze_interval">"Snooze interval"</string> <string name="hint_drag">For at omarrangere poster, tryk og hold på navnet på den vane, og træk den til det korrekte sted.</string>
<string name="hint_title">"Vidste du?"</string> <string name="hint_landscape">Du kan se flere dage ved at sætte telefonen i liggende tilstand.</string>
<string name="hint_drag">"For at omarrangere poster, tryk og hold på navnet på den vane, og træk den til det korrekte sted."</string> <string name="delete_habits">Slet vaner</string>
<string name="hint_landscape">"Du kan se flere dage ved at sætte telefonen i liggende tilstand."</string> <string name="delete_habits_message">Vanerne vil blive slettet permanent. Denne handling kan ikke fortrydes.</string>
<string name="delete_habits">"Slet vaner"</string> <string name="weekends">Weekender</string>
<string name="delete_habits_message">"Vanerne vil blive slettet permanent. Denne handling kan ikke fortrydes."</string> <string name="any_weekday">Mandag til Fredag</string>
<string name="weekends">"Weekender"</string> <string name="any_day">En hvilken som helst dag i ugen</string>
<string name="any_weekday">"Mandag til Fredag"</string> <string name="select_weekdays">Vælg dage</string>
<string name="any_day">"En hvilken som helst dag i ugen"</string> <string name="export_to_csv">Eksporter som CSV</string>
<string name="select_weekdays">"Vælg dage"</string> <string name="done_label">Færdig</string>
<string name="export_to_csv">"Eksporter som CSV"</string> <string name="clear_label">Fjern</string>
<string name="done_label">"Færdig"</string> <string name="select_hours">Vælg timer</string>
<string name="clear_label">"Fjern"</string> <string name="select_minutes">Vælg minutter</string>
<string name="select_hours">"Vælg timer"</string> <string name="about">Om</string>
<string name="select_minutes">"Vælg minutter"</string> <string name="translators">Oversættere</string>
<string name="developers">Udviklere</string>
<!-- Short description used on the Google Play store. There is an 80-character limit. --> <string name="frequency">Hyppighed</string>
<string name="store_short_description">"Opret gode vaner og spore deres fremskridt over tid (reklamefri)"</string> <string name="checkmark">Afkrydsning</string>
<string name="store_description_1">"Loop hjælper dig med at oprette og vedligeholde gode vaner, så du kan nå dine langsigtede mål. Detaljerede grafer og statistikker viser dig, hvordan dine vaner har forbedret over tid. Det er helt reklamefri og open source."</string> <string name="strength">Styrke</string>
<string name="store_feature_interface">"&lt;B&gt; Enkel, smuk og moderne grænseflade &lt;/ b&gt; <string name="best_streaks">Bedste striber</string>
Loop har en minimalistisk brugerflade, der er nem at bruge og følger Google's retningslinjer for materielle design."</string> <string name="current_streaks">Aktuel stribe</string>
<string name="store_feature_score">"&lt;B&gt; Habit score &lt;/ b&gt; <string name="number_of_repetitions">Antal gentagelser</string>
Ud over at vise din nuværende stribe, har Loop en avanceret algoritme til at beregne styrken af dine vaner. Hver gentagelse gør din vane stærkere, og hver misset dag gør det svagere. Et par misset dage efter en lang stribe, vil dog ikke helt ødelægge hele din fremgang."</string> <string name="last_x_days">Sidste % dage</string>
<string name="store_feature_statistics">"&lt;B&gt; Detaljerede grafer og statistikker &lt;/ b&gt; <string name="last_x_weeks">Sidste %d uger</string>
Se, hvordan dine vaner har forbedret over tid med smukke og detaljerede grafer. Rul tilbage for at se den komplette oversigt over dine vaner."</string> <string name="last_x_months">Sidste %d måneder</string>
<string name="store_feature_schedules">"&lt;B&gt; Fleksible skemaer &lt;/ b&gt; <string name="last_x_years">Sidste %d år</string>
Understøtter både daglige vaner og vaner med mere komplekse skemaer, såsom 3 gange hver uge; én gang hver anden uge; eller hver anden dag."</string> <string name="every_day">Hver dag</string>
<string name="store_feature_reminders">"&lt;B&gt; Påmindelser &lt;/ b&gt; <string name="every_week">Hver uge</string>
Opret en individuel påmindelse for hver vane, på et valgt tidspunkt af dagen. Nemt kontrollere, afskedige eller udsætte din vane direkte fra notifikationen, uden at åbne applikationen."</string> <string name="two_times_per_week">2 gange om ugen</string>
<string name="store_feature_opensource">"&lt;B&gt; Helt reklamefri og open source &lt;/ b&gt; <string name="five_times_per_week">5 gange om ugen</string>
Der er absolut ingen reklamer, irriterende meddelelser eller indgribende tilladelser i denne app, og det vil der aldrig være. Den komplette kildekode er tilgængelig under GPLv3."</string> <string name="custom_frequency">Brugerdefinerede</string>
<string name="store_feature_wear">"&lt;B&gt; Optimeret til smartwatches &lt;/ b&gt; <string name="help">Hjælp &amp; FAQ</string>
Påmindelser kan kontrolleres, udsæt eller afvise direkte fra din Android Wear ur."</string> <string name="could_not_export">Kunne ikke eksportere data</string>
<string name="about">"Om"</string> <string name="could_not_import">Kunne ikke importere data</string>
<string name="translators">"Oversættere"</string> <string name="file_not_recognized">Fil ikke genkendt.</string>
<string name="developers">"Udviklere"</string> <string name="habits_imported">Vaner importeret.</string>
<string name="full_backup_success">Fuld backup eksporteret.</string>
<!-- %s will get replaced by the version number. For example, "Versão %d" will become "Versão 1.2.0". --> <string name="import_data">Importer data</string>
<string name="version_n">"Version %s"</string> <string name="export_full_backup">Eksporter fuld backup.</string>
<string name="frequency">"Hyppighed"</string> <string name="import_data_summary">Understøtter fuld backup eksporteret af denne app, samt filer genereret af Tickmate, HabitBull eller Rewire. Se FAQ for mere information.</string>
<string name="checkmark">"Afkrydsning"</string> <string name="export_as_csv_summary">Opretter filer, der kan åbnes af regneark fra Microsoft Excel eller OpenOffice Calc. Denne fil kan ikke importeres tilbage.</string>
<string name="export_full_backup_summary">Opretter en fil, der indeholder alle dine data. Denne fil kan importeres tilbage.</string>
<!-- This is a shorter version of "Habit Strength" --> <string name="bug_report_failed">Kunne ikke generere fejlrapport.</string>
<string name="strength">"Styrke"</string> <string name="generate_bug_report">Generer fejlrapport</string>
<string name="best_streaks">"Bedste striber"</string> <string name="troubleshooting">Fejlfinding</string>
<string name="current_streaks">"Aktuel stribe"</string> <string name="help_translate">Hjælpe med at oversætte denne app</string>
<string name="number_of_repetitions">"Antal gentagelser"</string> <string name="night_mode">Nat-tilstand</string>
<string name="last_x_days">"Sidste % dage"</string> <string name="use_pure_black">Brug ren sort i nat-tilstand</string>
<string name="last_x_weeks">"Sidste %d uger"</string> <string name="pure_black_description">Erstatter grå baggrunde med ren sort i nat-tilstand. Reducerer batteriforbruget i telefoner med AMOLED skærm.</string>
<string name="last_x_months">"Sidste %d måneder"</string> <string name="interface_preferences">Grænseflade</string>
<string name="last_x_years">"Sidste %d år"</string> <string name="reverse_days">Omvendt rækkefølge af dage</string>
<string name="reverse_days_description">Vis dag i omvendt rækkefølge på hovedskærmen</string>
<!-- "All time" number of repetitions. Or number of repetitions "since the beginning". --> <string name="day">Dag</string>
<string name="all_time">"All time"</string> <string name="week">Uge</string>
<string name="every_day">"Hver dag"</string> <string name="month">Måned</string>
<string name="every_week">"Hver uge"</string> <string name="quarter">Kvartal</string>
<string name="two_times_per_week">"2 gange om ugen"</string> <string name="year">År</string>
<string name="five_times_per_week">"5 gange om ugen"</string>
<string name="custom_frequency">"Brugerdefinerede"</string>
<string name="help">"Hjælp &amp; FAQ"</string>
<string name="could_not_export">"Kunne ikke eksportere data"</string>
<string name="could_not_import">"Kunne ikke importere data"</string>
<!-- Appears when the user tries to import a file which we do not support or recognize. -->
<string name="file_not_recognized">"Fil ikke genkendt."</string>
<string name="habits_imported">"Vaner importeret."</string>
<string name="full_backup_success">"Fuld backup eksporteret."</string>
<string name="import_data">"Importer data"</string>
<string name="export_full_backup">"Eksporter fuld backup."</string>
<string name="import_data_summary">"Understøtter fuld backup eksporteret af denne app, samt filer genereret af Tickmate, HabitBull eller Rewire. Se FAQ for mere information."</string>
<string name="export_as_csv_summary">"Opretter filer, der kan åbnes af regneark fra Microsoft Excel eller OpenOffice Calc. Denne fil kan ikke importeres tilbage."</string>
<string name="export_full_backup_summary">"Opretter en fil, der indeholder alle dine data. Denne fil kan importeres tilbage."</string>
<string name="bug_report_failed">"Kunne ikke generere fejlrapport."</string>
<string name="generate_bug_report">"Generer fejlrapport"</string>
<string name="troubleshooting">"Fejlfinding"</string>
<string name="help_translate">"Hjælpe med at oversætte denne app"</string>
<string name="night_mode">"Nat-tilstand"</string>
<string name="use_pure_black">"Brug ren sort i nat-tilstand"</string>
<string name="pure_black_description">"Erstatter grå baggrunde med ren sort i nat-tilstand. Reducerer batteriforbruget i telefoner med AMOLED skærm."</string>
<string name="interface_preferences">"Grænseflade"</string>
<string name="reverse_days">"Omvendt rækkefølge af dage"</string>
<string name="reverse_days_description">"Vis dag i omvendt rækkefølge på hovedskærmen"</string>
<string name="day">"Dag"</string>
<string name="week">"Uge"</string>
<string name="month">"Måned"</string>
<!-- Three-month period -->
<string name="quarter">"Kvartal"</string>
<string name="year">"År"</string>
<!-- Middle part of the sentence '1 time in xx days' --> <!-- Middle part of the sentence '1 time in xx days' -->
<!-- Middle part of the sentence '1 time in xx days' --> <string name="time_every">Tid til</string>
<string name="time_every">"Tid til"</string> <string name="every_x_days">Hver %d dage</string>
<string name="every_x_days">"Hver %d dage"</string> <string name="every_x_weeks">Hver %d uger</string>
<string name="every_x_weeks">"Hver %d uger"</string> <string name="every_x_months">Hver %d måneder</string>
<string name="every_x_months">"Hver %d måneder"</string> <string name="score">Point</string>
<string name="reminder_sound">Påmindelse lyd</string>
<!-- The old "habit strength" has been replaced by "score". Feel free to translate "score" as "strength" or "stability" if it sounds more natural in your language. --> <string name="none">Ingen</string>
<string name="score">"Point"</string>
<string name="reminder_sound">"Påmindelse lyd"</string>
<!-- Appears when the user disables the reminder sound. Could also be "no sound", "mute" or "silent". -->
<string name="none">"Ingen"</string>
</resources> </resources>

@ -1,195 +1,178 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
~
~ This file is part of Loop Habit Tracker.
~
~ Loop Habit Tracker is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by the
~ Free Software Foundation, either version 3 of the License, or (at your
~ option) any later version.
~
~ Loop Habit Tracker is distributed in the hope that it will be useful, but
~ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
~ more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources> <resources>
<string name="app_name">"Loop Habit Tracker"</string> <string name="app_name">Loop Habit Tracker</string>
<string name="main_activity_title">"Gewohnheiten"</string> <string name="main_activity_title">Gewohnheiten</string>
<string name="action_settings">"Einstellungen"</string> <string name="action_settings">Einstellungen</string>
<string name="edit">"Bearbeiten"</string> <string name="edit">Bearbeiten</string>
<string name="delete">"Löschen"</string> <string name="delete">Löschen</string>
<string name="archive">"Archivieren"</string> <string name="archive">Archivieren</string>
<string name="unarchive">"Dearchivieren"</string> <string name="unarchive">Dearchivieren</string>
<string name="add_habit">"Gewohnheit hinzufügen"</string> <string name="add_habit">Gewohnheit hinzufügen</string>
<string name="color_picker_default_title">"Farbe ändern"</string> <string name="color_picker_default_title">Farbe ändern</string>
<string name="toast_habit_created">"Gewohnheit erstellt."</string> <string name="toast_habit_created">Gewohnheit erstellt</string>
<string name="toast_habit_deleted">"Gewohnheiten gelöscht."</string> <string name="toast_habit_deleted">Gewohnheiten gelöscht</string>
<string name="toast_habit_restored">"Gewohnheiten wiederhergestellt."</string> <string name="toast_habit_restored">Gewohnheiten wiederhergestellt</string>
<string name="toast_nothing_to_undo">"Nichts zum rückgängig machen."</string> <string name="toast_nothing_to_undo">Nichts zum Rückgängig machen</string>
<string name="toast_nothing_to_redo">"Nichts zum wiederherstellen."</string> <string name="toast_nothing_to_redo">Nichts zum Wiederherstellen</string>
<string name="toast_habit_changed">"Gewohnheit geändert."</string> <string name="toast_habit_changed">Gewohnheit geändert</string>
<string name="toast_habit_changed_back">Gewohnheit zurückgeändert</string>
<!-- This appears when the user edits a habit, and then undoes the action. The habit is "changed back" to what is was before. Alternatively, "Habit restored". --> <string name="toast_habit_archived">Gewohnheiten archiviert</string>
<string name="toast_habit_changed_back">"Gewohnheit zurückgeändert."</string> <string name="toast_habit_unarchived">Gewohnheiten dearchiviert</string>
<string name="toast_habit_archived">"Gewohnheiten archiviert."</string> <string name="overview">Übersicht</string>
<string name="toast_habit_unarchived">"Gewohnheiten dearchiviert."</string> <string name="habit_strength">Stärke</string>
<string name="overview">"Übersicht"</string> <string name="history">Verlauf</string>
<string name="clear">Löschen</string>
<!-- Fuzzy --> <string name="description_hint">Frage (Hast du heute ...?)</string>
<string name="habit_strength">"Stärke"</string> <string name="repeat">Wiederhole</string>
<string name="history">"Verlauf"</string> <string name="times_every">Mal in</string>
<string name="clear">"Löschen"</string> <string name="days">Tagen</string>
<string name="description_hint">"Frage (Hast du heute ...?)"</string> <string name="reminder">Erinnerung</string>
<string name="discard">Verwerfen</string>
<!-- This and the next two terms form the sentence "Repeat 3 times in 7 days" that you see when you create a habit. Let me know if you have trouble adapting this into your language. --> <string name="save">Speichern</string>
<string name="repeat">"Wiederhole"</string> <string name="streaks">Strähnen</string>
<string name="no_habits_found">Du hast keine aktiven Gewohnheiten</string>
<!-- Fuzzy --> <string name="long_press_to_toggle">Tippe und halte um aus- bzw. abzuwählen</string>
<string name="times_every">"Mal in"</string> <string name="reminder_off">Aus</string>
<string name="days">"Tagen"</string> <string name="validation_name_should_not_be_blank">Name darf nicht leer sein.</string>
<string name="reminder">"Erinnerung"</string> <string name="validation_number_should_be_positive">Zahl muss positiv sein.</string>
<string name="discard">"Verwerfen"</string> <string name="validation_at_most_one_rep_per_day">Du musst wenigstens eine Wiederholung pro Tag haben</string>
<string name="save">"Speichern"</string> <string name="create_habit">Gewohnheit erstellen</string>
<string name="edit_habit">Gewohnheit bearbeiten</string>
<!-- Streak as in "winning streak". That is, the number of times a user has performed a habit consecutively. Similar terms are "chains" or "series". --> <string name="check">Abhaken</string>
<!-- Fuzzy --> <string name="snooze">Später</string>
<string name="streaks">"Strähnen"</string>
<string name="no_habits_found">"Du hast keine aktiven Gewohnheiten"</string>
<string name="long_press_to_toggle">"Berühre und halte um zu (de)markieren"</string>
<string name="reminder_off">"Aus"</string>
<string name="validation_name_should_not_be_blank">"Name darf nicht leer sein."</string>
<string name="validation_number_should_be_positive">"Zahl muss positiv sein."</string>
<string name="validation_at_most_one_rep_per_day">"Du musst wenigstens eine Wiederholung pro Tag haben"</string>
<string name="create_habit">"Gewohnheit erstellen"</string>
<string name="edit_habit">"Gewohnheit bearbeiten"</string>
<string name="check">"Abhaken"</string>
<string name="snooze">"Später"</string>
<!-- App introduction --> <!-- App introduction -->
<string name="intro_title_1">"Willkommen"</string> <string name="intro_title_1">Willkommen</string>
<string name="intro_description_1">"Loop Habit Tracker hilft dir gute Gewohnheiten anzueignen."</string> <string name="intro_description_1">Loop Habit Tracker hilft dir gute Gewohnheiten implementieren.</string>
<string name="intro_title_2">"Erstelle einige neue Gewohnheiten"</string> <string name="intro_title_2">Erstelle neue Gewohnheiten</string>
<string name="intro_description_2">"Jeden Tag, nachdem du die Gewohnheit gemacht hast, hake sie in der App ab."</string> <string name="intro_description_2">Jeden Tag, nachdem du die Gewohnheit gemacht hast, hake sie in der App ab.</string>
<string name="intro_title_3">"Bleib dran"</string> <string name="intro_title_3">Bleib dran</string>
<string name="intro_description_3">"Gewohnheiten, die über eine längere Zeit absolviert werden, bekommen einen ganzen Stern."</string> <string name="intro_description_3">Gewohnheiten, die über einen längeren Zeitraum absolviert werden, bekommen einen ganzen Stern.</string>
<string name="intro_title_4">"Verfolge deinen Fortschritt"</string> <string name="intro_title_4">Verfolge deinen Fortschritt</string>
<string name="intro_description_4">"Detaillierte Diagramme zeigen dir wie sich deine Gewohnheiten entwickelt haben."</string> <string name="intro_description_4">Detaillierte Diagramme zeigen dir an wie sich deine Gewohnheiten entwickelt haben.</string>
<string name="interval_15_minutes">"15 Minuten"</string> <string name="interval_15_minutes">15 Minuten</string>
<string name="interval_30_minutes">"30 Minuten"</string> <string name="interval_30_minutes">30 Minuten</string>
<string name="interval_1_hour">"1 Stunde"</string> <string name="interval_1_hour">1 Stunde</string>
<string name="interval_2_hour">"2 Stunden"</string> <string name="interval_2_hour">2 Stunden</string>
<string name="interval_4_hour">"4 Stunden"</string> <string name="interval_4_hour">4 Stunden</string>
<string name="interval_8_hour">"8 Stunden"</string> <string name="interval_8_hour">8 Stunden</string>
<string name="pref_toggle_title">"Gewohnheiten durch kurzes Drücken abhaken"</string> <string name="interval_24_hour">24 Stunden</string>
<string name="pref_toggle_description">"Bequemer, kann aber eine falsche Auswahl verursachen."</string> <string name="pref_toggle_title">Gewohnheiten durch kurzes Tippen abhaken</string>
<string name="pref_snooze_interval_title">"\"Später erinnern\"-Intervall bei Erinnerungen"</string> <string name="pref_toggle_description">Abhaken durch einfaches Tippen, anstatt durch Tippen und Halten. Bequemer, kann aber eine falsche Auswahl verursachen.</string>
<string name="pref_rate_this_app">"Bewerte diese App bei Google Play"</string> <string name="pref_snooze_interval_title">\"Später erinnern\"-Intervall bei Erinnerungen</string>
<string name="pref_send_feedback">"Sende dem Entwickler Feedback"</string> <string name="pref_rate_this_app">Bewerte diese App auf Google Play</string>
<string name="pref_view_source_code">"Zeige den Quellcode auf GitHub"</string> <string name="pref_send_feedback">Sende dem Entwickler Feedback</string>
<string name="pref_view_app_introduction">"Zeige Anleitung"</string> <string name="pref_view_source_code">Zeige den Quellcode auf GitHub</string>
<string name="links">"Links"</string> <string name="pref_view_app_introduction">Zeige die Anleitung</string>
<string name="behavior">"Verhalten"</string> <string name="links">Links</string>
<string name="name">"Name"</string> <string name="behavior">Verhalten</string>
<string name="show_archived">"Zeige Archiviertes"</string> <string name="name">Name</string>
<string name="settings">"Einstellungen"</string> <string name="settings">Einstellungen</string>
<string name="snooze_interval">"\"Später erinnern\"-Intervall"</string> <string name="snooze_interval">\"Später erinnern\"-Intervall</string>
<string name="hint_title">"Wusstest du?"</string> <string name="hint_title">Wusstest du?</string>
<string name="hint_drag">"Um Einträge umzusortieren, drücke und ziehe sie an die richtige Stelle."</string> <string name="hint_drag">Um Einträge umzusortieren, tippe und ziehe sie an die richtige Stelle.</string>
<string name="hint_landscape">"Du kannst mehr Tage sehen, wenn du dein Smartphone quer hältst."</string> <string name="hint_landscape">Du kannst mehr Tage sehen, wenn du dein Smartphone quer hältst.</string>
<string name="delete_habits">"Gewohnheiten löschen"</string> <string name="delete_habits">Gewohnheiten löschen</string>
<string name="delete_habits_message">"Diese Gewohnheit wird permanent gelöscht. Dies kann nicht rückgängig gemacht werden."</string> <string name="delete_habits_message">Diese Gewohnheit wird permanent gelöscht. Dies kann nicht rückgängig gemacht werden.</string>
<string name="weekends">"An Wochenenden"</string> <string name="habit_not_found">Gewohnheit gelöscht / nicht gefunden</string>
<string name="any_weekday">"Werktags"</string> <string name="weekends">An Wochenenden</string>
<string name="any_day">"Jeden Tag"</string> <string name="any_weekday">Werktags</string>
<string name="select_weekdays">"Wähle die Tage"</string> <string name="any_day">Jeden Tag</string>
<string name="export_to_csv">"Daten als CSV exportieren"</string> <string name="select_weekdays">Wähle die Tage</string>
<string name="done_label">"Fertig"</string> <string name="export_to_csv">als CSV exportieren</string>
<string name="clear_label">"Löschen"</string> <string name="done_label">Fertig</string>
<string name="select_hours">"Wähle Stunden"</string> <string name="clear_label">Löschen</string>
<string name="select_minutes">"Wähle Minuten"</string> <string name="select_hours">Wähle Stunden</string>
<string name="select_minutes">Wähle Minuten</string>
<!-- Short description used on the Google Play store. There is an 80-character limit. --> <string name="about">Über</string>
<string name="store_short_description">"Nimm gute Gewohnheiten an und verfolge deinen Fortschritt (ohne Werbung)"</string> <string name="translators">Übersetzer</string>
<string name="store_description_1">"Loop hilft dir gute Gewohnheiten anzunehmen und deine langfristigen Ziele zu erreichen. Detaillierte Statistiken zeigen dir, wie du dich entwickelt hast. Es ist ohne Werbung und Open Source."</string> <string name="developers">Entwickler</string>
<string name="store_feature_interface">"&lt;b&gt;Einfache, schöne und moderne Oberfläche&lt;/b&gt; <string name="version_n">Version %s</string>
Loop hat eine minimale Oberfläche und ist deshalb einfach zu benutzen. Es folgt den Material Design Richtlinien."</string> <string name="frequency">Frequenz</string>
<string name="checkmark">Häkchen</string>
<!-- Fuzzy --> <string name="strength">Stärke</string>
<string name="store_feature_score">"&lt;b&gt;Habit Wertung&lt;/b&gt; <string name="best_streaks">Beste Strähnen</string>
Um dir deine kleinen Schwächen zu zeigen hat Loop einen Algorithmus, um deine Gewohnheiten zu erkennen. Jede Wiederholung verstärkt diese und jedes Aussetzen schwächt sie. Aber ein paar Verfehlungen nach langem Durchhalten machen natürlich nicht gleich alles zu Nichte."</string> <string name="current_streaks">Derzeitige Strähne</string>
<string name="store_feature_statistics">"&lt;b&gt;Statistiken&lt;/b&gt; <string name="number_of_repetitions">Anzahl der Wiederholungen</string>
Schau dir an, wie sich deine Gewohnheiten im Laufe der Zeit entwickelt haben. Schau auf die schönen Diagramme und gehe zurück im gesamten Verlauf."</string> <string name="last_x_days">Letzten %d Tage</string>
<string name="store_feature_schedules">"&lt;b&gt;Flexible Zeiten&lt;/b&gt; <string name="last_x_weeks">Letzten %d Wochen</string>
Unterstützt sowohl tägliche Vorgaben, als auch komplexere Pläne, wie etwa 3 Mal pro Woche; einmal in jeder anderen Woche; oder jeden anderen Tag."</string> <string name="last_x_months">Letzten %d Monate</string>
<string name="store_feature_reminders">"&lt;b&gt;Erinnerungen&lt;/b&gt; <string name="last_x_years">Letzten %d Jahre</string>
Erstelle individuelle Erinnerungen und wann diese dich benachrichtigen sollen. Kontrolliere deine Vorhaben ganz einfach und lehne sie bei Bedarf direkt ab, ohne die App zu öffnen."</string> <string name="all_time">Allzeit</string>
<string name="store_feature_opensource">"&lt;b&gt;Komplett werbefrei und Open Source&lt;/b&gt; <string name="every_day">Jeden Tag</string>
Es gibt absolut keine Werbung, nervende Einblendungen oder merkwürdige Berechtigungen in dieser App und das wird auch so bleiben. Der komplette Quellcode steht unter der GPLv3."</string> <string name="every_week">Jede Woche</string>
<string name="store_feature_wear">"&lt;b&gt;Optimiert für Smartwatches&lt;/b&gt; <string name="two_times_per_week">2 Mal pro Woche</string>
Erinnerungen können direkt von deiner Android Wear Watch abgehakt, pausiert oder verschoben werden."</string> <string name="five_times_per_week">5 Mal pro Woche</string>
<string name="about">"Über"</string> <string name="custom_frequency">Benutzerdefiniert</string>
<string name="translators">"Übersetzer"</string> <string name="help">Hilfe &amp; FAQ</string>
<string name="developers">"Entwickler"</string> <string name="could_not_export">Der Export von Daten ist fehlgeschlagen.</string>
<string name="could_not_import">Der Import von Daten ist fehlgeschlagen.</string>
<!-- %s will get replaced by the version number. For example, "Versão %d" will become "Versão 1.2.0". --> <string name="file_not_recognized">Datei nicht erkannt.</string>
<string name="version_n">"Version %s"</string> <string name="habits_imported">Gewohnheiten wurden erfolgreich importiert.</string>
<string name="frequency">"Frequenz"</string> <string name="full_backup_success">Vollständige Sicherung erfolgreich exportiert.</string>
<string name="import_data">Importiere Daten</string>
<!-- Fuzzy --> <string name="export_full_backup">Exportiere vollständige Sicherung</string>
<string name="checkmark">"Häkchen"</string> <string name="import_data_summary">Unterstützt vollständige Sicherungen dieser App, sowie erstellte Sicherungen von Tickmate, HabitBull oder Rewire. Siehe FAQ für mehr Information.</string>
<string name="export_as_csv_summary">Erzeugt Dateien, die von Tabellenkalkulationsprogrammen, wie Microsoft Excel oder LibreOffice Calc, geöffnet werden können. Diese Dateien können nicht wieder importiert werden.</string>
<!-- This is a shorter version of "Habit Strength" --> <string name="export_full_backup_summary">Erzeugt eine Datei, die alle deine Daten enthält. Diese Datei kann wieder importiert werden.</string>
<!-- Fuzzy --> <string name="bug_report_failed">Fehlermeldung konnte nicht erstellt werden.</string>
<string name="strength">"Stärke"</string> <string name="generate_bug_report">Einen Fehler melden</string>
<string name="troubleshooting">Fehlerbehebung</string>
<!-- Fuzzy --> <string name="help_translate">Hilf diese App zu übersetzen</string>
<string name="best_streaks">"Beste Strähnen"</string> <string name="night_mode">Nachtmodus</string>
<string name="use_pure_black">Reines Schwarz im Nachtmodus verwenden</string>
<!-- Fuzzy --> <string name="pure_black_description">Ersetzt das Grau im Hintergrund durch ein reines Schwarz im Nachtmodus. Reduziert den Stromverbrauch von Smartphones mit einem AMOLED Display.</string>
<string name="current_streaks">"Derzeitige Strähne"</string> <string name="interface_preferences">Oberfläche</string>
<string name="number_of_repetitions">"Anzahl der Wiederholungen"</string> <string name="reverse_days">Die Reihenfolge der Tage umkehren</string>
<string name="last_x_days">"Letzten %d Tage"</string> <string name="reverse_days_description">Zeigt die Tage im Hauptfenster in umgekehrter Reihenfolge an</string>
<string name="last_x_weeks">"Letzten %d Wochen"</string> <string name="day">Tag</string>
<string name="last_x_months">"Letzten %d Monate"</string> <string name="week">Woche</string>
<string name="last_x_years">"Letzten %d Jahre"</string> <string name="month">Monat</string>
<string name="quarter">Quartal</string>
<!-- "All time" number of repetitions. Or number of repetitions "since the beginning". --> <string name="year">Jahr</string>
<!-- Fuzzy --> <string name="total">Gesamt</string>
<string name="all_time">"Allzeit"</string>
<string name="every_day">"Jeden Tag"</string>
<string name="every_week">"Jede Woche"</string>
<string name="two_times_per_week">"2 Mal pro Woche"</string>
<string name="five_times_per_week">"5 Mal pro Woche"</string>
<string name="custom_frequency">"Benutzerdefiniert"</string>
<string name="help">"Hilfe &amp; FAQ"</string>
<string name="could_not_export">"Der Export von Daten ist fehlgeschlagen."</string>
<string name="could_not_import">"Der Import von Daten ist fehlgeschlagen."</string>
<!-- Appears when the user tries to import a file which we do not support or recognize. -->
<string name="file_not_recognized">"Datei nicht erkannt."</string>
<string name="habits_imported">"Gewohnheiten wurden erfolgreich importiert."</string>
<string name="full_backup_success">"Vollständige Sicherung erfolgreich exportiert."</string>
<string name="import_data">"Importiere Daten"</string>
<string name="export_full_backup">"Exportiere vollständige Sicherung"</string>
<string name="import_data_summary">"Unterstützt vollständige Sicherungen dieser App, als auch erstellte Sicherungen von Tickmate, HabitBull oder Rewire. Siehe FAQ für mehr Information."</string>
<string name="export_as_csv_summary">"Erzeugt Dateien, die von Tabellenkalkulationsprogrammen, wie Microsoft Excel oder LibreOffice Calc, geöffnet werden können. Diese Dateien können nicht wieder importiert werden."</string>
<string name="export_full_backup_summary">"Erzeugt eine Datei, die alle deine Daten enthält. Diese Datei kann wieder importiert werden."</string>
<string name="bug_report_failed">"Fehlermeldung konnte nicht erstellt werden."</string>
<string name="generate_bug_report">"Einen Fehler melden"</string>
<string name="troubleshooting">"Fehlerbehebung"</string>
<string name="help_translate">"Hilf diese App zu übersetzen"</string>
<string name="night_mode">"Nachtmodus"</string>
<string name="use_pure_black">"Reines Schwarz im Nachtmodus verwenden"</string>
<string name="pure_black_description">"Ersetzt das Grau im Hintergrund mit einem reinen Schwarz im Nachtmodus. Reduziert den Stromverbrauch von Smartphones mit einem AMOLED Display."</string>
<string name="interface_preferences">"Oberfläche"</string>
<string name="reverse_days">"Die Reihenfolge der Tage umkehren"</string>
<string name="reverse_days_description">"Zeigt die Tage im Hauptfenster in umgekehrter Reihenfolge an."</string>
<string name="day">"Tag"</string>
<string name="week">"Woche"</string>
<string name="month">"Monat"</string>
<!-- Three-month period -->
<string name="quarter">"Quartal"</string>
<string name="year">"Jahr"</string>
<!-- Middle part of the sentence '1 time in xx days' --> <!-- Middle part of the sentence '1 time in xx days' -->
<!-- Middle part of the sentence '1 time in xx days' --> <string name="time_every">Mal in</string>
<string name="time_every">"Mal in"</string> <string name="every_x_days">Jeden %d Tag</string>
<string name="every_x_days">"Jeden %d Tag"</string> <string name="every_x_weeks">Jede %d Woche</string>
<string name="every_x_weeks">"Jede %d Woche"</string> <string name="every_x_months">Jeden %d Monat</string>
<string name="every_x_months">"Jeden %d Monat"</string> <string name="score">Wertung</string>
<string name="reminder_sound">Benachrichtigungston</string>
<!-- The old "habit strength" has been replaced by "score". Feel free to translate "score" as "strength" or "stability" if it sounds more natural in your language. --> <string name="none">Kein Ton</string>
<string name="score">"Wertung"</string> <string name="filter">Filter</string>
<string name="reminder_sound">"Benachrichtigungston"</string> <string name="hide_completed">Erledigte Gewohnheiten ausblenden</string>
<string name="hide_archived">Archivierte Gewohnheiten ausblenden</string>
<!-- Appears when the user disables the reminder sound. Could also be "no sound", "mute" or "silent". --> <string name="sticky_notifications">Permanente Benachrichtigungen</string>
<string name="none">"Kein Ton"</string> <string name="sticky_notifications_description">Verhindert das Wegwischen von Benachrichtigungen.</string>
<string name="repair_database">Datenbank reparieren</string>
<string name="database_repaired">Datenbank repariert.</string>
<string name="uncheck">Abwählen</string>
<string name="toggle">Umschalten</string>
<string name="action">Aktion</string>
<string name="habit">Gewohnheit</string>
<string name="sort">Sortiere</string>
<string name="manually">Manuell</string>
<string name="by_name">Nach Name</string>
<string name="by_color">Nach Farbe</string>
<string name="by_score">Nach Wertung</string>
<string name="download">Runterladen</string>
<string name="export">Export</string>
</resources> </resources>

@ -1,180 +1,157 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
~
~ This file is part of Loop Habit Tracker.
~
~ Loop Habit Tracker is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by the
~ Free Software Foundation, either version 3 of the License, or (at your
~ option) any later version.
~
~ Loop Habit Tracker is distributed in the hope that it will be useful, but
~ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
~ more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources> <resources>
<string name="app_name">"Loop - Καταγραφή Συνηθειών"</string> <string name="app_name">Loop - Καταγραφή Συνηθειών</string>
<string name="main_activity_title">"Συνήθειες"</string> <string name="main_activity_title">Συνήθειες</string>
<string name="action_settings">"Ρυθμίσεις"</string> <string name="action_settings">Ρυθμίσεις</string>
<string name="edit">"Επεξεργασία"</string> <string name="edit">Επεξεργασία</string>
<string name="delete">"Διαγραφή"</string> <string name="delete">Διαγραφή</string>
<string name="archive">"Αρχειοθέτηση"</string> <string name="archive">Αρχειοθέτηση</string>
<string name="unarchive">"Κατάργηση αρχειοθέτησης"</string> <string name="unarchive">Κατάργηση αρχειοθέτησης</string>
<string name="add_habit">"Νέα συνήθεια"</string> <string name="add_habit">Νέα συνήθεια</string>
<string name="color_picker_default_title">"Αλλαγή χρώματος"</string> <string name="color_picker_default_title">Αλλαγή χρώματος</string>
<string name="toast_habit_created">"Δημιουργήθηκε συνήθεια."</string> <string name="toast_habit_created">Δημιουργήθηκε συνήθεια.</string>
<string name="toast_habit_deleted">"Συνήθεια διαγράφτηκε."</string> <string name="toast_habit_deleted">Συνήθεια διαγράφτηκε.</string>
<string name="toast_habit_restored">"Η συνήθεια επαναφέρθηκε."</string> <string name="toast_habit_restored">Η συνήθεια επαναφέρθηκε.</string>
<string name="toast_nothing_to_undo">"Τίποτα για αναίρεση"</string> <string name="toast_nothing_to_undo">Τίποτα για αναίρεση</string>
<string name="toast_nothing_to_redo">"Τίποτα προς επανάληψη."</string> <string name="toast_nothing_to_redo">Τίποτα προς επανάληψη.</string>
<string name="toast_habit_changed">"Η συνήθεια άλλαξε"</string> <string name="toast_habit_changed">Η συνήθεια άλλαξε</string>
<string name="toast_habit_changed_back">Δεν έγινε αλλαγή.</string>
<!-- This appears when the user edits a habit, and then undoes the action. The habit is "changed back" to what is was before. Alternatively, "Habit restored". --> <string name="toast_habit_archived">Η συνήθεια αρχειοθετήθηκε.</string>
<string name="toast_habit_changed_back">"Δεν έγινε αλλαγή."</string> <string name="toast_habit_unarchived">Έγινε αφαίρεση αρχειοθέτησης.</string>
<string name="toast_habit_archived">"Η συνήθεια αρχειοθετήθηκε."</string> <string name="overview">Επισκόπηση</string>
<string name="toast_habit_unarchived">"Έγινε αφαίρεση αρχειοθέτησης."</string> <string name="habit_strength">Δύναμη συνήθειας</string>
<string name="overview">"Επισκόπηση"</string> <string name="history">Ιστορικό</string>
<string name="habit_strength">"Δύναμη συνήθειας"</string> <string name="clear">Εκκαθάριση</string>
<string name="history">"Ιστορικό"</string> <string name="description_hint">Ερώτηση (Κάνατε...σήμερα;)</string>
<string name="clear">"Εκκαθάριση"</string> <string name="repeat">Επανέλαβε</string>
<string name="description_hint">"Ερώτηση (Κάνατε...σήμερα;)"</string> <string name="times_every">φορές την</string>
<string name="days">ημέρες</string>
<!-- This and the next two terms form the sentence "Repeat 3 times in 7 days" that you see when you create a habit. Let me know if you have trouble adapting this into your language. --> <string name="reminder">Υπενθύμιση</string>
<string name="repeat">"Επανέλαβε"</string> <string name="discard">Απόρριψη</string>
<string name="times_every">"φορές την"</string> <string name="save">Αποθήκευση</string>
<string name="days">"ημέρες"</string> <string name="streaks">Σερί</string>
<string name="reminder">"Υπενθύμιση"</string> <string name="no_habits_found">Δεν έχετε ενεργές συνήθειες</string>
<string name="discard">"Απόρριψη"</string> <string name="long_press_to_toggle">Πατήστε παρατεταμένα για επιλογή η αποεπιλογή</string>
<string name="save">"Αποθήκευση"</string> <string name="reminder_off">Χωρίς</string>
<string name="validation_name_should_not_be_blank">Το όνομα δεν μπορεί να είναι κενό</string>
<!-- Streak as in "winning streak". That is, the number of times a user has performed a habit consecutively. Similar terms are "chains" or "series". --> <string name="validation_number_should_be_positive">Πρεπει να είναι θετικό</string>
<string name="streaks">"Σερί"</string> <string name="validation_at_most_one_rep_per_day">Μπορείτε να κάνετε μονάχα μία επανάληψη ανά ημέρα</string>
<string name="no_habits_found">"Δεν έχετε ενεργές συνήθειες"</string> <string name="create_habit">Δημιουργία συνήθειας</string>
<string name="long_press_to_toggle">"Πατήστε παρατεταμένα για επιλογή η αποεπιλογή"</string> <string name="edit_habit">Επεξεργασία συνήθειας</string>
<string name="reminder_off">"Χωρίς"</string> <string name="check">Επιλογή</string>
<string name="validation_name_should_not_be_blank">"Το όνομα δεν μπορεί να είναι κενό"</string> <string name="snooze">Αργότερα</string>
<string name="validation_number_should_be_positive">"Πρεπει να είναι θετικό"</string>
<string name="validation_at_most_one_rep_per_day">"Μπορείτε να κάνετε μονάχα μία επανάληψη ανά ημέρα"</string>
<string name="create_habit">"Δημιουργία συνήθειας"</string>
<string name="edit_habit">"Επεξεργασία συνήθειας"</string>
<string name="check">"Επιλογή"</string>
<string name="snooze">"Αργότερα"</string>
<!-- App introduction --> <!-- App introduction -->
<string name="intro_title_1">"Καλώς ορίσατε"</string> <string name="intro_title_1">Καλώς ορίσατε</string>
<string name="intro_description_1">"Το Loop - Καταγραφή Συνηθειών σας βοηθάει να δημιουργήσετε και να διατηρήσετε καλές συνήθειες."</string> <string name="intro_description_1">Το Loop - Καταγραφή Συνηθειών σας βοηθάει να δημιουργήσετε και να διατηρήσετε καλές συνήθειες.</string>
<string name="intro_title_2">"Δημιουργήστε μερικές νέες συνήθειες"</string> <string name="intro_title_2">Δημιουργήστε μερικές νέες συνήθειες</string>
<string name="intro_description_2">"Κάθε μέρα, με το πέρας της συνήθειας, βάλτε ένα τικ στην εφαρμογή."</string> <string name="intro_description_2">Κάθε μέρα, με το πέρας της συνήθειας, βάλτε ένα τικ στην εφαρμογή.</string>
<string name="intro_title_3">"Συνεχίστε να το κάνετε"</string> <string name="intro_title_3">Συνεχίστε να το κάνετε</string>
<string name="intro_description_3">"Συνήθειες που εκτελούνται με συνέπεια για πολύ καιρό"</string> <string name="intro_description_3">Συνήθειες που εκτελούνται με συνέπεια για πολύ καιρό</string>
<string name="intro_title_4">"Κατέγραψε την πρόοδο σου"</string> <string name="intro_title_4">Κατέγραψε την πρόοδο σου</string>
<string name="intro_description_4">"Λεπτομερή διαγράμματα σας δείχνουν την πρόοδο των συνηθειών."</string> <string name="intro_description_4">Λεπτομερή διαγράμματα σας δείχνουν την πρόοδο των συνηθειών.</string>
<string name="interval_15_minutes">"15 λεπτά"</string> <string name="interval_15_minutes">15 λεπτά</string>
<string name="interval_30_minutes">"30 λεπτά"</string> <string name="interval_30_minutes">30 λεπτά</string>
<string name="interval_1_hour">"1 ώρα"</string> <string name="interval_1_hour">1 ώρα</string>
<string name="interval_2_hour">"2 ώρες"</string> <string name="interval_2_hour">2 ώρες</string>
<string name="interval_4_hour">"4 ώρες"</string> <string name="interval_4_hour">4 ώρες</string>
<string name="interval_8_hour">"8 ώρες"</string> <string name="interval_8_hour">8 ώρες</string>
<string name="pref_toggle_title">"Κάντε εναλλαγή των επαναλήψεων με σύντομο πάτημα"</string> <string name="pref_toggle_title">Κάντε εναλλαγή των επαναλήψεων με σύντομο πάτημα</string>
<string name="pref_toggle_description">"Βολικότερο, αλλά ίσως προκαλέσει ακούσιες εναλλαγές."</string> <string name="pref_toggle_description">Βολικότερο, αλλά ίσως προκαλέσει ακούσιες εναλλαγές.</string>
<string name="pref_snooze_interval_title">"Διάστημα αναβολής υπενθυμίσεων"</string> <string name="pref_snooze_interval_title">Διάστημα αναβολής υπενθυμίσεων</string>
<string name="pref_rate_this_app">"Βαθμολογήστε αυτή την εφαρμογή στο Google Play"</string> <string name="pref_rate_this_app">Βαθμολογήστε αυτή την εφαρμογή στο Google Play</string>
<string name="pref_send_feedback">"Στείλετε σχόλια"</string> <string name="pref_send_feedback">Στείλετε σχόλια</string>
<string name="pref_view_source_code">"Δείτε τον πηγαίο κώδικα στο GitHub"</string> <string name="pref_view_source_code">Δείτε τον πηγαίο κώδικα στο GitHub</string>
<string name="pref_view_app_introduction">"Δείτε την εισαγωγή"</string> <string name="pref_view_app_introduction">Δείτε την εισαγωγή</string>
<string name="links">"Σύνδεσμοι"</string> <string name="links">Σύνδεσμοι</string>
<string name="behavior">"Συμπεριφορά"</string> <string name="behavior">Συμπεριφορά</string>
<string name="name">"Όνομα"</string> <string name="name">Όνομα</string>
<string name="show_archived">"Αρχειοθετημένα"</string> <string name="settings">Ρυθμίσεις</string>
<string name="settings">"Ρυθμίσεις"</string> <string name="snooze_interval">Διάστημα αναβολής</string>
<string name="snooze_interval">"Διάστημα αναβολής"</string> <string name="hint_title">Γνωρίζατε;</string>
<string name="hint_title">"Γνωρίζατε;"</string> <string name="hint_drag">Αναδιατάξετε τις συνήθειες πατώντας παρατεταμένα στο όνομα και σύροντας στην σωστή θέση.</string>
<string name="hint_drag">"Αναδιατάξετε τις συνήθειες πατώντας παρατεταμένα στο όνομα και σύροντας στην σωστή θέση."</string> <string name="hint_landscape">Μπορείτε να δείτε περισσότερες ημέρες στην οριζόντια προβολή.</string>
<string name="hint_landscape">"Μπορείτε να δείτε περισσότερες ημέρες στην οριζόντια προβολή."</string> <string name="delete_habits">Διαγραφή συνηθειών</string>
<string name="delete_habits">"Διαγραφή συνηθειών"</string> <string name="delete_habits_message">Οι συνήθειες θα διαγραφτούν οριστικά. Αυτό δεν μπορεί να αναιρεθεί.</string>
<string name="delete_habits_message">"Οι συνήθειες θα διαγραφτούν οριστικά. Αυτό δεν μπορεί να αναιρεθεί."</string> <string name="weekends">Σαββατοκύριακα</string>
<string name="weekends">"Σαββατοκύριακα"</string> <string name="any_weekday">Δευτέρα μέχρι Παρασκευή</string>
<string name="any_weekday">"Δευτέρα μέχρι Παρασκευή"</string> <string name="any_day">Οποιαδήποτε μέρα της εβδομάδας</string>
<string name="any_day">"Οποιαδήποτε μέρα της εβδομάδας"</string> <string name="select_weekdays">Επιλογή ημερών</string>
<string name="select_weekdays">"Επιλογή ημερών"</string> <string name="export_to_csv">Εξαγωγή σαν CSV</string>
<string name="export_to_csv">"Εξαγωγή σαν CSV"</string> <string name="done_label">Έγινε</string>
<string name="done_label">"Έγινε"</string> <string name="clear_label">Εκκαθάριση</string>
<string name="clear_label">"Εκκαθάριση"</string> <string name="select_hours">Επιλογή ωρών</string>
<string name="select_hours">"Επιλογή ωρών"</string> <string name="select_minutes">Επιλογή λεπτών</string>
<string name="select_minutes">"Επιλογή λεπτών"</string> <string name="about">Σχετικά με</string>
<string name="translators">Μεταφραστές</string>
<!-- Short description used on the Google Play store. There is an 80-character limit. --> <string name="developers">Προγραμματιστές</string>
<string name="store_short_description">"Δημιουργήστε καλές συνήθειες και δείτε την πρόοδο τους(ad-free)"</string> <string name="version_n">Έκδοση %s</string>
<string name="store_description_1">"Το Loop συμβάλλει στην δημιουργία και διατήρηση καλών συνηθειών, επιτρέποντας την επίτευξη των στόχων σας. Λεπτομερή διαγράμματα και στατιστικά για την πρόοδο των συνηθειών σας. Χωρίς διαφημίσεις, ανοικτού κώδικα."</string> <string name="frequency">Συχνότητα</string>
<string name="store_feature_interface">"&lt;b&gt;Απλή, κομψή και μοντέρνα διεπαφή χρήστη&lt;/b&gt; <string name="checkmark">Σημάδι επιλογής</string>
Το Loop έχει μια μινιμαλιστική διεπαφή χρήστη που το καθιστά εύκολο στην χρήση ενώ ακολουθεί τις κατευθυντήριες γραμμές του ματεριαλιστικού σχεδιασμού."</string> <string name="strength">Δύναμη</string>
<string name="store_feature_score">"&lt;b&gt;Σκόρ συνήθειας&lt;b&gt; <string name="best_streaks">Καλύτερα σερί</string>
Εκτώς της προβολής του τρέχοντος σερί, το Loop χρησιμοποιεί έναν προηγμένο αλγόριθμο για τον υπολογισμό της δύναμης των συνηθειών σας. Κάθε επανάληψη κάνει την συνήθεια δυνατότερη ενώ κάθε παράλειψη ασθενέστερη. Ωστόσο μερικές χαμένες μέρες μετά από ένα μεγάλο σερί δεν θα καταστρέψουν την συνολική σας πρόοδο."</string> <string name="current_streaks">Τρέχον σερί</string>
<string name="store_feature_statistics">"&lt;b&gt;Λεπτομερή διαγράμματα και στατιστικά&lt;/b&gt; <string name="number_of_repetitions">Αριθμός επαναλήψεων</string>
Δείτε καθαρά την πρόοδο των συνηθειών σας σε βάθος χρόνου με όμορφα και λεπτομερή διαγράμματα. Ανατρέξτε στο πλήρες ιστορικό των συνηθειών σας."</string> <string name="last_x_days">Τελευταίες %d ημέρες</string>
<string name="store_feature_schedules">"&lt;b&gt;Ευέλικτα προγράμματα&lt;/b&gt; <string name="last_x_weeks">Τελευταίες %d εβδομάδες</string>
Υποστηρίζει εξίσου καθημερινές συνήθειες και συνήθειες με περίπλοκα προγράμματα, όπως 3 φορές κάθε εβδομάδα, μια φορά κάθε δεύτερη εβδομάδα ή ημέρα."</string> <string name="last_x_months">Τελευταίους %d μήνες</string>
<string name="store_feature_reminders">"&lt;b&gt;Υπενθυμίσεις&lt;/b&gt; <string name="last_x_years">Τελευταία %d χρόνια</string>
Δημιουργήστε μία εξατομικευμένη υπενθύμιση για την κάθε συνήθεια, σε μια επιλεγμένη ώρα της ημέρας. Τσεκάρετε, απορρίψτε ή αναβάλλετε εύκολα την συνήθεια απευθείας από την υπενθύμιση χωρίς να ανοίξετε την εφαρμογή."</string> <string name="all_time">Όλα</string>
<string name="store_feature_opensource">"&lt;b&gt;Χωρίς διαφημίσεις και ανοικτού κώδικα&lt;/b&gt; <string name="every_day">Κάθε μέρα</string>
Χωρίς καθόλου διαφημίσεις, ενοχλητικές ειδοποιήσεις ή παρεμβατικές άδειες για την εφαρμογή και δεν θα υπάρξουν ποτέ. Το σύνολο του κώδικα είναι διαθέσιμο υπό το GPLv3."</string> <string name="every_week">Κάθε εβδομάδα</string>
<string name="store_feature_wear">"&lt;b&gt;Κατασκευασμένο για smartwatch&lt;/b&gt; <string name="two_times_per_week">2 φορές την εβδομάδα</string>
Οι υπενθυμίσεις μπορούν να επιλεχθούν, να αναβληθούν ή να απορριφθούν απευθείας από το Android Wear ρολόι σας."</string> <string name="five_times_per_week">5 φορές την εβδομάδα</string>
<string name="about">"Σχετικά με"</string> <string name="custom_frequency">Προσαρμογή</string>
<string name="translators">"Μεταφραστές"</string> <string name="help">Βοήθεια &amp; FAQ</string>
<string name="developers">"Προγραμματιστές"</string> <string name="could_not_export">Αποτυχία εξαγωγής.</string>
<string name="could_not_import">Αποτυχία εισαγωγής.</string>
<!-- %s will get replaced by the version number. For example, "Versão %d" will become "Versão 1.2.0". --> <string name="file_not_recognized">Άγνωστο αρχείο.</string>
<string name="version_n">"Έκδοση %s"</string> <string name="habits_imported">Οι συνήθειες εισάχθηκαν επιτυχώς.</string>
<string name="frequency">"Συχνότητα"</string> <string name="full_backup_success">Το πλήρες αντίγραφο εξάχθηκε επιτυχώς.</string>
<string name="checkmark">"Σημάδι επιλογής"</string> <string name="import_data">Εισαγωγή δεδομένων</string>
<string name="export_full_backup">Εξαγωγή πλήρους αντιγ. ασφαλείας</string>
<!-- This is a shorter version of "Habit Strength" --> <string name="import_data_summary">Υποστηρίζει πλήρως αντίγραφα ασφαλείας που έχουν εξαχθεί από την ίδια την εφαρμογή καθώς και από τα Tickmate, HabitBull και Rewire. Δείτε τις FAQ για περισσότερες πληροφορίες.</string>
<string name="strength">"Δύναμη"</string> <string name="export_as_csv_summary">Παράγει αρχεία τα οποία μπορούν να ανοιχτούν από προγράμματα υπολογιστικών φύλλων όπως το Microsoft Edge ή το OpenOffice Calc. Δεν γίνεται επανεισαγωγή του αρχείου.</string>
<string name="best_streaks">"Καλύτερα σερί"</string> <string name="export_full_backup_summary">Παράγει ένα αρχείο το οποίο περιέχει όλα τα δεδομένα σας. Είναι δυνατή η επανεισαγωγή του αρχείου.</string>
<string name="current_streaks">"Τρέχον σερί"</string> <string name="bug_report_failed">Απέτυχε ή παραγωγή αναφοράς bug.</string>
<string name="number_of_repetitions">"Αριθμός επαναλήψεων"</string> <string name="generate_bug_report">Παραγωγή αναφοράς bug.</string>
<string name="last_x_days">"Τελευταίες %d ημέρες"</string> <string name="troubleshooting">Αντιμετ.Προβλημάτων</string>
<string name="last_x_weeks">"Τελευταίες %d εβδομάδες"</string> <string name="help_translate">Βοηθήστε στην μετάφραση</string>
<string name="last_x_months">"Τελευταίους %d μήνες"</string> <string name="night_mode">Νυχτ.Λειτ.</string>
<string name="last_x_years">"Τελευταία %d χρόνια"</string> <string name="use_pure_black">Χρήση απόλυτου μαύρου στη νυχτ.λειτουργία</string>
<string name="pure_black_description">Αντικαθιστά τα γκρί υπόβαθρα με απόλυτα μαύρα σε νυχτ.λειτουργία. Μειώνει την κατανάλωση μπαταρίας σε συσκευές με οθόνη AMOLED.</string>
<!-- "All time" number of repetitions. Or number of repetitions "since the beginning". --> <string name="interface_preferences">Διεπιφάνεια</string>
<string name="all_time">"Όλα"</string> <string name="reverse_days">Αναστροφή σειράς των ημερών.</string>
<string name="every_day">"Κάθε μέρα"</string> <string name="reverse_days_description">Προβολή των ημερών σε αντίστροφη σειρά στην κυρία οθόνη.</string>
<string name="every_week">"Κάθε εβδομάδα"</string> <string name="day">Ημέρα</string>
<string name="two_times_per_week">"2 φορές την εβδομάδα"</string> <string name="week">Εβδομάδα</string>
<string name="five_times_per_week">"5 φορές την εβδομάδα"</string> <string name="month">Μήνας</string>
<string name="custom_frequency">"Προσαρμογή"</string> <string name="quarter">Τρίμηνο</string>
<string name="help">"Βοήθεια &amp; FAQ"</string> <string name="year">Χρόνος</string>
<string name="could_not_export">"Αποτυχία εξαγωγής."</string>
<string name="could_not_import">"Αποτυχία εισαγωγής."</string>
<!-- Appears when the user tries to import a file which we do not support or recognize. -->
<string name="file_not_recognized">"Άγνωστο αρχείο."</string>
<string name="habits_imported">"Οι συνήθειες εισάχθηκαν επιτυχώς."</string>
<string name="full_backup_success">"Το πλήρες αντίγραφο εξάχθηκε επιτυχώς."</string>
<string name="import_data">"Εισαγωγή δεδομένων"</string>
<string name="export_full_backup">"Εξαγωγή πλήρους αντιγ. ασφαλείας"</string>
<string name="import_data_summary">"Υποστηρίζει πλήρως αντίγραφα ασφαλείας που έχουν εξαχθεί από την ίδια την εφαρμογή καθώς και από τα Tickmate, HabitBull και Rewire. Δείτε τις FAQ για περισσότερες πληροφορίες."</string>
<string name="export_as_csv_summary">"Παράγει αρχεία τα οποία μπορούν να ανοιχτούν από προγράμματα υπολογιστικών φύλλων όπως το Microsoft Edge ή το OpenOffice Calc. Δεν γίνεται επανεισαγωγή του αρχείου."</string>
<string name="export_full_backup_summary">"Παράγει ένα αρχείο το οποίο περιέχει όλα τα δεδομένα σας. Είναι δυνατή η επανεισαγωγή του αρχείου."</string>
<string name="bug_report_failed">"Απέτυχε ή παραγωγή αναφοράς bug."</string>
<string name="generate_bug_report">"Παραγωγή αναφοράς bug."</string>
<string name="troubleshooting">"Αντιμετ.Προβλημάτων"</string>
<string name="help_translate">"Βοηθήστε στην μετάφραση"</string>
<string name="night_mode">"Νυχτ.Λειτ."</string>
<string name="use_pure_black">"Χρήση απόλυτου μαύρου στη νυχτ.λειτουργία"</string>
<string name="pure_black_description">"Αντικαθιστά τα γκρί υπόβαθρα με απόλυτα μαύρα σε νυχτ.λειτουργία. Μειώνει την κατανάλωση μπαταρίας σε συσκευές με οθόνη AMOLED."</string>
<string name="interface_preferences">"Διεπιφάνεια"</string>
<string name="reverse_days">"Αναστροφή σειράς των ημερών."</string>
<string name="reverse_days_description">"Προβολή των ημερών σε αντίστροφη σειρά στην κυρία οθόνη."</string>
<string name="day">"Ημέρα"</string>
<string name="week">"Εβδομάδα"</string>
<string name="month">"Μήνας"</string>
<!-- Three-month period -->
<string name="quarter">"Τρίμηνο"</string>
<string name="year">"Χρόνος"</string>
<!-- Middle part of the sentence '1 time in xx days' --> <!-- Middle part of the sentence '1 time in xx days' -->
<!-- Middle part of the sentence '1 time in xx days' --> <string name="time_every">φορά σε</string>
<string name="time_every">"φορά σε"</string> <string name="every_x_days">Κάθε %d ημέρες</string>
<string name="every_x_days">"Κάθε %d ημέρες"</string> <string name="every_x_weeks">Κάθε %d εβδομάδες</string>
<string name="every_x_weeks">"Κάθε %d εβδομάδες"</string> <string name="every_x_months">Κάθε %d μήνες</string>
<string name="every_x_months">"Κάθε %d μήνες"</string> <string name="score">Σκόρ</string>
<string name="reminder_sound">Ήχος υπενθύμισης</string>
<!-- The old "habit strength" has been replaced by "score". Feel free to translate "score" as "strength" or "stability" if it sounds more natural in your language. --> <string name="none">Σιωπηλό</string>
<string name="score">"Σκόρ"</string>
<string name="reminder_sound">"Ήχος υπενθύμισης"</string>
<!-- Appears when the user disables the reminder sound. Could also be "no sound", "mute" or "silent". -->
<string name="none">"Σιωπηλό"</string>
</resources> </resources>

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
~
~ This file is part of Loop Habit Tracker.
~
~ Loop Habit Tracker is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by the
~ Free Software Foundation, either version 3 of the License, or (at your
~ option) any later version.
~
~ Loop Habit Tracker is distributed in the hope that it will be useful, but
~ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
~ more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources>
<!-- App introduction -->
<!-- Middle part of the sentence '1 time in xx days' -->
</resources>

@ -1,198 +1,156 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
~
~ This file is part of Loop Habit Tracker.
~
~ Loop Habit Tracker is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by the
~ Free Software Foundation, either version 3 of the License, or (at your
~ option) any later version.
~
~ Loop Habit Tracker is distributed in the hope that it will be useful, but
~ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
~ more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources> <resources>
<string name="app_name">"Loop Analizador de Hábitos"</string> <string name="app_name">Loop Analizador de Hábitos</string>
<string name="main_activity_title">"Hábitos"</string> <string name="main_activity_title">Hábitos</string>
<string name="action_settings">"Configuración"</string> <string name="action_settings">Configuración</string>
<string name="edit">"Editar"</string> <string name="edit">Editar</string>
<string name="delete">"Eliminar"</string> <string name="delete">Eliminar</string>
<string name="archive">"Archivar"</string> <string name="archive">Archivar</string>
<string name="unarchive">"Desarchivar"</string> <string name="unarchive">Desarchivar</string>
<string name="add_habit">"Agregar hábito"</string> <string name="add_habit">Agregar hábito</string>
<string name="color_picker_default_title">"Cambiar color"</string> <string name="color_picker_default_title">Cambiar color</string>
<string name="toast_habit_created">"Hábito creado."</string> <string name="toast_habit_created">Hábito creado.</string>
<string name="toast_habit_deleted">"Hábitos eliminados."</string> <string name="toast_habit_deleted">Hábitos eliminados.</string>
<string name="toast_habit_restored">"Hábitos restaurados."</string> <string name="toast_habit_restored">Hábitos restaurados.</string>
<string name="toast_nothing_to_undo">"Nada que deshacer."</string> <string name="toast_nothing_to_undo">Nada que deshacer.</string>
<string name="toast_nothing_to_redo">"Nada que rehacer."</string> <string name="toast_nothing_to_redo">Nada que rehacer.</string>
<string name="toast_habit_changed">"Hábito cambiado."</string> <string name="toast_habit_changed">Hábito cambiado.</string>
<string name="toast_habit_changed_back">Hábito cambiado devuelta.</string>
<!-- This appears when the user edits a habit, and then undoes the action. The habit is "changed back" to what is was before. Alternatively, "Habit restored". --> <string name="toast_habit_archived">Hábitos archivados.</string>
<string name="toast_habit_changed_back">"Hábito cambiado devuelta."</string> <string name="toast_habit_unarchived">Hábitos desarchivados.</string>
<string name="toast_habit_archived">"Hábitos archivados."</string> <string name="overview">Visión general</string>
<string name="toast_habit_unarchived">"Hábitos desarchivados."</string> <string name="habit_strength">Fuerza del hábito</string>
<string name="overview">"Visión general"</string> <string name="history">Historial</string>
<string name="habit_strength">"Fuerza del hábito"</string> <string name="clear">Borrar</string>
<string name="history">"Historial"</string> <string name="description_hint">Pregunta (Has ... hoy?)</string>
<string name="clear">"Borrar"</string> <string name="repeat">Repetir</string>
<string name="description_hint">"Pregunta (Has ... hoy?)"</string> <string name="times_every">veces cada</string>
<string name="days">días</string>
<!-- This and the next two terms form the sentence "Repeat 3 times in 7 days" that you see when you create a habit. Let me know if you have trouble adapting this into your language. --> <string name="reminder">Recordatorio</string>
<string name="repeat">"Repetir"</string> <string name="discard">Descartar</string>
<string name="times_every">"veces cada"</string> <string name="save">Guardar</string>
<string name="days">"días"</string> <string name="streaks">Rachas</string>
<string name="reminder">"Recordatorio"</string> <string name="no_habits_found">No tienes hábitos activos</string>
<string name="discard">"Descartar"</string> <string name="long_press_to_toggle">Mantener apretado para marcar o desmarcar</string>
<string name="save">"Guardar"</string> <string name="reminder_off">Apagado</string>
<string name="validation_name_should_not_be_blank">Nombre no puede estar en blanco.</string>
<!-- Streak as in "winning streak". That is, the number of times a user has performed a habit consecutively. Similar terms are "chains" or "series". --> <string name="validation_number_should_be_positive">Número debe ser positivo.</string>
<string name="streaks">"Rachas"</string> <string name="validation_at_most_one_rep_per_day">Puedes tener como máximo una repetición por día</string>
<string name="no_habits_found">"No tienes hábitos activos"</string> <string name="create_habit">Crear hábito</string>
<string name="long_press_to_toggle">"Mantener apretado para marcar o desmarcar"</string> <string name="edit_habit">Editar hábito</string>
<string name="reminder_off">"Apagado"</string> <string name="check">Marcar</string>
<string name="validation_name_should_not_be_blank">"Nombre no puede estar en blanco."</string> <string name="snooze">Aplazar</string>
<string name="validation_number_should_be_positive">"Número debe ser positivo."</string>
<string name="validation_at_most_one_rep_per_day">"Puedes tener como máximo una repetición por día"</string>
<string name="create_habit">"Crear hábito"</string>
<string name="edit_habit">"Editar hábito"</string>
<string name="check">"Marcar"</string>
<string name="snooze">"Aplazar"</string>
<!-- App introduction --> <!-- App introduction -->
<string name="intro_title_1">"Bienvenido"</string> <string name="intro_title_1">Bienvenido</string>
<string name="intro_description_1">"Loop Analizador de Hábitos te ayuda a crear y mantener buenos hábitos."</string> <string name="intro_description_1">Loop Analizador de Hábitos te ayuda a crear y mantener buenos hábitos.</string>
<string name="intro_title_2">"Crea algunos hábitos nuevos"</string> <string name="intro_title_2">Crea algunos hábitos nuevos</string>
<string name="intro_description_2">"Cada día, después de realizar tu hábito, pon una marca en la app."</string> <string name="intro_description_2">Cada día, después de realizar tu hábito, pon una marca en la app.</string>
<string name="intro_title_3">"Sigue haciéndolo."</string> <string name="intro_title_3">Sigue haciéndolo.</string>
<string name="intro_description_3">"Los hábitos realizados consistentemente por un largo tiempo ganarán una estrella completa."</string> <string name="intro_description_3">Los hábitos realizados consistentemente por un largo tiempo ganarán una estrella completa.</string>
<string name="intro_title_4">"Haz un seguimiento de tu progreso"</string> <string name="intro_title_4">Haz un seguimiento de tu progreso</string>
<string name="intro_description_4">"Detallados gráficos muestran como han mejorado tus hábitos con el tiempo."</string> <string name="intro_description_4">Detallados gráficos muestran como han mejorado tus hábitos con el tiempo.</string>
<string name="interval_15_minutes">"15 minutos"</string> <string name="interval_15_minutes">15 minutos</string>
<string name="interval_30_minutes">"30 minutos"</string> <string name="interval_30_minutes">30 minutos</string>
<string name="interval_1_hour">"1 hora"</string> <string name="interval_1_hour">1 hora</string>
<string name="interval_2_hour">"2 horas"</string> <string name="interval_2_hour">2 horas</string>
<string name="interval_4_hour">"4 horas"</string> <string name="interval_4_hour">4 horas</string>
<string name="interval_8_hour">"8 horas"</string> <string name="interval_8_hour">8 horas</string>
<string name="pref_toggle_title">"Marca las repeticiones con una corta pulsación."</string> <string name="pref_toggle_title">Marca las repeticiones con una corta pulsación.</string>
<string name="pref_toggle_description">"Más cómodo, pero puede causar marcas accidentales."</string> <string name="pref_toggle_description">Más cómodo, pero puede causar marcas accidentales.</string>
<string name="pref_snooze_interval_title">"Tiempo de espera al aplazar recordatorios."</string> <string name="pref_snooze_interval_title">Tiempo de espera al aplazar recordatorios.</string>
<string name="pref_rate_this_app">"Valora esta app en Google Play"</string> <string name="pref_rate_this_app">Valora esta app en Google Play</string>
<string name="pref_send_feedback">"Enviar sugerencias al desarrollador"</string> <string name="pref_send_feedback">Enviar sugerencias al desarrollador</string>
<string name="pref_view_source_code">"Ver código fuente en GitHub"</string> <string name="pref_view_source_code">Ver código fuente en GitHub</string>
<string name="pref_view_app_introduction">"Ver la introducción de la app"</string> <string name="pref_view_app_introduction">Ver la introducción de la app</string>
<string name="links">"Enlaces"</string> <string name="links">Enlaces</string>
<string name="behavior">"Comportamiento"</string> <string name="behavior">Comportamiento</string>
<string name="name">"Nombre"</string> <string name="name">Nombre</string>
<string name="show_archived">"Ver archivados"</string> <string name="settings">Configuración</string>
<string name="settings">"Configuración"</string> <string name="snooze_interval">Intervalo de espera</string>
<string name="snooze_interval">"Intervalo de espera"</string> <string name="hint_title">¿Sabías qué?</string>
<string name="hint_title">"¿Sabías qué?"</string> <string name="hint_drag">Para reordenar las entradas, mantén la pulsación sobre el nombre del hábito, después arrástralo a su posición correcta.</string>
<string name="hint_drag">"Para reordenar las entradas, mantén la pulsación sobre el nombre del hábito, después arrástralo a su posición correcta."</string> <string name="hint_landscape">Puedes ver más días al poner tu teléfono en modo horizontal.</string>
<string name="hint_landscape">"Puedes ver más días al poner tu teléfono en modo horizontal."</string> <string name="delete_habits">Eliminar Hábitos</string>
<string name="delete_habits">"Eliminar Hábitos"</string> <string name="delete_habits_message">Los hábitos serán eliminados permanentemente. Esta acción no se puede deshacer.</string>
<string name="delete_habits_message">"Los hábitos serán eliminados permanentemente. Esta acción no se puede deshacer."</string> <string name="weekends">Fines de semana</string>
<string name="weekends">"Fines de semana"</string> <string name="any_weekday">Días laborables</string>
<string name="any_day">Cada día</string>
<!-- Fuzzy --> <string name="select_weekdays">Seleccionar días</string>
<string name="any_weekday">"Días laborables"</string> <string name="export_to_csv">Exportar datos (CSV)</string>
<string name="done_label">Hecho</string>
<!-- Fuzzy --> <string name="clear_label">Quitar</string>
<string name="any_day">"Cada día"</string> <string name="select_hours">Seleccionar horas</string>
<string name="select_weekdays">"Seleccionar días"</string> <string name="select_minutes">Seleccionar</string>
<string name="about">Acerca de</string>
<!-- Fuzzy --> <string name="translators">Traductores</string>
<string name="export_to_csv">"Exportar datos (CSV)"</string> <string name="developers">Desarrolladores</string>
<string name="done_label">"Hecho"</string> <string name="version_n">Versión %s</string>
<string name="clear_label">"Quitar"</string> <string name="frequency">Frecuencia</string>
<string name="select_hours">"Seleccionar horas"</string> <string name="strength">Fuerza</string>
<string name="select_minutes">"Seleccionar"</string> <string name="best_streaks">Mejores rachas</string>
<string name="current_streaks">Racha actual</string>
<!-- Short description used on the Google Play store. There is an 80-character limit. --> <string name="number_of_repetitions">Número de repeticiones</string>
<string name="store_short_description">"Crea buenos hábitos y haz un seguimiento de su progreso a lo largo del tiempo (sin anuncios)"</string> <string name="last_x_days">Últimos %d días</string>
<string name="store_description_1">"Loop te ayuda a crear y mantener buenos hábitos, permitiéndote alcanzar tus metas a largo plazo. Detallados gráficos y estadísticas muestran como tus hábitos mejoran con el tiempo. No existe ningún anuncio y es de código abierto."</string> <string name="last_x_weeks">Últimas %d semanas</string>
<string name="store_feature_interface">"&lt;b&gt;Una interfaz simple, bella y moderna&lt;/b&gt; <string name="last_x_months">Últimos %d meses</string>
Loop tiene una interfaz minimalista que es fácil de usar y sigue los principios del material design."</string> <string name="last_x_years">Últimos %d años</string>
<string name="store_feature_score">"&lt;b&gt;Puntuación del hábito&lt;/b&gt; <string name="all_time">Todo el tiempo</string>
Además de mostrar tu racha actual, Loop tiene un algoritmo avanzado para calcular la fuerza de tus hábitos. Cada repetición hace tu hábito más fuerte y cada día fallido lo hace más débil. Sin embargo, unos pocos días después de una larga racha no destruirán completamente todo tu progreso."</string> <string name="every_day">Diariamente</string>
<string name="store_feature_statistics">"&lt;b&gt;Detallados gráficos y estadísticas&lt;/b&gt; <string name="every_week">Semanalmente</string>
Observa claramente como tus hábitos han mejorado con el tiempo con bellos y detallados gráficos. Ve hacia atrás para ver el historial completo del hábito."</string> <string name="two_times_per_week">2 veces por semana</string>
<string name="store_feature_schedules">"&lt;b&gt;Horarios flexibles&lt;/b&gt; <string name="five_times_per_week">5 veces por semana</string>
Soporta hábitos diarios y hábitos con repeticiones más complejas, como 3 veces por semana; una vez cada varias semanas; o cada día."</string> <string name="custom_frequency">Personalizado...</string>
<string name="store_feature_reminders">"&lt;b&gt;Recordatorios&lt;/b&gt; <string name="help">Ayuda &amp; FAQ</string>
Crea recordatorios individuales para cada hábito a una hora determinada del día. Fácilmente marcables, descartables o aplazables directamente desde la notificación, sin abrir la app."</string> <string name="could_not_export">Fallo al exportar datos.</string>
<string name="store_feature_opensource">"&lt;b&gt;Completamente sin anuncios y de código abierto&lt;/b&gt; <string name="could_not_import">Fallo al importar datos.</string>
No existe ningún tipo de publicidad, notificaciones molestas o permisos intrusivos, y nunca los habrá. Todo el código está disponible bajo GPLv3."</string> <string name="file_not_recognized">Archivo no reconocido.</string>
<string name="store_feature_wear">"&lt;b&gt;Optimizado para smartwatches&lt;/b&gt; <string name="habits_imported">Hábitos importados exitosamente.</string>
Los recordatorios se pueden marcar, aplazar o descartar directamente desde tu reloj Android Wear."</string> <string name="full_backup_success">Copia de seguridad exportada exitosamente.</string>
<string name="about">"Acerca de"</string> <string name="import_data">Importar datos</string>
<string name="translators">"Traductores"</string> <string name="export_full_backup">Exportar copia de seguridad</string>
<string name="developers">"Desarrolladores"</string> <string name="import_data_summary">Soporta exportar copias de seguridad completas, así como archivos generados por Tickmate, HabitBull o Rewire. Mira el FAQ para más información.</string>
<string name="export_as_csv_summary">Genera archivos que pueden ser abiertos por programas de hojas de cálculo como Microsoft Excel o OpenOffice Calc. Este archivo no puede volver a importarse.</string>
<!-- %s will get replaced by the version number. For example, "Versão %d" will become "Versão 1.2.0". --> <string name="export_full_backup_summary">Genera un archivo que contiene todos tus datos. Este archivo puede volver a importarse.</string>
<string name="version_n">"Versión %s"</string> <string name="bug_report_failed">Fallo al generar el informe del bug.</string>
<string name="frequency">"Frecuencia"</string> <string name="generate_bug_report">Generar informe de bug</string>
<string name="checkmark">"Checkmark"</string> <string name="troubleshooting">Solución de problemas</string>
<string name="help_translate">Ayuda a traducir esta app</string>
<!-- This is a shorter version of "Habit Strength" --> <string name="night_mode">Modo nocturno</string>
<string name="strength">"Fuerza"</string> <string name="use_pure_black">Utilizar color negro en modo nocturno</string>
<string name="pure_black_description">Reemplaza fondos grises por color negro en modo nocturno. Reduce el consumo de batería en teléfonos con pantalla AMOLED.</string>
<!-- Fuzzy --> <string name="interface_preferences">Interfície</string>
<string name="best_streaks">"Mejores rachas"</string> <string name="reverse_days">Orden inverso de días</string>
<string name="current_streaks">"Racha actual"</string> <string name="reverse_days_description">Mostrar días en orden inverso en la pantalla principal</string>
<string name="number_of_repetitions">"Número de repeticiones"</string> <string name="day">Día</string>
<string name="last_x_days">"Últimos %d días"</string> <string name="week">Semana</string>
<string name="last_x_weeks">"Últimas %d semanas"</string> <string name="month">Mes</string>
<string name="last_x_months">"Últimos %d meses"</string> <string name="quarter">Cuatrimestre</string>
<string name="last_x_years">"Últimos %d años"</string> <string name="year">Año</string>
<!-- "All time" number of repetitions. Or number of repetitions "since the beginning". -->
<string name="all_time">"Todo el tiempo"</string>
<!-- Fuzzy -->
<string name="every_day">"Diariamente"</string>
<!-- Fuzzy -->
<string name="every_week">"Semanalmente"</string>
<!-- Fuzzy -->
<string name="two_times_per_week">"2 veces por semana"</string>
<!-- Fuzzy -->
<string name="five_times_per_week">"5 veces por semana"</string>
<!-- Fuzzy -->
<string name="custom_frequency">"Personalizado..."</string>
<string name="help">"Ayuda &amp; FAQ"</string>
<string name="could_not_export">"Fallo al exportar datos."</string>
<string name="could_not_import">"Fallo al importar datos."</string>
<!-- Appears when the user tries to import a file which we do not support or recognize. -->
<string name="file_not_recognized">"Archivo no reconocido."</string>
<string name="habits_imported">"Hábitos importados exitosamente."</string>
<string name="full_backup_success">"Copia de seguridad exportada exitosamente."</string>
<string name="import_data">"Importar datos"</string>
<string name="export_full_backup">"Exportar copia de seguridad"</string>
<string name="import_data_summary">"Soporta exportar copias de seguridad completas, así como archivos generados por Tickmate, HabitBull o Rewire. Mira el FAQ para más información."</string>
<string name="export_as_csv_summary">"Genera archivos que pueden ser abiertos por programas de hojas de cálculo como Microsoft Excel o OpenOffice Calc. Este archivo no puede volver a importarse."</string>
<string name="export_full_backup_summary">"Genera un archivo que contiene todos tus datos. Este archivo puede volver a importarse."</string>
<string name="bug_report_failed">"Fallo al generar el informe del bug."</string>
<string name="generate_bug_report">"Generar informe de bug"</string>
<string name="troubleshooting">"Solución de problemas"</string>
<string name="help_translate">"Ayuda a traducir esta app"</string>
<string name="night_mode">"Modo nocturno"</string>
<string name="use_pure_black">"Utilizar color negro en modo nocturno"</string>
<string name="pure_black_description">"Reemplaza fondos grises por color negro en modo nocturno. Reduce el consumo de batería en teléfonos con pantalla AMOLED."</string>
<string name="interface_preferences">"Interfície"</string>
<string name="reverse_days">"Orden inverso de días"</string>
<string name="reverse_days_description">"Mostrar días en orden inverso en la pantalla principal"</string>
<string name="day">"Día"</string>
<string name="week">"Semana"</string>
<string name="month">"Mes"</string>
<!-- Three-month period -->
<string name="quarter">"Cuatrimestre"</string>
<string name="year">"Año"</string>
<!-- Middle part of the sentence '1 time in xx days' --> <!-- Middle part of the sentence '1 time in xx days' -->
<!-- Middle part of the sentence '1 time in xx days' --> <string name="time_every">veces en</string>
<string name="time_every">"veces en"</string> <string name="every_x_days">Cada %d días</string>
<string name="every_x_days">"Cada %d días"</string> <string name="every_x_weeks">Cada %d semanas</string>
<string name="every_x_weeks">"Cada %d semanas"</string> <string name="every_x_months">Cada %d meses</string>
<string name="every_x_months">"Cada %d meses"</string> <string name="score">Puntuación</string>
<string name="reminder_sound">Sonido de recordatorio</string>
<!-- The old "habit strength" has been replaced by "score". Feel free to translate "score" as "strength" or "stability" if it sounds more natural in your language. --> <string name="none">Ninguno</string>
<string name="score">"Puntuación"</string>
<string name="reminder_sound">"Sonido de recordatorio"</string>
<!-- Appears when the user disables the reminder sound. Could also be "no sound", "mute" or "silent". -->
<string name="none">"Ninguno"</string>
</resources> </resources>

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
~
~ This file is part of Loop Habit Tracker.
~
~ Loop Habit Tracker is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by the
~ Free Software Foundation, either version 3 of the License, or (at your
~ option) any later version.
~
~ Loop Habit Tracker is distributed in the hope that it will be useful, but
~ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
~ more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources>
<string name="main_activity_title">Ohiturak</string>
<string name="action_settings">Ezarpenak</string>
<string name="edit">Editatu</string>
<string name="delete">Ezabatu</string>
<string name="archive">Artxibatu</string>
<string name="unarchive">Ezartxibatu</string>
<string name="add_habit">Ohitura gehitu</string>
<string name="color_picker_default_title">Kolorea aldatu</string>
<string name="toast_habit_created">Ohitura sortu da.</string>
<string name="toast_habit_deleted">Ohiturak ezabatu dira.</string>
<string name="toast_habit_restored">Ohiturak berrezarri dira.</string>
<string name="toast_nothing_to_undo">Ez dago desegiteko ezer.</string>
<string name="toast_nothing_to_redo">Ez dago berregiteko ezer.</string>
<string name="toast_habit_changed">Ohitura aldatu da.</string>
<string name="toast_habit_changed_back">Ohitura lehengoratu da.</string>
<string name="toast_habit_archived">Ohiturak artxibatu dira.</string>
<string name="toast_habit_unarchived">Ohiturak ezartxibatu dira.</string>
<string name="overview">Ikuspegi orokorra</string>
<string name="history">Historia</string>
<string name="clear">Garbitu</string>
<string name="description_hint">Galdera (... al duzu gaur?)</string>
<string name="repeat">Errepikatu</string>
<string name="times_every">aldiz</string>
<string name="days">egunetan</string>
<string name="reminder">Oroigarria</string>
<string name="discard">Baztertu</string>
<string name="save">Gorde</string>
<string name="no_habits_found">Ez duzu ohitura aktiborik</string>
<string name="long_press_to_toggle">Sakatu eta mantendu markatu edo desmarkatzeko</string>
<string name="reminder_off">Itzalita</string>
<string name="validation_name_should_not_be_blank">Izena ezin da hutsik egon.</string>
<string name="validation_number_should_be_positive">Zenbakia positiboa izan behar da.</string>
<string name="validation_at_most_one_rep_per_day">Gehienez errepikapen bat eguneko izan dezakezu</string>
<string name="create_habit">Ohitura sortu</string>
<string name="edit_habit">Ohitura editatu</string>
<string name="snooze">Beranduago</string>
<!-- App introduction -->
<string name="intro_title_1">Ongi etorri</string>
<string name="intro_title_2">Sor itzazu ohitura berri batzuk</string>
<string name="intro_description_2">Egunero, zure ohitura egin ostean, jarri ezazu egiaztatze marka bat aplikazioan.</string>
<string name="intro_title_3">Jarrai ezazu ohitura egiten</string>
<string name="intro_title_4">Jarrai ezazu zure aurrerapena</string>
<string name="intro_description_4">Grafiko zehatzen bitartez denboran zehar zure ohiturak nola hobetu diren ikus ditzakezu</string>
<string name="interval_15_minutes">15 minutu</string>
<string name="interval_30_minutes">30 minutu</string>
<string name="interval_1_hour">Ordu 1</string>
<string name="interval_2_hour">2 ordu</string>
<string name="interval_4_hour">4 ordu</string>
<string name="interval_8_hour">8 ordu</string>
<string name="pref_rate_this_app">Aplikazio hau Google Playen puntuatu</string>
<string name="pref_send_feedback">Zure iritzia garatzaileari bidali</string>
<string name="pref_view_source_code">Iturburu kodea GitHuben ikusi</string>
<string name="pref_view_app_introduction">Aplikazioaren aurkezpena ikusi</string>
<string name="links">Loturak</string>
<string name="behavior">Portaera</string>
<string name="name">Izena</string>
<string name="settings">Ezarpenak</string>
<string name="hint_title">Ba al zenekien?</string>
<string name="hint_drag">Sarrerak berrantolatzeko, sakatu eta mantendu ohituraren izena, ondoren mugi ezazu leku aproposera.</string>
<string name="hint_landscape">Egun gehiago ikus ditzakezu zure gailua paisai moduan jarriz.</string>
<string name="delete_habits">Ohiturak ezabatu</string>
<string name="delete_habits_message">Ohiturak betirako ezabatuko dira. Ekintza hau ezin da desegin.</string>
<string name="weekends">Asteburuak</string>
<string name="any_weekday">Astelehenetik ostiralera</string>
<string name="any_day">Astearen edozen egun</string>
<string name="select_weekdays">Egunak hautatu</string>
<string name="export_to_csv">CSV bezala esportatu</string>
<string name="done_label">Eginda</string>
<string name="clear_label">Garbitu</string>
<string name="select_hours">Orduak hautatu</string>
<string name="select_minutes">Minutuak hautatu</string>
<string name="about">Honi buruz</string>
<string name="translators">Itzultzaileak</string>
<string name="developers">Garatzaileak</string>
<string name="version_n">%s bertsioa</string>
<string name="frequency">Maiztasuna</string>
<string name="checkmark">Egiaztatze marka</string>
<string name="number_of_repetitions">Errepikapenen kopurua</string>
<string name="last_x_days">Azken %d egunak</string>
<string name="last_x_weeks">Azken %d asteak</string>
<string name="last_x_months">Azken %d hilabeteak</string>
<string name="last_x_years">Azken %d urteak</string>
<string name="all_time">Hasieratik</string>
<string name="every_day">Egunero</string>
<string name="every_week">Astero</string>
<string name="two_times_per_week">Astean 2 aldiz</string>
<string name="five_times_per_week">Astean 5 aldiz</string>
<string name="custom_frequency">Pertsonalizatua ...</string>
<string name="help">Laguntza eta ohiko galderak</string>
<string name="could_not_export">Huts datuak esportatzerakoan.</string>
<string name="could_not_import">Huts datuak inportatzerakoan.</string>
<string name="file_not_recognized">Fitxategi ezezaguna.</string>
<string name="habits_imported">Ohiturak ondo inportatu dira.</string>
<string name="full_backup_success">Babes kopia osoa ondo esportatu da.</string>
<string name="import_data">Datuak inportatu</string>
<string name="export_full_backup">Babes kopia osoa esportatu</string>
<string name="bug_report_failed">Huts akats txostena sortzerakoan.</string>
<string name="generate_bug_report">Akats txostena sortu</string>
<string name="help_translate">Lagundu aplikazio hau itzultzen</string>
<string name="night_mode">Gau modua</string>
<string name="use_pure_black">Benetazko beltza erabili gau moduan</string>
<string name="interface_preferences">Interfazea</string>
<string name="day">Eguna</string>
<string name="week">Astea</string>
<string name="month">Hilabetea</string>
<string name="quarter">Hiruhilekoa</string>
<string name="year">Urtea</string>
<!-- Middle part of the sentence '1 time in xx days' -->
<string name="reminder_sound">Oroigarriaren soinua</string>
<string name="none">Bat ere ez</string>
</resources>

@ -0,0 +1,131 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
~
~ This file is part of Loop Habit Tracker.
~
~ Loop Habit Tracker is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by the
~ Free Software Foundation, either version 3 of the License, or (at your
~ option) any later version.
~
~ Loop Habit Tracker is distributed in the hope that it will be useful, but
~ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
~ more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources>
<string name="app_name">عادت‌سنج</string>
<string name="main_activity_title">عادت‌ها</string>
<string name="action_settings">تنظیمات</string>
<string name="edit">ویرایش</string>
<string name="delete">حذف</string>
<string name="archive">آرشیو کردن</string>
<string name="unarchive">خارج کردن از آرشیو</string>
<string name="add_habit">افزودن عادت</string>
<string name="color_picker_default_title">تغییر رنگ</string>
<string name="toast_habit_created">عادت ساخته شد.</string>
<string name="toast_habit_deleted">عادت حذف شد.</string>
<string name="toast_habit_restored">عادت بازگردانده شد.</string>
<string name="toast_nothing_to_undo">چیزی برای واکردن وجود ندارد.</string>
<string name="toast_nothing_to_redo">چیزی برای برگشت وجود ندارد.</string>
<string name="toast_habit_changed">عادت تغییر کرد.</string>
<string name="toast_habit_changed_back">عادت به حالت قبل برگشت.</string>
<string name="toast_habit_archived">عادت آرشیو شد.</string>
<string name="toast_habit_unarchived">عادت از آرشیو خارج شد.</string>
<string name="overview">مرور</string>
<string name="habit_strength">قوت عادت</string>
<string name="history">تاریخچه</string>
<string name="clear">حذف</string>
<string name="description_hint">سوال (آیا امروز شما&#8230;؟)</string>
<string name="repeat">تکرار</string>
<string name="times_every">بار در هر</string>
<string name="days">روزها</string>
<string name="reminder">یادآور</string>
<string name="discard">حذف تغییرات</string>
<string name="save">ذخیره</string>
<string name="streaks">روزهای پیوسته</string>
<string name="no_habits_found">شما هیچ عادت فعالی ندارید</string>
<string name="long_press_to_toggle">برای تیک زدن یا برداشتن، ضربه بزنید و نگه دارید</string>
<string name="reminder_off">خاموش</string>
<string name="validation_name_should_not_be_blank">جای اسم نمی‌تواند خالی باشد.</string>
<string name="validation_number_should_be_positive">عدد بایستی مثبت باشد.</string>
<string name="validation_at_most_one_rep_per_day">شما در نهایت می‌توانید یک تکرار در یک روز داشته باشید.</string>
<string name="create_habit">ساخت عادت</string>
<string name="edit_habit">ویرایش عادت</string>
<string name="check">تیک زدن</string>
<string name="snooze">بعدا</string>
<!-- App introduction -->
<string name="intro_title_1">خوش آمدید</string>
<string name="intro_description_1">رهگیر عادت به شما کمک می‌کند تا برای خودتان عادت‌های خوبی بسازید.</string>
<string name="intro_title_2">ساخت چند عادت جدید</string>
<string name="intro_description_2">هر روز، بعد از اینکه کار مربوط به عادت را انجام دادید، تیک مربوط به آن در برنامه را بزنید.</string>
<string name="intro_title_3">ادامه دهید</string>
<string name="intro_description_3">عادت‌هایی که به صورت پیوسته برای مدت طولانی انجام شده‌اند یک ستاره‌ی کامل دریافت می‌کنند.</string>
<string name="intro_title_4">پشرفت خود را رهگیری کنید</string>
<string name="intro_description_4">نمودار جزئیات به شما نشان می‌دهد که چطور عادت‌هایتان با گذشت زمان بهبود پیدا کرده‌اند.</string>
<string name="interval_15_minutes">۱۵ دقیقه</string>
<string name="interval_30_minutes">۳۰ دقیقه</string>
<string name="interval_1_hour">۱ ساعت</string>
<string name="interval_2_hour">۲ ساعت</string>
<string name="interval_4_hour">۴ ساعت</string>
<string name="interval_8_hour">۸ ساعت</string>
<string name="pref_toggle_title">با اشاره‌ی کوتاه‌مدت وضعیت عادت را تغییر بده</string>
<string name="pref_toggle_description">راحت‌تر است ولی ممکن است باعث شود اشتباهی عادتی را تیک بزنید.</string>
<string name="pref_rate_this_app">دادن امتیاز به اپ در گوگل‌پلی</string>
<string name="pref_send_feedback">ارسال بازخورد به توسعه‌دهنده</string>
<string name="pref_view_source_code">دیدن سورس اپ در گیت‌هاب</string>
<string name="pref_view_app_introduction">دیدن معرفی اپ</string>
<string name="links">لینک‌ها</string>
<string name="behavior">رفتار</string>
<string name="name">نام</string>
<string name="settings">تنظیمات</string>
<string name="hint_title">آیا می‌دانید؟</string>
<string name="delete_habits">حذف عادت‌ها</string>
<string name="weekends">آخر هفته‌ها</string>
<string name="any_weekday">دوشنبه تا جمعه</string>
<string name="any_day">هر روز از هفته</string>
<string name="select_weekdays">انتخاب روزها</string>
<string name="export_to_csv">دخیره به عنوان فایل CSV</string>
<string name="done_label">انجام شده</string>
<string name="clear_label">حذف</string>
<string name="select_hours">انتخاب ساعت‌ها</string>
<string name="about">درباره</string>
<string name="translators">مترجمین</string>
<string name="developers">توسعه‌دهندگان</string>
<string name="version_n">نسخه %s</string>
<string name="strength">قدرت</string>
<string name="best_streaks">بهترین استمرار</string>
<string name="current_streaks">استمرار فعلی</string>
<string name="number_of_repetitions">تعداد تکرارها</string>
<string name="last_x_days">%d روز اخیر</string>
<string name="last_x_weeks">%d هفته اخیر</string>
<string name="last_x_months">%d ماه اخیر</string>
<string name="last_x_years">%d سال اخیر</string>
<string name="every_day">هر روز</string>
<string name="every_week">هر هفته</string>
<string name="two_times_per_week">۲ بار در هفته</string>
<string name="five_times_per_week">۵ بار در هفته</string>
<string name="custom_frequency">سفارشی‌سازی ...</string>
<string name="help">راهنما و سوالات متداول</string>
<string name="troubleshooting">ایرادیابی</string>
<string name="night_mode">حالت شبانه</string>
<string name="use_pure_black">استفاده از رنگ سیاه خالص در حالت شبانه</string>
<string name="day">روز</string>
<string name="week">هفته</string>
<string name="month">ماه</string>
<string name="quarter">فصل</string>
<string name="year">سال</string>
<!-- Middle part of the sentence '1 time in xx days' -->
<string name="time_every">بار در هر</string>
<string name="every_x_days">هر %d روز یک‌بار</string>
<string name="every_x_weeks">هر %d هفته یک‌بار</string>
<string name="every_x_months">هر %d ماه یک‌بار</string>
<string name="score">امتیاز</string>
<string name="reminder_sound">صدای یادآور</string>
<string name="none">هیچ‌کدام</string>
</resources>

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
~
~ This file is part of Loop Habit Tracker.
~
~ Loop Habit Tracker is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by the
~ Free Software Foundation, either version 3 of the License, or (at your
~ option) any later version.
~
~ Loop Habit Tracker is distributed in the hope that it will be useful, but
~ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
~ more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources>
<!-- App introduction -->
<!-- Middle part of the sentence '1 time in xx days' -->
</resources>

@ -1,203 +1,152 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
~
~ This file is part of Loop Habit Tracker.
~
~ Loop Habit Tracker is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by the
~ Free Software Foundation, either version 3 of the License, or (at your
~ option) any later version.
~
~ Loop Habit Tracker is distributed in the hope that it will be useful, but
~ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
~ more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources> <resources>
<string name="app_name">Loop - Suivi d\'habitudes</string>
<!-- Fuzzy --> <string name="main_activity_title">Habitudes</string>
<string name="app_name">"Loop - Suivi d'habitudes"</string> <string name="action_settings">Paramètres</string>
<string name="edit">Modifier</string>
<!-- Fuzzy --> <string name="delete">Supprimer</string>
<string name="main_activity_title">"Habitudes"</string> <string name="archive">Archiver</string>
<string name="unarchive">Désarchiver</string>
<!-- Fuzzy --> <string name="add_habit">Ajouter une habitude</string>
<string name="action_settings">"Paramètres"</string> <string name="color_picker_default_title">Changer la couleur</string>
<string name="toast_habit_created">Habitude créée.</string>
<!-- Fuzzy --> <string name="toast_habit_deleted">Habitude supprimée.</string>
<string name="edit">"Modifier"</string> <string name="toast_habit_restored">Habitude rétablie.</string>
<string name="delete">"Supprimer"</string> <string name="toast_nothing_to_undo">Rien à annuler.</string>
<string name="archive">"Archiver"</string> <string name="toast_nothing_to_redo">Rien à refaire.</string>
<string name="unarchive">"Désarchiver"</string> <string name="toast_habit_changed">Habitude changée.</string>
<string name="add_habit">"Ajouter une habitude"</string> <string name="toast_habit_changed_back">Habitude restaurée.</string>
<string name="color_picker_default_title">"Changer la couleur"</string> <string name="toast_habit_archived">Habitudes archivées.</string>
<string name="toast_habit_created">"Habitude créée."</string> <string name="toast_habit_unarchived">Habitudes désarchivées.</string>
<string name="toast_habit_deleted">"Habitude supprimée."</string> <string name="overview">Vue d\'ensemble</string>
<string name="toast_habit_restored">"Habitude rétablie."</string> <string name="habit_strength">Force de l\'habitude</string>
<string name="toast_nothing_to_undo">"Rien à annuler."</string> <string name="history">Historique</string>
<string name="toast_nothing_to_redo">"Rien à refaire."</string> <string name="clear">Supprimer</string>
<string name="toast_habit_changed">"Habitude changée."</string> <string name="description_hint">Question (As-tu ... aujourd\'hui?)</string>
<string name="repeat">Répéter</string>
<!-- This appears when the user edits a habit, and then undoes the action. The habit is "changed back" to what is was before. Alternatively, "Habit restored". --> <string name="times_every">fois en</string>
<string name="toast_habit_changed_back">"Habitude restaurée."</string> <string name="days">jours</string>
<string name="toast_habit_archived">"Habitudes archivées."</string> <string name="reminder">Rappel</string>
<string name="toast_habit_unarchived">"Habitudes désarchivées."</string> <string name="discard">Annuler</string>
<string name="overview">"Vue d'ensemble"</string> <string name="save">Sauvegarder</string>
<string name="habit_strength">"Force de l'habitude"</string> <string name="streaks">Séries</string>
<string name="history">"Historique"</string> <string name="no_habits_found">Vous n\'avez pas d\'habitudes actives</string>
<string name="clear">"Supprimer"</string> <string name="long_press_to_toggle">Appuyez longtemps pour cocher ou décocher</string>
<string name="description_hint">"Question (As-tu ... aujourd'hui?)"</string> <string name="validation_name_should_not_be_blank">Le nom ne peut être vide.</string>
<string name="validation_number_should_be_positive">Le nombre doit être positif.</string>
<!-- This and the next two terms form the sentence "Repeat 3 times in 7 days" that you see when you create a habit. Let me know if you have trouble adapting this into your language. --> <string name="validation_at_most_one_rep_per_day">Vous pouvez avoir au plus une répétition par jour</string>
<string name="repeat">"Répéter"</string> <string name="create_habit">Créer une habitude</string>
<string name="times_every">"fois en"</string> <string name="edit_habit">Modifier l\'habitude</string>
<string name="days">"jours"</string> <string name="check">Cocher</string>
<string name="reminder">"Rappel"</string> <string name="snooze">Plus tard</string>
<string name="discard">"Annuler"</string>
<string name="save">"Sauvegarder"</string>
<!-- Streak as in "winning streak". That is, the number of times a user has performed a habit consecutively. Similar terms are "chains" or "series". -->
<string name="streaks">"Séries"</string>
<string name="no_habits_found">"Vous n'avez pas d'habitudes actives"</string>
<string name="long_press_to_toggle">"Appuyez longtemps pour cocher ou décocher"</string>
<string name="reminder_off">"Off"</string>
<string name="validation_name_should_not_be_blank">"Le nom ne peut être vide."</string>
<string name="validation_number_should_be_positive">"Le nombre doit être positif."</string>
<string name="validation_at_most_one_rep_per_day">"Vous pouvez avoir au plus une répétition par jour"</string>
<string name="create_habit">"Créer une habitude"</string>
<string name="edit_habit">"Modifier l'habitude"</string>
<string name="check">"Cocher"</string>
<string name="snooze">"Plus tard"</string>
<!-- App introduction --> <!-- App introduction -->
<string name="intro_title_1">"Bienvenue"</string> <string name="intro_title_1">Bienvenue</string>
<string name="intro_description_1">"Loop - Suivi d'habitudes vous aide à créer et maintenir de bonnes habitudes."</string> <string name="intro_description_1">Loop - Suivi d\'habitudes vous aide à créer et maintenir de bonnes habitudes.</string>
<string name="intro_title_2">"Créez de nouvelles habitudes"</string> <string name="intro_title_2">Créez de nouvelles habitudes</string>
<string name="intro_description_2">"Chaque jour, après avoir réalisé votre habitude, cochez-la sur l'application."</string> <string name="intro_description_2">Chaque jour, après avoir réalisé votre habitude, cochez-la sur l\'application.</string>
<string name="intro_title_3">"Continuez à le faire"</string> <string name="intro_title_3">Continuez à le faire</string>
<string name="intro_description_3">"Les habitudes régulières pendant une période de temps étendue gagneront une étoile complète."</string> <string name="intro_description_3">Les habitudes régulières pendant une période de temps étendue gagneront une étoile complète.</string>
<string name="intro_title_4">"Suivez votre progrès"</string> <string name="intro_title_4">Suivez votre progrès</string>
<string name="intro_description_4">"Des graphiques détaillés vous montrent comment vos habitudes évoluent au fil du temps."</string> <string name="intro_description_4">Des graphiques détaillés vous montrent comment vos habitudes évoluent au fil du temps.</string>
<string name="interval_15_minutes">"15 minutes"</string> <string name="interval_1_hour">1 heure</string>
<string name="interval_30_minutes">"30 minutes"</string> <string name="interval_2_hour">2 heures</string>
<string name="interval_1_hour">"1 heure"</string> <string name="interval_4_hour">4 heures</string>
<string name="interval_2_hour">"2 heures"</string> <string name="interval_8_hour">8 heures</string>
<string name="interval_4_hour">"4 heures"</string> <string name="pref_toggle_title">Activer les répétitions avec un appui court</string>
<string name="interval_8_hour">"8 heures"</string> <string name="pref_toggle_description">Plus pratique, mais peut causer des activations accidentelles.</string>
<string name="pref_toggle_title">"Activer les répétitions avec un appui court"</string> <string name="pref_snooze_interval_title">Intervalle de report des rappels</string>
<string name="pref_toggle_description">"Plus pratique, mais peut causer des activations accidentelles."</string> <string name="pref_rate_this_app">Notez cette app sur le Google Play Store</string>
<string name="pref_send_feedback">Envoyez un avis au développeur</string>
<!-- Je pense qu'en français, on parle plutôt d'intervalle de report/temporisation des répétitions/rappels. --> <string name="pref_view_source_code">Voir le code source sur GitHub</string>
<string name="pref_snooze_interval_title">"Intervalle de report des rappels"</string> <string name="pref_view_app_introduction">Voir l\'intro de l\'app</string>
<string name="pref_rate_this_app">"Notez cette app sur le Google Play Store"</string> <string name="links">Liens</string>
<string name="pref_send_feedback">"Envoyez un avis au développeur"</string> <string name="behavior">Comportement</string>
<string name="pref_view_source_code">"Voir le code source sur GitHub"</string> <string name="name">Nom</string>
<string name="pref_view_app_introduction">"Voir l'intro de l'app"</string> <string name="settings">Paramètres</string>
<string name="links">"Liens"</string> <string name="snooze_interval">Intervalle de report</string>
<string name="behavior">"Comportement"</string> <string name="hint_title">Le saviez-vous ?</string>
<string name="name">"Nom"</string> <string name="hint_drag">Pour réarranger les habitudes, faites un appui long sur le nom de l\'habitude et placez la à la bonne place.</string>
<string name="show_archived">"Montrer les archives"</string> <string name="hint_landscape">Vous pouvez voir plus de jours en mettant votre téléphone en mode paysage.</string>
<string name="settings">"Paramètres"</string> <string name="delete_habits">Supprimer des habitudes</string>
<string name="snooze_interval">"Intervalle de report"</string> <string name="delete_habits_message">Les habitudes seront supprimées définitivement. Cette action ne peut être annulée.</string>
<string name="hint_title">"Le saviez-vous ?"</string> <string name="weekends">Fin de semaine</string>
<string name="hint_drag">"Pour réarranger les habitudes, faites un appui long sur le nom de l'habitude et placez la à la bonne place."</string> <string name="any_weekday">Jours de la semaine</string>
<string name="hint_landscape">"Vous pouvez voir plus de jours en mettant votre téléphone en mode paysage."</string> <string name="any_day">N\'importe quel jour</string>
<string name="delete_habits">"Supprimer des habitudes"</string> <string name="select_weekdays">Sélectionner des jours</string>
<string name="delete_habits_message">"Les habitudes seront supprimées définitivement. Cette action ne peut être annulée."</string> <string name="export_to_csv">Exporter les données dans un fichier CSV</string>
<string name="weekends">"Fin de semaine"</string> <string name="done_label">Fait</string>
<string name="clear_label">Supprimer</string>
<!-- Sorry I made a mistake so I restore the previous version --> <string name="select_hours">Sélectionner les heures</string>
<string name="any_weekday">"Jours de la semaine"</string> <string name="select_minutes">Sélectionner les minutes</string>
<string name="about">À propos</string>
<!-- Fuzzy --> <string name="translators">Traducteurs</string>
<string name="any_day">"N'importe quel jour"</string> <string name="developers">Développeurs</string>
<string name="select_weekdays">"Sélectionner des jours"</string> <string name="frequency">Fréquence</string>
<string name="checkmark">Croix</string>
<!-- Fuzzy --> <string name="strength">Force</string>
<string name="export_to_csv">"Exporter les données dans un fichier CSV"</string> <string name="best_streaks">Meilleures séries</string>
<string name="done_label">"Fait"</string> <string name="current_streaks">Série actuelle</string>
<string name="clear_label">"Supprimer"</string> <string name="number_of_repetitions">Nombre de répétitions</string>
<string name="select_hours">"Sélectionner les heures"</string> <string name="last_x_days">%d derniers jours</string>
<string name="select_minutes">"Sélectionner les minutes"</string> <string name="last_x_weeks">%d dernières semaines</string>
<string name="last_x_months">%d derniers mois</string>
<!-- Short description used on the Google Play store. There is an 80-character limit. --> <string name="last_x_years">%d dernières années</string>
<string name="store_short_description">"Créez de bonnes habitudes et suivez leur progrès au fil du temps (sans pub)"</string> <string name="all_time">Depuis le début</string>
<string name="store_description_1">"Loop vous aide à créer et maintenir de bonnes habitudes, permettant de réussir vos objectifs à long terme. Des graphiques détaillés et des statistiques vous montrent comment vos habitudes saméliorent au fil du temps. C'est totalement sans pub et c'est un logiciel libre."</string> <string name="every_day">Tous les jours</string>
<string name="store_feature_interface">"&lt;b&gt;Simple, beau avec une interface moderne&lt;/b&gt; <string name="every_week">Toutes les semaines</string>
Loop a une interface minimaliste, facile à utiliser et qui suit les règles de material design."</string> <string name="two_times_per_week">2 fois par semaine</string>
<string name="store_feature_score">"&lt;b&gt;Score d'habitude&lt;/b&gt; <string name="five_times_per_week">5 fois par semaine</string>
En plus de montrer votre série en cours, Loop a un algorithme avancé pour calculer la force de vos habitudes. Chacune des répétitions réussi augmente la force de l'habitude et chacune des répétitions ratés la diminue. Cependant, quelques jours ratés après une longue série ne détruiront pas entièrement votre progrès."</string> <string name="custom_frequency">Personnalisée ...</string>
<string name="store_feature_statistics">"&lt;b&gt;Graphiques détaillés et statistiques&lt;/b&gt; <string name="help">Aide &amp; FAQ</string>
Observez clairement comment vos habitudes saméliorent au fil du temps avec de beaux graphiques détaillés. Défilez vers les jours passés pour voir l'historique complet de vos habitudes."</string> <string name="could_not_export">Export des données échoué.</string>
<string name="store_feature_schedules">"&lt;b&gt;Calendrier flexible&lt;/b&gt; <string name="could_not_import">Import des données échoué.</string>
Supporte les habitudes quotidiennes et mensuelle avec des horaires multiples et complexes, comme 3 fois par semaine, une fois toutes les deux semaines ou un jour sur deux."</string> <string name="file_not_recognized">Fichier non reconnu</string>
<string name="store_feature_reminders">"&lt;b&gt;Rappels&lt;/b&gt; <string name="habits_imported">Habitudes importées avec succès</string>
Créez un rappel propre pour chaque habitude, à une heure choisie de la journée. Cochez, supprimez ou reportez facilement votre habitude directement à partir de la notification, sans ouvrir l'application."</string> <string name="full_backup_success">Sauvegarde complète exportée avec succès</string>
<string name="store_feature_opensource">"&lt;b&gt;Entièrement sans pub et sous licence libre&lt;/b&gt; <string name="import_data">Importer des données</string>
Il n'y a absolument aucune publicité ni notification embêtante ni permission intrusive avec cette application, et il n'y en aura jamais. L'ensemble du code source est disponible sous GPLv3."</string> <string name="export_full_backup">Exporter une sauvegarde complète</string>
<string name="store_feature_wear">"&lt;b&gt;Optimisée pour les montres android&lt;/b&gt; <string name="import_data_summary">Supporte les sauvegardes complètes générées par cette application, ainsi que les fichiers Tickmate, HabitBull et Rewire. Voir la FAQ pour plus d\'informations.</string>
Les rappels peuvent être cochés, reportés ou supprimés directement à partir de votre montre Android"</string> <string name="export_as_csv_summary">Génère des fichiers pouvant être ouverts par des tableurs comme Microsoft Excel ou LibreOffice Calc. Ces fichiers ne peuvent être réimportés.</string>
<string name="about">"À propos"</string> <string name="export_full_backup_summary">Génère un fichier contenant toutes vos données. Ce fichier peut être réimporté.</string>
<string name="translators">"Traducteurs"</string> <string name="bug_report_failed">La génération du rapport de bug a échouée.</string>
<string name="developers">"Développeurs"</string> <string name="generate_bug_report">Générer un rapport de bug.</string>
<string name="troubleshooting">Résolution de problèmes</string>
<!-- %s will get replaced by the version number. For example, "Versão %d" will become "Versão 1.2.0". --> <string name="help_translate">Aider à traduire cette application</string>
<string name="version_n">"Version %s"</string> <string name="night_mode">Mode Nuit</string>
<string name="frequency">"Fréquence"</string> <string name="use_pure_black">Utiliser un noir pure dans le mode nuit.</string>
<string name="pure_black_description">Remplacer le fond gris par un noir pure dans le mode nuit; ça réduit lusage de la batterie d\'un appareil ayant un écran AMOLED.</string>
<!-- Fuzzy --> <string name="reverse_days">Inverser l\'ordre des jours</string>
<string name="checkmark">"Croix"</string> <string name="reverse_days_description">Montrer les jours dans l\'ordre inversé sur l\'écran principal</string>
<string name="day">Jour</string>
<!-- This is a shorter version of "Habit Strength" --> <string name="week">Semaine</string>
<!-- Fuzzy --> <string name="month">Mois</string>
<string name="strength">"Force"</string> <string name="quarter">Trimestre</string>
<string name="year">Année</string>
<!-- Fuzzy -->
<string name="best_streaks">"Meilleures séries"</string>
<string name="current_streaks">"Série actuelle"</string>
<string name="number_of_repetitions">"Nombre de répétitions"</string>
<string name="last_x_days">"%d derniers jours"</string>
<string name="last_x_weeks">"%d dernières semaines"</string>
<string name="last_x_months">"%d derniers mois"</string>
<string name="last_x_years">"%d dernières années"</string>
<!-- "All time" number of repetitions. Or number of repetitions "since the beginning". -->
<string name="all_time">"Depuis le début"</string>
<string name="every_day">"Tous les jours"</string>
<string name="every_week">"Toutes les semaines"</string>
<string name="two_times_per_week">"2 fois par semaine"</string>
<string name="five_times_per_week">"5 fois par semaine"</string>
<!-- Fuzzy -->
<string name="custom_frequency">"Personnalisée ..."</string>
<string name="help">"Aide &amp; FAQ"</string>
<string name="could_not_export">"Export des données échoué."</string>
<string name="could_not_import">"Import des données échoué."</string>
<!-- Appears when the user tries to import a file which we do not support or recognize. -->
<string name="file_not_recognized">"Fichier non reconnu"</string>
<string name="habits_imported">"Habitudes importées avec succès"</string>
<string name="full_backup_success">"Sauvegarde complète exportée avec succès"</string>
<string name="import_data">"Importer des données"</string>
<string name="export_full_backup">"Exporter une sauvegarde complète"</string>
<string name="import_data_summary">"Supporte les sauvegardes complètes générées par cette application, ainsi que les fichiers Tickmate, HabitBull et Rewire. Voir la FAQ pour plus d'informations."</string>
<string name="export_as_csv_summary">"Génère des fichiers pouvant être ouverts par des tableurs comme Microsoft Excel ou LibreOffice Calc. Ces fichiers ne peuvent être réimportés."</string>
<string name="export_full_backup_summary">"Génère un fichier contenant toutes vos données. Ce fichier peut être réimporté."</string>
<string name="bug_report_failed">"La génération du rapport de bug a échouée."</string>
<string name="generate_bug_report">"Générer un rapport de bug."</string>
<string name="troubleshooting">"Résolution de problèmes"</string>
<string name="help_translate">"Aider à traduire cette application"</string>
<string name="night_mode">"Mode Nuit"</string>
<string name="use_pure_black">"Utiliser un noir pure dans le mode nuit."</string>
<string name="pure_black_description">"Remplacer le fond gris par un noir pure dans le mode nuit; ça réduit lusage de la batterie d'un appareil ayant un écran AMOLED."</string>
<string name="interface_preferences">"Interface"</string>
<string name="reverse_days">"Inverser l'ordre des jours"</string>
<string name="reverse_days_description">"Montrer les jours dans l'ordre inversé sur l'écran principal"</string>
<string name="day">"Jour"</string>
<string name="week">"Semaine"</string>
<string name="month">"Mois"</string>
<!-- Three-month period -->
<string name="quarter">"Trimestre"</string>
<string name="year">"Année"</string>
<!-- Middle part of the sentence '1 time in xx days' --> <!-- Middle part of the sentence '1 time in xx days' -->
<!-- Middle part of the sentence '1 time in xx days' --> <string name="time_every">fois tous les</string>
<string name="time_every">"fois tous les"</string> <string name="every_x_days">Tous les %d jours</string>
<string name="every_x_days">"Tous les %d jours"</string> <string name="every_x_weeks">Toutes les %d semaines</string>
<string name="every_x_weeks">"Toutes les %d semaines"</string> <string name="every_x_months">Tous les %d mois</string>
<string name="every_x_months">"Tous les %d mois"</string> <string name="score">Pointage</string>
<string name="reminder_sound">Son de rappel</string>
<!-- The old "habit strength" has been replaced by "score". Feel free to translate "score" as "strength" or "stability" if it sounds more natural in your language. --> <string name="none">Aucun</string>
<string name="score">"Pointage"</string>
<string name="reminder_sound">"Son de rappel"</string>
<!-- Appears when the user disables the reminder sound. Could also be "no sound", "mute" or "silent". -->
<string name="none">"Aucun"</string>
</resources> </resources>

@ -1,242 +1,212 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
~
~ This file is part of Loop Habit Tracker.
~
~ Loop Habit Tracker is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by the
~ Free Software Foundation, either version 3 of the License, or (at your
~ option) any later version.
~
~ Loop Habit Tracker is distributed in the hope that it will be useful, but
~ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
~ more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources> <resources>
<string name="app_name">"Loop आदत पर नजर"</string> <string name="app_name">Loop आदत पर नजर</string>
<string name="main_activity_title">"आदतें"</string> <string name="main_activity_title">आदतें</string>
<string name="action_settings">"सेटिंग्स"</string> <string name="action_settings">सेटिंग्स</string>
<string name="edit">संपादन</string>
<!-- This is not a common Hindi Word but the closest I could get --> <string name="delete">\"
<string name="edit">"संपादन"</string> मिटा देना\"</string>
<string name="delete">" <string name="archive">\"
मिटा देना"</string> संग्रह \"</string>
<string name="archive">" <string name="unarchive">असंगृहीत करें</string>
संग्रह "</string> <string name="add_habit">आदत जोड़े</string>
<string name="unarchive">"असंगृहीत करें"</string> <string name="color_picker_default_title">रंग बदलें</string>
<string name="add_habit">"आदत जोड़े"</string> <string name="toast_habit_created">आदत बनाए गए</string>
<string name="color_picker_default_title">"रंग बदलें"</string> <string name="toast_habit_deleted">आदत हटाया गया</string>
<string name="toast_habit_created">"आदत बनाए गए"</string> <string name="toast_habit_restored">आदत फिर से चालू किया गया</string>
<string name="toast_habit_deleted">"आदत हटाया गया"</string> <string name="toast_nothing_to_undo">कुछ भी नहीं पूर्ववत करने के लिए</string>
<string name="toast_habit_restored">"आदत फिर से चालू किया गया"</string> <string name="toast_nothing_to_redo">कुछ भी नही फिर से करने के लिए</string>
<string name="toast_nothing_to_undo">"कुछ भी नहीं पूर्ववत करने के लिए"</string> <string name="toast_habit_changed">आदत मे बदलाव</string>
<string name="toast_nothing_to_redo">"कुछ भी नही फिर से करने के लिए"</string> <string name="toast_habit_changed_back">\"
<string name="toast_habit_changed">"आदत मे बदलाव"</string> आदत बहाल\"</string>
<string name="toast_habit_archived">आदत संग्रहीत</string>
<!-- This appears when the user edits a habit, and then undoes the action. The habit is "changed back" to what is was before. Alternatively, "Habit restored". --> <string name="toast_habit_unarchived">आदत को संग्रह से निकाला गया</string>
<string name="toast_habit_changed_back">" <string name="overview">अवलोकन</string>
आदत बहाल"</string> <string name="habit_strength">आदत की ताक़त</string>
<string name="toast_habit_archived">"आदत संग्रहीत"</string> <string name="history">\"
<string name="toast_habit_unarchived">"आदत को संग्रह से निकाला गया"</string> इतिहास\"</string>
<string name="overview">"अवलोकन"</string> <string name="clear">\"
<string name="habit_strength">"आदत की ताक़त"</string> साफ़\"</string>
<string name="history">" <string name="description_hint">सवाल (क्या आज .......किया?)</string>
इतिहास"</string> <string name="repeat">दोहराए</string>
<string name="clear">" <string name="times_every">बार</string>
साफ़"</string> <string name="days">दिन</string>
<string name="description_hint">"सवाल (क्या आज .......किया?)"</string> <string name="reminder">\"
अनुस्मारक\"</string>
<!-- This and the next two terms form the sentence "Repeat 3 times in 7 days" that you see when you create a habit. Let me know if you have trouble adapting this into your language. --> <string name="discard">\"
<string name="repeat">"दोहराए"</string> हटाना\"</string>
<string name="times_every">"बार"</string> <string name="save">\"
<string name="days">"दिन"</string> सुरक्षित \"</string>
<string name="reminder">" <string name="streaks">\"
अनुस्मारक"</string> लहर\"</string>
<string name="discard">" <string name="no_habits_found">\"आपकी कोई सक्रिय आदत नही है
हटाना"</string> \"</string>
<string name="save">" <string name="long_press_to_toggle">चेक या अनचेक करने के लिए दबाएँ व दबाएँ रखें </string>
सुरक्षित "</string> <string name="reminder_off">बंद</string>
<string name="validation_name_should_not_be_blank">नाम को खाली नही छोड़ सकते</string>
<!-- Streak as in "winning streak". That is, the number of times a user has performed a habit consecutively. Similar terms are "chains" or "series". --> <string name="validation_number_should_be_positive">नंबर सकारात्मक डालें</string>
<string name="streaks">" <string name="validation_at_most_one_rep_per_day">\"
लहर"</string> आप एक दिन मे अधिक से अधिक एक पुनरावृत्ति हो सकती है\"</string>
<string name="no_habits_found">"आपकी कोई सक्रिय आदत नही है <string name="create_habit">आदत उत्पन्न करें</string>
"</string> <string name="edit_habit">आदत संपादित करें</string>
<string name="long_press_to_toggle">"चेक या अनचेक करने के लिए दबाएँ व दबाएँ रखें "</string> <string name="check">\"
<string name="reminder_off">"बंद"</string> चेक\"</string>
<string name="validation_name_should_not_be_blank">"नाम को खाली नही छोड़ सकते"</string> <string name="snooze">बाद में</string>
<string name="validation_number_should_be_positive">"नंबर सकारात्मक डालें"</string>
<string name="validation_at_most_one_rep_per_day">"
आप एक दिन मे अधिक से अधिक एक पुनरावृत्ति हो सकती है"</string>
<string name="create_habit">"आदत उत्पन्न करें"</string>
<string name="edit_habit">"आदत संपादित करें"</string>
<string name="check">"
चेक"</string>
<string name="snooze">"बाद में"</string>
<!-- App introduction --> <!-- App introduction -->
<string name="intro_title_1">" <string name="intro_title_1">\"
स्वागत हे"</string> स्वागत हे\"</string>
<string name="intro_description_1">" <string name="intro_description_1">\"
लूप हैबिट ट्रैकर नई और अच्छी आदतों को बनाए रखने मे लिए मदद करता है ।"</string> लूप हैबिट ट्रैकर नई और अच्छी आदतों को बनाए रखने मे लिए मदद करता है ।\"</string>
<string name="intro_title_2">"कुछ नई अच्छी आदतें बनाएँ"</string> <string name="intro_title_2">कुछ नई अच्छी आदतें बनाएँ</string>
<string name="intro_description_2">"हर दिन, अपनी आदत के प्रदर्शन के बाद , अप्प पर एक सही का निशान डालें"</string> <string name="intro_description_2">हर दिन, अपनी आदत के प्रदर्शन के बाद , अप्प पर एक सही का निशान डालें</string>
<string name="intro_title_3">"इसे करते रहें"</string> <string name="intro_title_3">इसे करते रहें</string>
<string name="intro_description_3">" <string name="intro_description_3">\"
एक लंबे समय के लिए लगातार प्रदर्शन की आदतों से पूर्ण स्टार अर्जित करेंगे।"</string> एक लंबे समय के लिए लगातार प्रदर्शन की आदतों से पूर्ण स्टार अर्जित करेंगे।\"</string>
<string name="intro_title_4">" <string name="intro_title_4">\"
अपनी प्रगति को ट्रैक करें"</string> अपनी प्रगति को ट्रैक करें\"</string>
<string name="intro_description_4">" <string name="intro_description_4">\"
विस्तृत रेखांकन आपको बताएंगे कि कैसे अपनी आदतों में समय के साथ सुधार करें"</string> विस्तृत रेखांकन आपको बताएंगे कि कैसे अपनी आदतों में समय के साथ सुधार करें\"</string>
<string name="interval_15_minutes">"15 मिनिट"</string> <string name="interval_15_minutes">15 मिनिट</string>
<string name="interval_30_minutes">"30 मिनिट"</string> <string name="interval_30_minutes">30 मिनिट</string>
<string name="interval_1_hour">"1 घंटा"</string> <string name="interval_1_hour">1 घंटा</string>
<string name="interval_2_hour">"2 घंटा"</string> <string name="interval_2_hour">2 घंटा</string>
<string name="interval_4_hour">"4 घंटा"</string> <string name="interval_4_hour">4 घंटा</string>
<string name="interval_8_hour">"8 घंटा"</string> <string name="interval_8_hour">8 घंटा</string>
<string name="pref_toggle_title">"टॉगल पुनरावृत्ति हल्का दबाने से"</string> <string name="pref_toggle_title">टॉगल पुनरावृत्ति हल्का दबाने से</string>
<string name="pref_toggle_description">" <string name="pref_toggle_description">\"
अधिक सुविधाजनक है, लेकिन आकस्मिक टॉगल हो सकता है ।"</string> अधिक सुविधाजनक है, लेकिन आकस्मिक टॉगल हो सकता है ।\"</string>
<string name="pref_snooze_interval_title">"रिमाइंडर मे स्नूज़ अंतराल"</string> <string name="pref_snooze_interval_title">रिमाइंडर मे स्नूज़ अंतराल</string>
<string name="pref_rate_this_app">" <string name="pref_rate_this_app">\"
गूगले प्ले पर इस ऐप्लिकेशन को रेट करें"</string> गूगले प्ले पर इस ऐप्लिकेशन को रेट करें\"</string>
<string name="pref_send_feedback">"डेवेलपर को प्रतिक्रिया भेजें "</string> <string name="pref_send_feedback">डेवेलपर को प्रतिक्रिया भेजें </string>
<string name="pref_view_source_code">"Github मे सोर्स कोड देखें"</string> <string name="pref_view_source_code">Github मे सोर्स कोड देखें</string>
<string name="pref_view_app_introduction">"अप्प्प का परिचय देखें"</string> <string name="pref_view_app_introduction">अप्प्प का परिचय देखें</string>
<string name="links">"लिंक"</string> <string name="links">लिंक</string>
<string name="behavior">" <string name="behavior">\"
व्यवहार"</string> व्यवहार\"</string>
<string name="name">"नाम"</string> <string name="name">नाम</string>
<string name="show_archived">"संग्रह देखें"</string> <string name="settings">सेटिंग्स</string>
<string name="settings">"सेटिंग्स"</string> <string name="snooze_interval">\"
<string name="snooze_interval">" झपकी का अंतराल\"</string>
झपकी का अंतराल"</string> <string name="hint_title">क्या आप जानते .?</string>
<string name="hint_title">"क्या आप जानते .?"</string> <string name="hint_drag">\"
<string name="hint_drag">" प्रविष्टियों को पुनर्व्यवस्थित करने के लिए, आदत के नाम पर प्रेस करें और सही जगह पर खींचें।\"</string>
प्रविष्टियों को पुनर्व्यवस्थित करने के लिए, आदत के नाम पर प्रेस करें और सही जगह पर खींचें।"</string> <string name="hint_landscape">\"
<string name="hint_landscape">" अपने फोन को लांडसकपे मोड मे रख कर आप अधिक दिनों से देख सकते हैं\"</string>
अपने फोन को लांडसकपे मोड मे रख कर आप अधिक दिनों से देख सकते हैं"</string> <string name="delete_habits">आदत हटाएँ</string>
<string name="delete_habits">"आदत हटाएँ"</string> <string name="delete_habits_message">\"
<string name="delete_habits_message">" आदतों को स्थायी रूप से हटा दिया जाएगा। इस क्रिया को पूर्ववत नहीं किया जा सकता है।\"</string>
आदतों को स्थायी रूप से हटा दिया जाएगा। इस क्रिया को पूर्ववत नहीं किया जा सकता है।"</string> <string name="weekends">\"
<string name="weekends">" सप्ताहांत\"</string>
सप्ताहांत"</string> <string name="any_weekday">\"
<string name="any_weekday">" सोमवार से शुक्रवार\"</string>
सोमवार से शुक्रवार"</string> <string name="any_day">\"
<string name="any_day">" सप्ताह का कोई भी दिन\"</string>
सप्ताह का कोई भी दिन"</string> <string name="select_weekdays">दिन चुनें</string>
<string name="select_weekdays">"दिन चुनें"</string> <string name="export_to_csv">CSV में निर्यात करें</string>
<string name="export_to_csv">"CSV में निर्यात करें"</string> <string name="done_label">\"
<string name="done_label">" पूर्ण\"</string>
पूर्ण"</string> <string name="clear_label">\"
<string name="clear_label">" साफ़\"</string>
साफ़"</string> <string name="select_hours">घंटे चुनें</string>
<string name="select_hours">"घंटे चुनें"</string> <string name="select_minutes">मिनट चुनें</string>
<string name="select_minutes">"मिनट चुनें"</string> <string name="about">\"
बारे में\"</string>
<!-- Short description used on the Google Play store. There is an 80-character limit. --> <string name="translators">\"
<string name="store_short_description">" अनुवादक\"</string>
अच्छी आदतें बनाएं और समय के साथ अपनी प्रगति को ट्रैक (विज्ञापन मुक्त )"</string> <string name="developers">\"
<string name="store_description_1">"लूप अच्छी आदतों को बनाए रखने के लिए, वा लंबी अवधि के लक्ष्यों को प्राप्त करने में आपकी मदद करता है । विस्तृत रेखांकन और आँकड़े आपको बताएंगे कि कैसे अपनी आदतों में समय के साथ सुधार होगा। यह पूरी तरह से विज्ञापन मुक्त और ओपन सोर्स है"</string> डिवेलपर\"</string>
<string name="store_feature_interface">" <string name="version_n">वर्ज़न %s</string>
&lt;b&gt;सरल, सुंदर और आधुनिक इंटरफ़ेस&lt;/b&gt; <string name="frequency">आवृत्ति</string>
लूप मे न्यूनतर इंटरफ़ेस है जो उपयोग करने के लिए आसान है मेटीरियल डिजाइन दिशा निर्देशों का पालन करता है"</string> <string name="checkmark">सही का चिह्न</string>
<string name="store_feature_score">"आदत स्कोर <string name="strength">\"
अपने वर्तमान स्ट्रीक दिखाने के अलावा , लूप मे अपनी आदतों की ताकत की गणना के लिए एक उन्नत एल्गोरिथ्म है। हर पुनरावृत्ति अपनी आदत को मजबूत बनाता है , और हर चूक दिन यह कमजोर बना देता है। हालांकि कुछ चूक दिन एक लंबी स्ट्रीक के बाद , पूरी तरह से आपके पूरे प्रगति को नष्ट नहीं होगा ।"</string> ताक़त\"</string>
<string name="store_feature_statistics">" <string name="best_streaks">बेस्ट स्ट्रीक्स</string>
विस्तृत रेखांकन और आँकड़े <string name="current_streaks">\"
स्पष्ट रूप से सुंदर और विस्तृत रेखांकन के साथ देखें कि कैसे आपकी आदतों मे साथ समय के साथ सुधार हुआ है। अपनी आदतों का पूरा इतिहास देखने के लिए वापस स्क्रॉल करें।"</string> वर्तमान स्ट्रीक्स\"</string>
<string name="store_feature_schedules">" <string name="number_of_repetitions">\"
लचीला कार्यक्रम repetitions की संख्या\"</string>
दैनिक आदतों और अधिक जटिल कार्यक्रम दोनो को सपोर्ट ,इस तरह के रूप में 3 बार हर सप्ताह समर्थन करता है; एक बार हर दूसरे सप्ताह ; या हर दूसरे दिन ।"</string> <string name="last_x_days">अंतिम %d दिवस</string>
<string name="store_feature_reminders">"रिमाइंडर <string name="last_x_weeks">पिछले %d सप्ताह</string>
प्रत्येक आदत के लिए एक रिमाइंडर बनाएं , दिन के एक चुने हुए घंटे में । आसानी से , जांच को खारिज या अधिसूचना से सीधे अपने नोटिफिकेशन से, एप्लिकेशन को खोले बिना"</string> <string name="last_x_months">पिछले %d माह</string>
<string name="store_feature_opensource">"पूर्ण रूप से मुफ़्त और ओपन सोर्स <string name="last_x_years">\"
यहाँ बिल्कुल भी कोई विज्ञापन , कष्टप्रद सूचनाएं या फ़िज़ूल पर्मिशन नही है और कभी नहीं होगा। पिछले %d साल\"</string>
पूरा सोर्स कोड GPLv3 के तहत उपलब्ध है।"</string> <string name="all_time">पूरा समय</string>
<string name="store_feature_wear">"Smartwatches के लिए अनुकूल <string name="every_day">\"
रिमाइंडर को चेक कर सकते हैं, स्नूज़ या हटा सकते हैं सीधे अपनी स्मार्ट वॉच से"</string> हर दिन\"</string>
<string name="about">" <string name="every_week">\"
बारे में"</string> प्रति सप्ताह\"</string>
<string name="translators">" <string name="two_times_per_week">\"
अनुवादक"</string> प्रति सप्ताह 2 बार\"</string>
<string name="developers">" <string name="five_times_per_week">\"
डिवेलपर"</string> प्रति सप्ताह 5 बार\"</string>
<string name="custom_frequency">अन्य</string>
<!-- %s will get replaced by the version number. For example, "Versão %d" will become "Versão 1.2.0". --> <string name="help">\"
<string name="version_n">"वर्ज़न %s"</string> मदद और बार-बार सवाल पूछने वाले सवाल\"</string>
<string name="frequency">"आवृत्ति"</string> <string name="could_not_export">\"
<string name="checkmark">"सही का चिह्न"</string> डेटा निर्यात करने में विफल\"</string>
<string name="could_not_import">डेटा आयात करने में विफल रहा है</string>
<!-- This is a shorter version of "Habit Strength" --> <string name="file_not_recognized">फाइल की पहचान नही </string>
<string name="strength">" <string name="habits_imported">\"
ताक़त"</string> आदतों को सफलतापूर्वक आयात\"</string>
<string name="best_streaks">"बेस्ट स्ट्रीक्स"</string> <string name="full_backup_success">\"
<string name="current_streaks">" पूर्ण बैकअप सफलतापूर्वक निर्यात किया।\"</string>
वर्तमान स्ट्रीक्स"</string> <string name="import_data">\"
<string name="number_of_repetitions">" डेटा आयात\"</string>
repetitions की संख्या"</string> <string name="export_full_backup">\"
<string name="last_x_days">"अंतिम %d दिवस"</string> निर्यात पूर्ण बैकअप\"</string>
<string name="last_x_weeks">"पिछले %d सप्ताह"</string> <string name="import_data_summary">इस एप्लिकेशन के द्वारा निर्यात पूर्ण बैकअप को सपोर्ट करता है , साथ ही फाइलों टिक्कमते , हबिठबुल्ल या रिवाइयर द्वारा उत्पन्न फाइल्स को सपोर्ट करता है। अधिक जानकारी के लिए सामान्य प्रश्न देखें।</string>
<string name="last_x_months">"पिछले %d माह"</string> <string name="export_as_csv_summary">\"ऐसी फाइल्स उत्पन्न करता है जो स्प्रेडशीट सॉफ़्टवरेस जैसे Microsoft Excel, OpenOffice Calc मे खुल सकती है.
<string name="last_x_years">" इस फ़ाइल में वापस आयात नहीं किया जा सकता है।\"</string>
पिछले %d साल"</string> <string name="export_full_backup_summary">ऐसी फाइल्स उत्पन्न करता है जिसमे आपका सारा डेटा रहता है इस फ़ाइल को वापस आयात किया जा सकता है।</string>
<string name="bug_report_failed">बग रिपोर्ट जनरेट करने मे असफल</string>
<!-- "All time" number of repetitions. Or number of repetitions "since the beginning". --> <string name="generate_bug_report">बग रिपोर्ट जनरेट करने मे सफल</string>
<string name="all_time">"पूरा समय"</string> <string name="troubleshooting">\"
<string name="every_day">" समस्या निवारण\"</string>
हर दिन"</string> <string name="help_translate">\"
<string name="every_week">" इस एप्लिकेशन का अनुवाद करने में मदद करें\"</string>
प्रति सप्ताह"</string> <string name="night_mode">नाइट मोड</string>
<string name="two_times_per_week">" <string name="use_pure_black">नाइट मोड मे पूरा काला यूज़ करें</string>
प्रति सप्ताह 2 बार"</string> <string name="pure_black_description">\"
<string name="five_times_per_week">" रात मोड में शुद्ध काले रंग के साथ ग्रे पृष्ठभूमि में बदलें. अमोलेड प्रदर्शन के साथ फोन में बैटरी उपयोग कम कर देता है ।\"</string>
प्रति सप्ताह 5 बार"</string> <string name="interface_preferences">इंटरफेस</string>
<string name="custom_frequency">"अन्य"</string> <string name="reverse_days">\"
<string name="help">" दिनों की रिवर्स आदेश\"</string>
मदद और बार-बार सवाल पूछने वाले सवाल"</string> <string name="reverse_days_description">दिनों को रिवर्स क्रम में मुख्य स्क्रीन पर दिखाएँ</string>
<string name="could_not_export">" <string name="day">दिन </string>
डेटा निर्यात करने में विफल"</string> <string name="week">हफ्ते</string>
<string name="could_not_import">"डेटा आयात करने में विफल रहा है"</string> <string name="month">माह</string>
<string name="quarter">तिमाही</string>
<!-- Appears when the user tries to import a file which we do not support or recognize. --> <string name="year">साल</string>
<string name="file_not_recognized">"फाइल की पहचान नही "</string>
<string name="habits_imported">"
आदतों को सफलतापूर्वक आयात"</string>
<string name="full_backup_success">"
पूर्ण बैकअप सफलतापूर्वक निर्यात किया।"</string>
<string name="import_data">"
डेटा आयात"</string>
<string name="export_full_backup">"
निर्यात पूर्ण बैकअप"</string>
<string name="import_data_summary">"इस एप्लिकेशन के द्वारा निर्यात पूर्ण बैकअप को सपोर्ट करता है , साथ ही फाइलों टिक्कमते , हबिठबुल्ल या रिवाइयर द्वारा उत्पन्न फाइल्स को सपोर्ट करता है। अधिक जानकारी के लिए सामान्य प्रश्न देखें।"</string>
<string name="export_as_csv_summary">"ऐसी फाइल्स उत्पन्न करता है जो स्प्रेडशीट सॉफ़्टवरेस जैसे Microsoft Excel, OpenOffice Calc मे खुल सकती है.
इस फ़ाइल में वापस आयात नहीं किया जा सकता है।"</string>
<string name="export_full_backup_summary">"ऐसी फाइल्स उत्पन्न करता है जिसमे आपका सारा डेटा रहता है इस फ़ाइल को वापस आयात किया जा सकता है।"</string>
<string name="bug_report_failed">"बग रिपोर्ट जनरेट करने मे असफल"</string>
<string name="generate_bug_report">"बग रिपोर्ट जनरेट करने मे सफल"</string>
<string name="troubleshooting">"
समस्या निवारण"</string>
<string name="help_translate">"
इस एप्लिकेशन का अनुवाद करने में मदद करें"</string>
<string name="night_mode">"नाइट मोड"</string>
<string name="use_pure_black">"नाइट मोड मे पूरा काला यूज़ करें"</string>
<string name="pure_black_description">"
रात मोड में शुद्ध काले रंग के साथ ग्रे पृष्ठभूमि में बदलें. अमोलेड प्रदर्शन के साथ फोन में बैटरी उपयोग कम कर देता है ।"</string>
<string name="interface_preferences">"इंटरफेस"</string>
<string name="reverse_days">"
दिनों की रिवर्स आदेश"</string>
<string name="reverse_days_description">"दिनों को रिवर्स क्रम में मुख्य स्क्रीन पर दिखाएँ"</string>
<string name="day">"दिन "</string>
<string name="week">"हफ्ते"</string>
<string name="month">"माह"</string>
<!-- Three-month period -->
<string name="quarter">"तिमाही"</string>
<string name="year">"साल"</string>
<!-- Middle part of the sentence '1 time in xx days' --> <!-- Middle part of the sentence '1 time in xx days' -->
<!-- Middle part of the sentence '1 time in xx days' --> <string name="time_every">समय शुरू</string>
<string name="time_every">"समय शुरू"</string> <string name="every_x_days">\"
<string name="every_x_days">" हर %d दिन\"</string>
हर %d दिन"</string> <string name="every_x_weeks">\"
<string name="every_x_weeks">" हर %d हफ्ते\"</string>
हर %d हफ्ते"</string> <string name="every_x_months">\"
<string name="every_x_months">" हर %d साल\"</string>
हर %d साल"</string> <string name="score">स्कोर</string>
<string name="reminder_sound">अनुस्मारक ध्वनि</string>
<!-- The old "habit strength" has been replaced by "score". Feel free to translate "score" as "strength" or "stability" if it sounds more natural in your language. --> <string name="none">\"
<string name="score">"स्कोर"</string> कोई आवाज नहीं\"</string>
<string name="reminder_sound">"अनुस्मारक ध्वनि"</string>
<!-- Appears when the user disables the reminder sound. Could also be "no sound", "mute" or "silent". -->
<string name="none">"
कोई आवाज नहीं"</string>
</resources> </resources>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save