Compare commits

..

33 Commits

Author SHA1 Message Date
2b6fc06b86 Merge branch 'hotfix/1.5.6' 2016-06-19 17:10:12 -04:00
98ad3aab9d Make checkmark widgets work again 2016-06-19 17:06:03 -04:00
c7e63a40da Bump version to 1.5.6 2016-06-19 17:04:25 -04:00
c2dd26eeb3 Merge branch 'hotfix/1.5.5' 2016-06-19 10:08:19 -04:00
5831340343 Update French translation; add Slovenian and Croatian translations 2016-06-19 09:57:45 -04:00
d7f6f52a49 Always refresh data after resuming
Fixes #120
2016-06-19 09:32:42 -04:00
93b442332d Bugfix: add check on correct date when checking from notification 2016-06-19 09:08:34 -04:00
e248824bcd Bump version to 1.5.5 2016-06-19 08:08:00 -04:00
00774368d4 Merge branch 'hotfix/1.5.4' 2016-05-29 12:06:36 -04:00
cbf1bd3e19 Update changelog 2016-05-29 11:57:33 -04:00
4061921b93 Add Serbian translation 2016-05-29 11:56:57 -04:00
59d42fe62f Show empty ringtone name in case of RuntimeException
Fixes #116
2016-05-29 11:47:36 -04:00
88e8aad0d8 CSV export: sanitize habit name before creating folder
Fix #113
2016-05-25 10:09:39 -04:00
a4b6728721 Bump version to 1.5.4 2016-05-25 10:09:11 -04:00
33bc8f78e7 Merge branch 'hotfix/1.5.3' 2016-05-22 12:56:28 -04:00
0f223f8504 Update changelog 2016-05-22 12:56:15 -04:00
007996c69e Update translations 2016-05-22 12:50:42 -04:00
ff9d50b32a Remove debug code 2016-05-22 12:29:37 -04:00
38024d71ce Allow checkmark widget to be resized to very small sizes 2016-05-22 12:24:28 -04:00
9ec1afc208 Remove associated preference after deleting widget 2016-05-22 10:28:58 -04:00
e0888a9b4d Remove fields from BaseWidgetProvider
This caused a bug when multiple widgets had different sizes. The size of the
last widget would be used in all of them.
2016-05-22 10:27:27 -04:00
8aade2f145 Fix crash when habits with reminders have short names
Fixes #109
2016-05-22 09:33:30 -04:00
1ba1d775f7 Bump version to 1.5.3 2016-05-22 09:24:20 -04:00
bd6cba8303 Merge branch 'hotfix/1.5.2' 2016-05-19 12:01:29 -04:00
befc3a0ad8 Update changelog 2016-05-19 12:01:24 -04:00
f4c963e2c1 Update Japanese translation 2016-05-19 11:58:20 -04:00
e9a4a047c1 Trim habit names on log files 2016-05-19 11:50:38 -04:00
7ce1988d2e Fix NullPointerException on RingView 2016-05-19 11:46:02 -04:00
53911fa410 Send bug report on the body of email, instead of attachment 2016-05-19 11:39:17 -04:00
f5f43d9a16 Bump version to 1.5.2 2016-05-19 10:40:45 -04:00
d0e475ad78 Merge branch 'hotfix/1.5.1' 2016-05-17 09:35:51 -04:00
b3199cf092 Update version and changelog 2016-05-17 09:35:10 -04:00
73e6f2a2d4 Remove ActiveAndroid.jar 2016-05-17 09:29:53 -04:00
28 changed files with 868 additions and 135 deletions

View File

@@ -1,5 +1,27 @@
# Changelog
### 1.5.4 (May 29, 2016)
* Fix crash upon opening settings screen in some phones
* Fix missing folders in CSV archive
* Add Serbian translation
### 1.5.3 (May 22, 2016)
* Complete Arabic and Czech translations
* Fix crash at startup
* Fix checkmark widget on custom launchers
### 1.5.2 (May 19, 2016)
* Fix missing attachment on bug reports
* Fix bug that prevents some widgets from rendering
* Complete Japanese translation
### 1.5.1 (May 17, 2016)
* Fix build on F-Droid
### 1.5.0 (May 15, 2016)
* Add night mode, with AMOLED support
@@ -82,4 +104,4 @@
### 1.0.0 (February 19, 2016)
* Initial release
* Initial release

View File

@@ -39,8 +39,9 @@ dependencies {
compile 'com.github.paolorotolo:appintro:3.4.0'
compile 'org.apmem.tools:layouts:1.10@aar'
compile 'com.opencsv:opencsv:3.7'
compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT'
compile project(':libs:drag-sort-listview:library')
compile files('libs/ActiveAndroid.jar')
androidTestCompile 'com.android.support:support-annotations:23.3.0'
androidTestCompile 'com.android.support.test:runner:0.5'

Binary file not shown.

View File

@@ -21,8 +21,8 @@
<manifest
package="org.isoron.uhabits"
xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="16"
android:versionName="1.5.0">
android:versionCode="22"
android:versionName="1.5.6">
<uses-permission android:name="android.permission.VIBRATE"/>

View File

@@ -154,7 +154,7 @@ abstract public class BaseActivity extends AppCompatActivity implements Thread.U
try
{
ex.printStackTrace();
HabitsApplication.generateLogFile();
HabitsApplication.dumpBugReportToFile();
}
catch(Exception e)
{

View File

@@ -172,10 +172,12 @@ public class HabitBroadcastReceiver extends BroadcastReceiver
Intent contentIntent = new Intent(context, MainActivity.class);
contentIntent.setData(data);
PendingIntent contentPendingIntent =
PendingIntent.getActivity(context, 0, contentIntent, 0);
PendingIntent.getActivity(context, 0, contentIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent dismissPendingIntent = buildDismissIntent(context);
PendingIntent checkIntentPending = buildCheckIntent(context, habit, timestamp);
PendingIntent checkIntentPending = buildCheckIntent(context,
habit, timestamp, 1);
PendingIntent snoozeIntentPending = buildSnoozeIntent(context, habit);
Uri ringtoneUri = ReminderHelper.getRingtoneUri(context);
@@ -222,24 +224,28 @@ public class HabitBroadcastReceiver extends BroadcastReceiver
Intent snoozeIntent = new Intent(context, HabitBroadcastReceiver.class);
snoozeIntent.setData(data);
snoozeIntent.setAction(ACTION_SNOOZE);
return PendingIntent.getBroadcast(context, 0, snoozeIntent, 0);
return PendingIntent.getBroadcast(context, 0, snoozeIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
}
public static PendingIntent buildCheckIntent(Context context, Habit habit, Long timestamp)
public static PendingIntent buildCheckIntent(Context context, Habit
habit, Long timestamp, int requestCode)
{
Uri data = habit.getUri();
Intent checkIntent = new Intent(context, HabitBroadcastReceiver.class);
checkIntent.setData(data);
checkIntent.setAction(ACTION_CHECK);
if(timestamp != null) checkIntent.putExtra("timestamp", timestamp);
return PendingIntent.getBroadcast(context, 0, checkIntent, PendingIntent.FLAG_ONE_SHOT);
return PendingIntent.getBroadcast(context, requestCode, checkIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
}
public static PendingIntent buildDismissIntent(Context context)
{
Intent deleteIntent = new Intent(context, HabitBroadcastReceiver.class);
deleteIntent.setAction(ACTION_DISMISS);
return PendingIntent.getBroadcast(context, 0, deleteIntent, 0);
return PendingIntent.getBroadcast(context, 0, deleteIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
}
public static PendingIntent buildViewHabitIntent(Context context, Habit habit)

View File

@@ -36,6 +36,7 @@ import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
public class HabitsApplication extends Application
{
@@ -87,6 +88,7 @@ public class HabitsApplication extends Application
public static String getLogcat() throws IOException
{
int maxNLines = 250;
StringBuilder builder = new StringBuilder();
String[] command = new String[] { "logcat", "-d"};
@@ -95,10 +97,18 @@ public class HabitsApplication extends Application
InputStreamReader in = new InputStreamReader(process.getInputStream());
BufferedReader bufferedReader = new BufferedReader(in);
LinkedList<String> log = new LinkedList<>();
String line;
while ((line = bufferedReader.readLine()) != null)
{
builder.append(line);
log.addLast(line);
if(log.size() > maxNLines) log.removeFirst();
}
for(String l : log)
{
builder.append(l);
builder.append('\n');
}
@@ -130,10 +140,8 @@ public class HabitsApplication extends Application
}
@NonNull
public static File generateLogFile() throws IOException
public static File dumpBugReportToFile() throws IOException
{
String logcat = getLogcat();
String deviceInfo = getDeviceInfo();
String date = DateHelper.getBackupDateFormat().format(DateHelper.getLocalTime());
if(context == null) throw new RuntimeException("application context should not be null");
@@ -142,10 +150,17 @@ public class HabitsApplication extends Application
File logFile = new File(String.format("%s/Log %s.txt", dir.getPath(), date));
FileWriter output = new FileWriter(logFile);
output.write(deviceInfo);
output.write(logcat);
output.write(generateBugReport());
output.close();
return logFile;
}
@NonNull
public static String generateBugReport() throws IOException
{
String logcat = getLogcat();
String deviceInfo = getDeviceInfo();
return deviceInfo + "\n" + logcat;
}
}

View File

@@ -53,7 +53,6 @@ import org.isoron.uhabits.widgets.HistoryWidgetProvider;
import org.isoron.uhabits.widgets.ScoreWidgetProvider;
import org.isoron.uhabits.widgets.StreakWidgetProvider;
import java.io.File;
import java.io.IOException;
public class MainActivity extends BaseActivity
@@ -239,12 +238,25 @@ public class MainActivity extends BaseActivity
{
try
{
File logFile = HabitsApplication.generateLogFile();
HabitsApplication.dumpBugReportToFile();
}
catch (IOException e)
{
// ignored
}
try
{
String log = "---------- BUG REPORT BEGINS ----------\n";
log += HabitsApplication.generateBugReport();
log += "---------- BUG REPORT ENDS ------------\n";
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SENDTO);
intent.setData(Uri.parse(getString(R.string.bugReportURL)));
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(logFile));
intent.setAction(Intent.ACTION_SEND);
intent.setType("message/rfc822");
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "dev@loophabits.org" });
intent.putExtra(Intent.EXTRA_SUBJECT, "Bug Report - Loop Habit Tracker");
intent.putExtra(Intent.EXTRA_TEXT, log);
startActivity(intent);
}
catch (IOException e)

View File

@@ -19,60 +19,35 @@
package org.isoron.uhabits.fragments;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.app.*;
import android.content.*;
import android.net.*;
import android.os.*;
import android.preference.*;
import android.support.annotation.*;
import android.support.v4.app.Fragment;
import android.support.v7.view.ActionMode;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.HapticFeedbackConstants;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.view.*;
import android.view.ContextMenu.*;
import android.view.View.*;
import android.widget.*;
import android.widget.AdapterView.*;
import com.mobeta.android.dslv.DragSortController;
import com.mobeta.android.dslv.DragSortListView;
import com.mobeta.android.dslv.DragSortListView.DropListener;
import com.mobeta.android.dslv.*;
import com.mobeta.android.dslv.DragSortListView.*;
import org.isoron.uhabits.BaseActivity;
import org.isoron.uhabits.*;
import org.isoron.uhabits.R;
import org.isoron.uhabits.commands.Command;
import org.isoron.uhabits.commands.ToggleRepetitionCommand;
import org.isoron.uhabits.dialogs.EditHabitDialogFragment;
import org.isoron.uhabits.dialogs.FilePickerDialog;
import org.isoron.uhabits.helpers.DatabaseHelper;
import org.isoron.uhabits.helpers.DateHelper;
import org.isoron.uhabits.helpers.HintManager;
import org.isoron.uhabits.helpers.ListHabitsHelper;
import org.isoron.uhabits.helpers.ReminderHelper;
import org.isoron.uhabits.helpers.UIHelper;
import org.isoron.uhabits.helpers.UIHelper.OnSavedListener;
import org.isoron.uhabits.loaders.HabitListLoader;
import org.isoron.uhabits.models.Habit;
import org.isoron.uhabits.tasks.ExportCSVTask;
import org.isoron.uhabits.tasks.ExportDBTask;
import org.isoron.uhabits.tasks.ImportDataTask;
import org.isoron.uhabits.commands.*;
import org.isoron.uhabits.dialogs.*;
import org.isoron.uhabits.helpers.*;
import org.isoron.uhabits.helpers.UIHelper.*;
import org.isoron.uhabits.loaders.*;
import org.isoron.uhabits.models.*;
import org.isoron.uhabits.tasks.*;
import java.io.File;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.io.*;
import java.util.*;
public class ListHabitsFragment extends Fragment
implements OnSavedListener, OnItemClickListener, OnLongClickListener, DropListener,
@@ -148,8 +123,6 @@ public class ListHabitsFragment extends Fragment
if(frag != null) frag.setOnSavedListener(this);
}
loader.updateAllHabits(true);
setHasOptionsMenu(true);
return view;
}
@@ -169,11 +142,8 @@ public class ListHabitsFragment extends Fragment
public void onResume()
{
super.onResume();
Long timestamp = loader.getLastLoadTimestamp();
if (timestamp != null && timestamp != DateHelper.getStartOfToday())
loader.updateAllHabits(true);
loader.updateAllHabits(true);
helper.updateEmptyMessage(llEmpty);
helper.updateHeader(llButtonsHeader);
hintManager.showHintIfAppropriate();

View File

@@ -134,6 +134,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
private void updateRingtoneDescription()
{
String ringtoneName = ReminderHelper.getRingtoneName(getContext());
if(ringtoneName == null) return;
Preference ringtonePreference = findPreference("reminderSound");
ringtonePreference.setSummary(ringtoneName);
}

View File

@@ -93,8 +93,9 @@ public class ReminderHelper
else
manager.set(AlarmManager.RTC_WAKEUP, reminderTime, pendingIntent);
String name = habit.name.substring(0, Math.min(3, habit.name.length()));
Log.d("ReminderHelper", String.format("Setting alarm (%s): %s",
DateFormat.getDateTimeInstance().format(new Date(reminderTime)), habit.name));
DateFormat.getDateTimeInstance().format(new Date(reminderTime)), name));
}
@Nullable
@@ -143,21 +144,30 @@ public class ReminderHelper
fragment.startActivityForResult(intent, requestCode);
}
@Nullable
public static String getRingtoneName(Context context)
{
Uri ringtoneUri = getRingtoneUri(context);
String ringtoneName = context.getResources().getString(R.string.none);
if(ringtoneUri != null)
try
{
Ringtone ringtone = RingtoneManager.getRingtone(context, ringtoneUri);
if(ringtone != null)
{
ringtoneName = ringtone.getTitle(context);
ringtone.stop();
}
}
Uri ringtoneUri = getRingtoneUri(context);
String ringtoneName = context.getResources().getString(R.string.none);
return ringtoneName;
if (ringtoneUri != null)
{
Ringtone ringtone = RingtoneManager.getRingtone(context, ringtoneUri);
if (ringtone != null)
{
ringtoneName = ringtone.getTitle(context);
ringtone.stop();
}
}
return ringtoneName;
}
catch (RuntimeException e)
{
e.printStackTrace();
return null;
}
}
}

View File

@@ -191,7 +191,7 @@ public abstract class UIHelper
{
// TODO: Move this to another place, or detect automatically
String fullyTranslatedLanguages[] = { "ca", "zh", "en", "de", "in", "it", "ko", "pl", "pt",
"es", "tk", "uk"};
"es", "tk", "uk", "ja", "fr", "hr", "sl"};
final String currentLanguage = Locale.getDefault().getLanguage();

View File

@@ -19,6 +19,8 @@
package org.isoron.uhabits.io;
import android.support.annotation.NonNull;
import org.isoron.uhabits.helpers.DateHelper;
import org.isoron.uhabits.models.CheckmarkList;
import org.isoron.uhabits.models.Habit;
@@ -64,7 +66,10 @@ public class HabitsCSVExporter
for(Habit h : habits)
{
String habitDirName = String.format("%03d %s/", h.position + 1, h.name);
String sane = sanitizeFilename(h.name);
String habitDirName = String.format("%03d %s", h.position + 1, sane);
habitDirName = habitDirName.trim() + "/";
new File(exportDirName + habitDirName).mkdirs();
generateDirs.add(habitDirName);
@@ -73,6 +78,13 @@ public class HabitsCSVExporter
}
}
@NonNull
private String sanitizeFilename(String name)
{
String s = name.replaceAll("[^a-zA-Z0-9\\._-]+", "");
return s.substring(0, Math.min(s.length(), 100));
}
private void writeScores(String habitDirName, ScoreList scores) throws IOException
{
String path = habitDirName + "Scores.csv";

View File

@@ -489,7 +489,7 @@ public class Habit extends Model
*/
public static void writeCSV(List<Habit> habits, Writer out) throws IOException
{
String header[] = { "Name", "Description", "NumRepetitions", "Interval", "Color" };
String header[] = { "Position", "Name", "Description", "NumRepetitions", "Interval", "Color" };
CSVWriter csv = new CSVWriter(out);
csv.writeNext(header, false);
@@ -498,6 +498,7 @@ public class Habit extends Model
{
String[] cols =
{
String.format("%03d", habit.position + 1),
habit.name,
habit.description,
Integer.toString(habit.freqNum),

View File

@@ -23,6 +23,7 @@ import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.widget.TextView;
import org.isoron.uhabits.R;
@@ -40,7 +41,6 @@ public class CheckmarkWidgetView extends HabitWidgetView implements HabitDataVie
@Nullable
private String name;
@Nullable
private RingView ring;
private TextView label;
private int checkmarkValue;
@@ -147,8 +147,22 @@ public class CheckmarkWidgetView extends HabitWidgetView implements HabitDataVie
w *= scale;
h *= scale;
if(h < getResources().getDimension(R.dimen.checkmarkWidget_heightBreakpoint))
ring.setVisibility(GONE);
else
ring.setVisibility(VISIBLE);
widthMeasureSpec = MeasureSpec.makeMeasureSpec((int) w, MeasureSpec.EXACTLY);
heightMeasureSpec = MeasureSpec.makeMeasureSpec((int) h, MeasureSpec.EXACTLY);
float textSize = 0.15f * h;
float maxTextSize = getResources().getDimension(R.dimen.smallerTextSize);
textSize = Math.min(textSize, maxTextSize);
label.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
ring.setTextSize(textSize);
ring.setThickness(0.15f * textSize);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

View File

@@ -27,6 +27,7 @@ import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.RectF;
import android.support.annotation.Nullable;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.view.View;
@@ -57,8 +58,10 @@ public class RingView extends View
private float textSize;
private boolean enableFontAwesome;
@Nullable
private Bitmap drawingCache;
private Canvas cacheCanvas;
private boolean isTransparencyEnabled;
public RingView(Context context)
@@ -106,6 +109,11 @@ public class RingView extends View
postInvalidate();
}
public void setTextSize(float textSize)
{
this.textSize = textSize;
}
@Override
public void setBackgroundColor(int backgroundColor)
{
@@ -175,12 +183,14 @@ public class RingView extends View
{
super.onSizeChanged(w, h, oldw, oldh);
if(isTransparencyEnabled)
{
if (drawingCache != null) drawingCache.recycle();
drawingCache = Bitmap.createBitmap(diameter, diameter, Bitmap.Config.ARGB_8888);
cacheCanvas = new Canvas(drawingCache);
}
if(isTransparencyEnabled) reallocateCache();
}
private void reallocateCache()
{
if (drawingCache != null) drawingCache.recycle();
drawingCache = Bitmap.createBitmap(diameter, diameter, Bitmap.Config.ARGB_8888);
cacheCanvas = new Canvas(drawingCache);
}
@Override
@@ -191,6 +201,7 @@ public class RingView extends View
if(isTransparencyEnabled)
{
if(drawingCache == null) reallocateCache();
activeCanvas = cacheCanvas;
drawingCache.eraseColor(Color.TRANSPARENT);
}

View File

@@ -45,9 +45,11 @@ import java.io.IOException;
public abstract class BaseWidgetProvider extends AppWidgetProvider
{
private int portraitWidth, portraitHeight;
private int landscapeWidth, landscapeHeight;
private class WidgetDimensions
{
public int portraitWidth, portraitHeight;
public int landscapeWidth, landscapeHeight;
}
protected abstract int getDefaultHeight();
@@ -71,7 +73,7 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(appContext);
for(Integer id : appWidgetIds)
prefs.edit().remove(getHabitIdKey(id));
prefs.edit().remove(getHabitIdKey(id)).apply();
}
@Override
@@ -98,7 +100,7 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider
private void updateWidget(Context context, AppWidgetManager manager,
int widgetId, Bundle options)
{
updateWidgetSize(context, options);
WidgetDimensions dim = getWidgetDimensions(context, options);
Context appContext = context.getApplicationContext();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(appContext);
@@ -113,7 +115,7 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider
return;
}
new RenderWidgetTask(widgetId, context, habit, manager).execute();
new RenderWidgetTask(widgetId, context, habit, dim, manager).execute();
}
private void drawErrorWidget(Context context, AppWidgetManager manager, int widgetId)
@@ -159,7 +161,7 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider
}
}
private void updateWidgetSize(Context context, Bundle options)
private WidgetDimensions getWidgetDimensions(Context context, Bundle options)
{
int maxWidth = getDefaultWidth();
int minWidth = getDefaultWidth();
@@ -178,11 +180,12 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider
options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT));
}
portraitWidth = minWidth;
portraitHeight = maxHeight;
landscapeWidth = maxWidth;
landscapeHeight = minHeight;
WidgetDimensions ws = new WidgetDimensions();
ws.portraitWidth = minWidth;
ws.portraitHeight = maxHeight;
ws.landscapeWidth = maxWidth;
ws.landscapeHeight = minHeight;
return ws;
}
private void measureCustomView(Context context, int w, int h, View customView)
@@ -212,16 +215,18 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider
private final Context context;
private final Habit habit;
private final AppWidgetManager manager;
public RemoteViews portraitRemoteViews, landscapeRemoteViews;
public View portraitWidgetView, landscapeWidgetView;
private RemoteViews portraitRemoteViews, landscapeRemoteViews;
private View portraitWidgetView, landscapeWidgetView;
private WidgetDimensions dim;
public RenderWidgetTask(int widgetId, Context context, Habit habit,
public RenderWidgetTask(int widgetId, Context context, Habit habit, WidgetDimensions ws,
AppWidgetManager manager)
{
this.widgetId = widgetId;
this.context = context;
this.habit = habit;
this.manager = manager;
this.dim = ws;
}
@Override
@@ -232,11 +237,12 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider
portraitRemoteViews = new RemoteViews(context.getPackageName(), getLayoutId());
portraitWidgetView = buildCustomView(context, habit);
measureCustomView(context, portraitWidth, portraitHeight, portraitWidgetView);
measureCustomView(context, dim.portraitWidth, dim.portraitHeight, portraitWidgetView);
landscapeRemoteViews = new RemoteViews(context.getPackageName(), getLayoutId());
landscapeWidgetView = buildCustomView(context, habit);
measureCustomView(context, landscapeWidth, landscapeHeight, landscapeWidgetView);
measureCustomView(context, dim.landscapeWidth, dim.landscapeHeight,
landscapeWidgetView);
}
private void updateAppWidget()
@@ -260,8 +266,10 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider
{
try
{
buildRemoteViews(portraitWidgetView, portraitRemoteViews, portraitWidth, portraitHeight);
buildRemoteViews(landscapeWidgetView, landscapeRemoteViews, landscapeWidth, landscapeHeight);
buildRemoteViews(portraitWidgetView, portraitRemoteViews,
dim.portraitWidth, dim.portraitHeight);
buildRemoteViews(landscapeWidgetView, landscapeRemoteViews,
dim.landscapeWidth, dim.landscapeHeight);
updateAppWidget();
}
catch (Exception e)
@@ -273,7 +281,8 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider
super.onPostExecute(aVoid);
}
private void buildRemoteViews(View widgetView, RemoteViews remoteViews, int width, int height)
private void buildRemoteViews(View widgetView, RemoteViews remoteViews, int width,
int height)
{
widgetView.invalidate();
widgetView.setDrawingCacheEnabled(true);
@@ -287,7 +296,6 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider
int imageWidth = widgetView.getMeasuredWidth();
int imageHeight = widgetView.getMeasuredHeight();
int p[] = getPadding(width, height, imageWidth, imageHeight);
remoteViews.setViewPadding(R.id.buttonOverlay, p[0], p[1], p[2], p[3]);
}

View File

@@ -47,7 +47,7 @@ public class CheckmarkWidgetProvider extends BaseWidgetProvider
@Override
protected PendingIntent getOnClickPendingIntent(Context context, Habit habit)
{
return HabitBroadcastReceiver.buildCheckIntent(context, habit, null);
return HabitBroadcastReceiver.buildCheckIntent(context, habit, null, 2);
}
@Override

View File

@@ -156,6 +156,14 @@
style="@style/About.Item"
android:text="Mathis Chenuet (Français)"/>
<TextView
style="@style/About.Item"
android:text="Michael Faille (Français)"/>
<TextView
style="@style/About.Item"
android:text="Ivan Krušlin (Hrvatski)"/>
<TextView
style="@style/About.Item"
android:text="Marco Cavazza (Italiano)"/>
@@ -172,6 +180,10 @@
style="@style/About.Item"
android:text="Dmitriy Bogdanov (Русский)"/>
<TextView
style="@style/About.Item"
android:text="Dušan Strgar (Slovenščina)"/>
<TextView
style="@style/About.Item"
android:text="Dalecarlian (Svenska)"/>
@@ -180,6 +192,10 @@
style="@style/About.Item"
android:text="Robin (Svenska)"/>
<TextView
style="@style/About.Item"
android:text="Đorđe Vasiljević (српски)"/>
<TextView
style="@style/About.Item"
android:text="Caner Başaran (Türkçe)"/>

View File

@@ -159,4 +159,32 @@
<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' -->
<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>
<!-- 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="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>

View File

@@ -1,6 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">"Loop Habit Tracker</string>
<!-- Fuzzy -->
<string name="app_name">"Loop Habit Tracker"</string>
<string name="main_activity_title">"Zvyky"</string>
<string name="action_settings">"Nastavení"</string>
<string name="edit">"Upravit"</string>
@@ -150,4 +152,32 @@ Upomínky mohou být potvrzen, odloženy nebo smazány přímo z tvého zaříze
<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' -->
<string name="time_every">"krát za"</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_months">"Každých %d měsíců"</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="score">"Skóre"</string>
<string name="reminder_sound">"Zvuk upomínky"</string>
<!-- Appears when the user disables the reminder sound. Could also be "no sound", "mute" or "silent". -->
<string name="none">"Žádný"</string>
</resources>

View File

@@ -51,7 +51,7 @@
<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_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_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>
@@ -82,7 +82,7 @@
<string name="hint_landscape">"Vous pouvez voir plus de jours en mettant votre téléphone en mode paysage."</string>
<string name="delete_habits">"Supprimer des habitudes"</string>
<string name="delete_habits_message">"Les habitudes seront supprimées définitivement. Cette action ne peut être annulée."</string>
<string name="weekends">"Weekends"</string>
<string name="weekends">"Fin de semaine"</string>
<!-- Fuzzy -->
<string name="any_weekday">"Jours de la semaine"</string>
@@ -92,7 +92,7 @@
<string name="select_weekdays">"Sélectionner des jours"</string>
<!-- Fuzzy -->
<string name="export_to_csv">"Exporter les données (CSV)"</string>
<string name="export_to_csv">"Exporter les données dans un fichier CSV"</string>
<string name="done_label">"Fait"</string>
<string name="clear_label">"Supprimer"</string>
<string name="select_hours">"Sélectionner les heures"</string>
@@ -100,19 +100,19 @@
<!-- Short description used on the Google Play store. There is an 80-character limit. -->
<string name="store_short_description">"Créez de bonnes habitudes et suivez leur progrès au fil du temps (sans pub)"</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 open source."</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="store_feature_interface">"&lt;b&gt;Simple, beau avec une interface moderne&lt;/b&gt;
Loop a une interface minimaliste, facile à utiliser et qui suit les règles de material design."</string>
<string name="store_feature_score">"&lt;b&gt;Score d'habitude&lt;/b&gt;
En plus de montrer votre série en cours, Loop a un algorithme avancé pour calculer la force de vos habitudes. Chaque jour réussi augmente la force de l'habitude chaque jour raté la rend plus faible. Cependant, quelques jours ratés après une longue série ne détruiront pas entièrement votre progrès."</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="store_feature_statistics">"&lt;b&gt;Graphiques détaillés et statistiques&lt;/b&gt;
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="store_feature_schedules">"&lt;b&gt;Calendrier flexible&lt;/b&gt;
Supporte les habitudes quotidiennes et celles avec un calendrier plus complexes, comme 3 fois par semaine, une fois toutes les deux semaines ou un jour sur deux."</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="store_feature_reminders">"&lt;b&gt;Rappels&lt;/b&gt;
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="store_feature_opensource">"&lt;b&gt;Entièrement sans pub et open-source&lt;/b&gt;
Il n'y a absolument aucune publicité ni notification embêtante ou permissions intrusives avec cette application, et il n'y en aura jamais. L'ensemble du code source est disponible sous GPLv3."</string>
<string name="store_feature_opensource">"&lt;b&gt;Entièrement sans pub et sous licence libre&lt;/b&gt;
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="store_feature_wear">"&lt;b&gt;Optimisée pour les montres android&lt;/b&gt;
Les rappels peuvent être cochés, reportés ou supprimés directement à partir de votre montre Android"</string>
<string name="about">"À propos"</string>
@@ -158,20 +158,25 @@ Les rappels peuvent être cochés, reportés ou supprimés directement à partir
<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 app, 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 OpenOffice Calc. Ces fichiers ne peuvent être réimportés."</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">"Quarter"</string>
<string name="quarter">"Trimestre"</string>
<string name="year">"Année"</string>
<!-- Middle part of the sentence '1 time in xx days' -->
@@ -182,8 +187,8 @@ Les rappels peuvent être cochés, reportés ou supprimés directement à partir
<string name="every_x_months">"Tous les %d mois"</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="score">"Score"</string>
<string name="reminder_sound">"Son du rappel"</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>

View File

@@ -0,0 +1,179 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">"Loop Habit Tracker"</string>
<string name="main_activity_title">"Navike"</string>
<string name="action_settings">"Postavke"</string>
<string name="edit">"Uredi"</string>
<string name="delete">"Obriši"</string>
<string name="archive">"Arhiviraj"</string>
<string name="unarchive">"Poništavanje arhiviranja"</string>
<string name="add_habit">"Dodaj naviku"</string>
<string name="color_picker_default_title">"Promijeni boju"</string>
<string name="toast_habit_created">"Navika je stvorena."</string>
<string name="toast_habit_deleted">"Navike su obrisane."</string>
<string name="toast_habit_restored">"Navike su obnovljene."</string>
<string name="toast_nothing_to_undo">"Nema ništa za poništavanje."</string>
<string name="toast_nothing_to_redo">"Nema ništa za obnavljanje."</string>
<string name="toast_habit_changed">"Navika je promijenjena."</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_changed_back">"Navika je vraćena u početno stanje."</string>
<string name="toast_habit_archived">"Navike su arhivirane."</string>
<string name="toast_habit_unarchived">"Navike su vraćene iz arhive."</string>
<string name="overview">"Pregled"</string>
<string name="habit_strength">"Jačina navike"</string>
<string name="history">"Povijest"</string>
<string name="clear">"Očisti"</string>
<string name="description_hint">"Pitanje (Jesi li danas...?)"</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="repeat">"Ponovi"</string>
<string name="times_every">"puta u"</string>
<string name="days">"dani"</string>
<string name="reminder">"Podsjetnik"</string>
<string name="discard">"Odbaci"</string>
<string name="save">"Spremi"</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">"Niz"</string>
<string name="no_habits_found">"Nemate "</string>
<string name="long_press_to_toggle">"Pritisnite i držite za označavanje ili odznačavanje."</string>
<string name="reminder_off">"Isključen"</string>
<string name="validation_name_should_not_be_blank">"Naziv ne može biti prazan."</string>
<string name="validation_number_should_be_positive">"Broj mora biti pozitivan."</string>
<string name="validation_at_most_one_rep_per_day">"Možete imati najviše jedno ponavljanje po danu"</string>
<string name="create_habit">"Stvori naviku"</string>
<string name="edit_habit">"Uredi naviku"</string>
<string name="check">"Potvrdi"</string>
<string name="snooze">"Kasnije"</string>
<!-- App introduction -->
<string name="intro_title_1">"Dobrodošli"</string>
<string name="intro_description_1">"Loop Habit Tracker vam pomaže stvoriti i održavati dobre navike."</string>
<string name="intro_title_2">"Stvori neke nove navike"</string>
<string name="intro_description_2">"Svaki dan, nakon izvođenja vaše navike, postavite \"kvačicu\" u aplikaciji."</string>
<string name="intro_title_3">"Nastavite tako"</string>
<string name="intro_description_3">"Navike"</string>
<string name="intro_title_4">"Pratite vaš napredak"</string>
<string name="intro_description_4">"Detaljni grafovi vam prikazuju kako se vaše navike poboljšavaju kroz vrijeme."</string>
<string name="interval_15_minutes">"15 minuta"</string>
<string name="interval_30_minutes">"30 minuta"</string>
<string name="interval_1_hour">"1 sat"</string>
<string name="interval_2_hour">"2 sata"</string>
<string name="interval_4_hour">"4 sata"</string>
<string name="interval_8_hour">" 8 sati"</string>
<string name="pref_toggle_title">"Označi ponavljanja sa kratkim pritiskom"</string>
<string name="pref_toggle_description">"Zgodnije je, no može uzrokovati slučajna označavanja."</string>
<string name="pref_snooze_interval_title">"Interval odgađanja na podsjetnicima"</string>
<string name="pref_rate_this_app">"Ocijenite ovu aplikaciju na Google Playu"</string>
<string name="pref_send_feedback">"Pošaljite povratne informacije razvojnom programeru"</string>
<string name="pref_view_source_code">"Prikaži izvorni kod na GitHubu"</string>
<string name="pref_view_app_introduction">"Prikaži uvod u aplikaciju"</string>
<string name="links">"Veze"</string>
<string name="behavior">"Ponašanje"</string>
<string name="name">"Naziv"</string>
<string name="show_archived">"Prikaži arhivirano"</string>
<string name="settings">"Postavke"</string>
<string name="snooze_interval">"Interval odgađanja"</string>
<string name="hint_title">"Jeste li znali?"</string>
<string name="hint_drag">"Za razmještanje unosa, pritisnite i držite naziv navike, pa ih premjestite na točno mjesto."</string>
<string name="hint_landscape">"Možete vidjeti više dana prebacivanjem uređaja u vodoravnu orijentaciju."</string>
<string name="delete_habits">"Izbriši Navike"</string>
<string name="delete_habits_message">"Navike će biti trajno izbrisane. Ova radnja se ne može poništiti."</string>
<string name="weekends">"Vikendi"</string>
<string name="any_weekday">"Ponedjeljak do Petak"</string>
<string name="any_day">"Bilo koji dan u tjednu"</string>
<string name="select_weekdays">"Odaberi dane"</string>
<string name="export_to_csv">"Izvezi kao CSV"</string>
<string name="done_label">"Dovršeno"</string>
<string name="clear_label">"Očisti"</string>
<string name="select_hours">"Odaberi sate"</string>
<string name="select_minutes">"Odaberite minute"</string>
<!-- Short description used on the Google Play store. There is an 80-character limit. -->
<string name="store_short_description">"Stvorite dobre navike i pratite njihov napredak (bez reklama)"</string>
<string name="store_description_1">"Loop Vam pomaže stvoriti i održavati dobre navike kako biste ostvarili svoje dugoročne ciljeve. Detaljni grafikoni Vam pomažu kako biste bolje pratili kako napreduju Vaše navike. Loop je open source aplikacija i ne sadrži nikakav oblik reklama."</string>
<string name="store_feature_interface">"&lt;b&gt;Jednostavno, lijepo i moderno sučelje.&lt;/b&gt;
Loop sadrži minimalistično sučelje jednostavno za korištenje koje prati smjernice Material Design-a."</string>
<string name="store_feature_score">"&lt;b&gt;Rezultat navike&lt;/b&gt;
Osim prikazivanja trenutnog niza, Loop ima napredni algoritam za računanje snage vaših navika. Svako ponavljanje jača vašu naviku, a svaki propušteni dan ju čini slabijom. Međutim, par propuštenih dana nakon dugačkog niza neće u potpunosti uništiti cjelokupni napredak."</string>
<string name="store_feature_statistics">"&lt;b&gt;Detaljni grafovi i statistike&lt;/b&gt;
Jasno vidite kako su se vaše navike poboljšale kroz vrijeme u prekrasnim i detaljnim grafovima. Kliznite natrag kako bi prikazali kompletnu povijest vaših navika."</string>
<string name="store_feature_schedules">"&lt;b&gt;Fleksibilno planiranje&lt;/b&gt;
Podržava i dnevne navike i navike sa složenijim planiranjem, kao npr. 3 puta svakog tjedna; jednom svaki drugi tjedan; ili svaki drugi dan."</string>
<string name="store_feature_reminders">"&lt;b&gt;Podsjetnici&lt;/b&gt;
Stvorite individualne podsjetnike za svaku naviku, u određenom satu u danu. Lako provjeravajte, odbacite i odgodite vašu naviku direktno iz obavijesti, bez otvaranja aplikacije."</string>
<string name="store_feature_opensource">"&lt;b&gt;Potpuno bez oglasa i otvorenog izvora koda&lt;/b&gt;"</string>
<string name="store_feature_wear">"&lt;b&gt;Optimizirano za pametne satove&lt;/b&gt;
Podsjetnici se mogu provjeravati, odgoditi ili odbaciti direktno sa vašeg Android Wear sata."</string>
<string name="about">"O aplikaciji"</string>
<string name="translators">"Prevoditelji"</string>
<string name="developers">"Razvojni programeri"</string>
<!-- %s will get replaced by the version number. For example, "Versão %d" will become "Versão 1.2.0". -->
<string name="version_n">"Verzija %s"</string>
<string name="frequency">"Učestalost"</string>
<string name="checkmark">"Kvačica"</string>
<!-- This is a shorter version of "Habit Strength" -->
<string name="strength">"Snaga"</string>
<string name="best_streaks">"Najbolji nizovi"</string>
<string name="current_streaks">"Trenutni niz"</string>
<string name="number_of_repetitions">"Broj ponavljanja"</string>
<string name="last_x_days">"Zadnjih %d dana"</string>
<string name="last_x_weeks">"Zadnjih %d tjedana"</string>
<string name="last_x_months">"Zadnjih %d mjeseca"</string>
<string name="last_x_years">"Zadnjih %d godina"</string>
<!-- "All time" number of repetitions. Or number of repetitions "since the beginning". -->
<string name="all_time">"Čitavo vrijeme"</string>
<string name="every_day">"Svaki dan"</string>
<string name="every_week">"Svaki tjedan"</string>
<string name="two_times_per_week">"2 puta tjedno"</string>
<string name="five_times_per_week">"5 puta tjedno"</string>
<string name="custom_frequency">"Prilagođeno ..."</string>
<string name="help">"Pomoć i FAQ"</string>
<string name="could_not_export">"Izvoz podataka nije uspio."</string>
<string name="could_not_import">"Uvoz podataka nije uspio."</string>
<!-- Appears when the user tries to import a file which we do not support or recognize. -->
<string name="file_not_recognized">"Datoteka nije prepoznata."</string>
<string name="habits_imported">"Navike su uspješno uvezene."</string>
<string name="full_backup_success">"Sigurnosna kopija je uspješno izvezena."</string>
<string name="import_data">"Uvezi podatke"</string>
<string name="export_full_backup">"Izvezi sigurnosnu kopiju"</string>
<string name="import_data_summary">"Podržava sigurnosne kopije izvezene iz ove aplikacije, isto kao i datoteke generirane u Tickmate, HabitBull i Rewire. Pogledajte FAQ za više informacija."</string>
<string name="export_as_csv_summary">"Generira datoteke koje se mogu otvarati programima za tablice kao što su Microsoft Excel ili OpenOffice Calc. Ova datoteka se ne može uvoziti."</string>
<string name="export_full_backup_summary">"Generira datoteku koja sadrži sve vaše podatke. Ova datoteka se može uvoziti."</string>
<string name="bug_report_failed">"Generiranje izvješća o pogrešci nije uspjelo."</string>
<string name="generate_bug_report">"Generiraj izvješće o pogreški"</string>
<string name="troubleshooting">"Rješavanje problema"</string>
<string name="help_translate">"Pomozite prevesti ovu aplikaciju"</string>
<string name="night_mode">"Noćni način"</string>
<string name="use_pure_black">"Koristi crnu boju za noćni način"</string>
<string name="pure_black_description">"Zamjenjuje sivu pozadinu sa crnom u noćnom načinu. To smanjuje potrošnju bateriju na uređajima s AMOLED zaslonima."</string>
<string name="interface_preferences">"Sučelje"</string>
<string name="reverse_days">"Obrnuti poredak dana"</string>
<string name="reverse_days_description">"Prikaži dane obrnutim redom na glavnom zaslonu"</string>
<string name="day">"Dan"</string>
<string name="week">"Tjedan"</string>
<string name="month">"Mjesec"</string>
<!-- Three-month period -->
<string name="quarter">"Četvrtina"</string>
<string name="year">"Godina"</string>
<!-- Middle part of the sentence '1 time in xx days' -->
<!-- Middle part of the sentence '1 time in xx days' -->
<string name="time_every">"put svakih"</string>
<string name="every_x_days">"Svaka %d dana"</string>
<string name="every_x_weeks">"Svaka %d tjedna"</string>
<string name="every_x_months">"Svaka %d mjeseca"</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="score">"Rezultat"</string>
<string name="reminder_sound">"Zvuk podsjetnika"</string>
<!-- Appears when the user disables the reminder sound. Could also be "no sound", "mute" or "silent". -->
<string name="none">"Nijedan"</string>
</resources>

View File

@@ -149,4 +149,32 @@ Android Wear 端末から直接、リマインダーをチェック、スヌー
<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' -->
<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>
<!-- 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="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>

View File

@@ -0,0 +1,180 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">"Loop Sledilnik Navad"</string>
<string name="main_activity_title">"Navade"</string>
<string name="action_settings">"Nastavitve"</string>
<string name="edit">"Spremeni"</string>
<string name="delete">"Izbriši"</string>
<string name="archive">"Arhiviraj"</string>
<string name="unarchive">"Odarhiviraj"</string>
<string name="add_habit">"Dodaj navado"</string>
<string name="color_picker_default_title">"Spremeni barvo"</string>
<string name="toast_habit_created">"Navada ustvarjana."</string>
<string name="toast_habit_deleted">"Navada izbrisana."</string>
<string name="toast_habit_restored">"Navada obnovljena."</string>
<string name="toast_nothing_to_undo">"Nič za razveljaviti."</string>
<string name="toast_nothing_to_redo">"Nič za ponovno opraviti."</string>
<string name="toast_habit_changed">"Navada spremenjena."</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_changed_back">"Navada obnovljena."</string>
<string name="toast_habit_archived">"Navada arhivirana."</string>
<string name="toast_habit_unarchived">"Navada dearhivirana."</string>
<string name="overview">"Pregled"</string>
<string name="habit_strength">"Moč navade"</string>
<string name="history">"Zgodovina"</string>
<string name="clear">"Počisti"</string>
<string name="description_hint">"Vprašanje (Ste ... danes?)"</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="repeat">"Ponovi"</string>
<string name="times_every">"krat v"</string>
<string name="days">"dni"</string>
<string name="reminder">"Opomnik"</string>
<string name="discard">"Zavrzi"</string>
<string name="save">"Shrani"</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">"Serije"</string>
<string name="no_habits_found">"Nimate aktivnih navad"</string>
<string name="long_press_to_toggle">"Pritisnite-in-držite, da označite ali odznačite"</string>
<string name="reminder_off">"Izključeno"</string>
<string name="validation_name_should_not_be_blank">"Ime ne more biti prazno."</string>
<string name="validation_number_should_be_positive">"Številka mora biti pozitivna."</string>
<string name="validation_at_most_one_rep_per_day">"Na dan lahko imate kvečjemu eno ponovitev"</string>
<string name="create_habit">"Ustvari navado"</string>
<string name="edit_habit">"Spremeni navado"</string>
<string name="check">"Označi"</string>
<string name="snooze">"Kasneje"</string>
<!-- App introduction -->
<string name="intro_title_1">"Dobrodošli"</string>
<string name="intro_description_1">"Loop Sledilnik Navad vam pomaga ustvariti in vzdrževati dobre navade."</string>
<string name="intro_title_2">"Ustvari nekaj novih navad"</string>
<string name="intro_description_2">"Vsak dan, potem ko opravite vašo navado, vnesite kljukico v aplikacijo."</string>
<string name="intro_title_3">"Kar tako naprej"</string>
<string name="intro_description_3">"Dalj časa dosledno izvedene Navade si bodo zaslužile polno zvezdo."</string>
<string name="intro_title_4">"Spremljaj svoj napredek"</string>
<string name="intro_description_4">"Podrobni grafi vam pokažejo kako so se skozi čas vaše navede izboljšale."</string>
<string name="interval_15_minutes">"15 minut"</string>
<string name="interval_30_minutes">"30 minut"</string>
<string name="interval_1_hour">"1 ura"</string>
<string name="interval_2_hour">"2 uri"</string>
<string name="interval_4_hour">"4 ure"</string>
<string name="interval_8_hour">"8 ur"</string>
<string name="pref_toggle_title">"Preklopi ponovitve s kratkim pritiskom"</string>
<string name="pref_toggle_description">"Bolj priročno ampak lahko povzroči nenamerne preklapljanje."</string>
<string name="pref_snooze_interval_title">"Interval dremeža na opomnikih"</string>
<string name="pref_rate_this_app">"Oceni to aplikacijo na Google Play"</string>
<string name="pref_send_feedback">"Pošlji povratne informacije razvijalcem"</string>
<string name="pref_view_source_code">"Poglej izvorno kodo na GitHub"</string>
<string name="pref_view_app_introduction">"Poglej uvod aplikacije"</string>
<string name="links">"Povezave"</string>
<string name="behavior">"Obnašanje"</string>
<string name="name">"Ime"</string>
<string name="show_archived">"Pokaži arhiv"</string>
<string name="settings">"Nastavitve"</string>
<string name="snooze_interval">"Interval dremeža"</string>
<string name="hint_title">"Ali ste vedeli?"</string>
<string name="hint_drag">"Če želite preurediti vnose, pritisnite-in-držite na ime navade, nato pa jo povlecite na željeno mestu."</string>
<string name="hint_landscape">"Ogledate si lahko več dni, s tem da telefon postavite v ležeči načinu."</string>
<string name="delete_habits">"Izbriši Navade"</string>
<string name="delete_habits_message">"Navade bodo trajno izbrisane. Te operacije ni možno razveljaviti."</string>
<string name="weekends">"Vikendi"</string>
<string name="any_weekday">"Ponedeljek do Petka"</string>
<string name="any_day">"Vsak dan v tednu"</string>
<string name="select_weekdays">"Izberi dni"</string>
<string name="export_to_csv">"Izvozi v CSV"</string>
<string name="done_label">"Končano"</string>
<string name="clear_label">"Počisti"</string>
<string name="select_hours">"Izberi ure"</string>
<string name="select_minutes">"Izberi minute"</string>
<!-- Short description used on the Google Play store. There is an 80-character limit. -->
<string name="store_short_description">"Ustvarite dobre navade in spremljajte njihov napredek skozi čas (brez reklam)"</string>
<string name="store_description_1">"Loop vam pomaga ustvariti in vzdrževati dobre navade, kar vam omogoča, da bi dosegli svoje dolgoročne cilje. Podrobni grafi in statistike vam pokažejo kako so se vaše navade skozi čas izboljšale. Je popolnoma brez oglasov in odprtokodno."</string>
<string name="store_feature_interface">"&lt;b&gt;Enostaven, lep in sodoben vmesnik&lt;/b&gt;
Loop ima minimalističen vmesnik, ki je preprost za uporabo in sledi smernicam Material design."</string>
<string name="store_feature_score">"&lt;b&gt;Ocena navade&lt;/b&gt;
Poleg tega, da vam prikazuje vaše trenutne serije, ima Loop napreden algoritem za izračun moči vaših navad. Vsaka ponovitev naredi vašo navado močnejšo in vsak zgrešen dan jo naredi šibkejšo. Nekaj zgrešenih dni po dolgi seriji, pa vendar ne bo popolnoma uničilo vašega celotnega napredka."</string>
<string name="store_feature_statistics">"&lt;b&gt;Podrobni grafi in statistike&lt;/b&gt;
Z lepimi in natančnimi grafi, jasno poglejte, kako so se skozi čas vaše navade izboljšale. Da boste videli celotno zgodovino svojih navad se pomaknite nazaj."</string>
<string name="store_feature_schedules">"&lt;b&gt;Prilagodljivi urniki&lt;/b&gt;
Podpira tako vsakdanje navade in navade z bolj zapletenimi urniki, kot so 3-krat na teden; enkrat vsak drugi teden; ali vsak drugi dan."</string>
<string name="store_feature_reminders">"&lt;b&gt;Opomniki&lt;/b&gt;
Ustvari individualni opomnik za vsako navado, pri izbrani uri dneva. Enostavno preverite, zavrzite ali dajte v dremež svoje navade neposredno iz obvestila, ne da bi odprli aplikacijo."</string>
<string name="store_feature_opensource">"&lt;b&gt;Popolnoma brez oglasov in odprtokodno&lt;/b&gt;
V tej aplikaciji ni absolutno nobene reklame, sitnih obvestil ali vsiljivih dovoljenj in jih tudi nikoli ne bo. Celotna izvorna koda je na razpolago pod GPLv3."</string>
<string name="store_feature_wear">"&lt;b&gt;Optimirano za pametne ure&lt;/b&gt;
Opomnike lahko preverite, jih date v dremež ali pa zavrzite neposredno iz vaše Android Wear ure."</string>
<string name="about">"O aplikaciji"</string>
<string name="translators">"Prevajalci"</string>
<string name="developers">"Razvijalci"</string>
<!-- %s will get replaced by the version number. For example, "Versão %d" will become "Versão 1.2.0". -->
<string name="version_n">"Verzija %s"</string>
<string name="frequency">"Pogostost"</string>
<string name="checkmark">"Kljukica"</string>
<!-- This is a shorter version of "Habit Strength" -->
<string name="strength">"Moč"</string>
<string name="best_streaks">"Najboljša serija"</string>
<string name="current_streaks">"Trenutna serija"</string>
<string name="number_of_repetitions">"Število ponovitev"</string>
<string name="last_x_days">"Zadnjih %d dni"</string>
<string name="last_x_weeks">"Zadnjih %d tednov"</string>
<string name="last_x_months">"Zadnjih %d mesecev"</string>
<string name="last_x_years">"Zadnjih %d let"</string>
<!-- "All time" number of repetitions. Or number of repetitions "since the beginning". -->
<string name="all_time">"Ves čas"</string>
<string name="every_day">"Vsak dan"</string>
<string name="every_week">"Vsak teden"</string>
<string name="two_times_per_week">"2 krat na teden"</string>
<string name="five_times_per_week">"5 krat na teden"</string>
<string name="custom_frequency">"Po meri ..."</string>
<string name="help">"Pomoč &amp; Pogosta vprašanja"</string>
<string name="could_not_export">"Neuspešen izvoz podatkov."</string>
<string name="could_not_import">"Neuspešen uvoz podatkov."</string>
<!-- Appears when the user tries to import a file which we do not support or recognize. -->
<string name="file_not_recognized">"Datoteka ni bila prepoznana."</string>
<string name="habits_imported">"Navade uspešno uvožene."</string>
<string name="full_backup_success">"Popolna varnostna kopija uspešno izvožena."</string>
<string name="import_data">"Uvozi podatke"</string>
<string name="export_full_backup">"Izvozi popolno varnostno kopijo"</string>
<string name="import_data_summary">"Podpira polne varnostne kopije izvožene iz te aplikacije, kakor tudi datoteke, ki jih ustvari Tickmate, HabitBull ali Rewire. Glej Pogosta vprašanja za več informacij."</string>
<string name="export_as_csv_summary">"Generirane datoteke, ki se lahko odprejo s programsko opremo za preglednice, kot je Microsoft Excel ali OpenOffice Calc. Te datoteke ni mogoče uvoziti nazaj."</string>
<string name="export_full_backup_summary">"Ustvari datoteko, ki vsebuje vse podatke. To datoteko lahko nato uvozite nazaj."</string>
<string name="bug_report_failed">"Neuspeh pri ustvarjanju poročila o napakah"</string>
<string name="generate_bug_report">"Ustvari poročilo o napakah"</string>
<string name="troubleshooting">"Odpravljanje napak"</string>
<string name="help_translate">"Pomagajte prevesti to aplikacijo"</string>
<string name="night_mode">"Nočni način"</string>
<string name="use_pure_black">"Uporabite popolno črnino v nočnem načinu"</string>
<string name="pure_black_description">"Zamenja siva ozadja s popolno črnino v nočnem načinu. Zmanjša porabo baterije na telefonih z AMOLED zasloni."</string>
<string name="interface_preferences">"Vmesnik"</string>
<string name="reverse_days">"Zamenjaj vrstni red dni"</string>
<string name="reverse_days_description">"Prikaži dni v obratnem vrstnem redu na glavnem zaslonu"</string>
<string name="day">"Dan"</string>
<string name="week">"Teden"</string>
<string name="month">"Mesec"</string>
<!-- Three-month period -->
<string name="quarter">"Četrtletje"</string>
<string name="year">"Leto"</string>
<!-- Middle part of the sentence '1 time in xx days' -->
<!-- Middle part of the sentence '1 time in xx days' -->
<string name="time_every">"enkrat na"</string>
<string name="every_x_days">"Vsakih %d dni"</string>
<string name="every_x_weeks">"Vsakih %d tednov"</string>
<string name="every_x_months">"Vsakih %d mesecev"</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="score">"Ocena"</string>
<string name="reminder_sound">"Zvok opomnika"</string>
<!-- Appears when the user disables the reminder sound. Could also be "no sound", "mute" or "silent". -->
<string name="none">"Noben"</string>
</resources>

View File

@@ -0,0 +1,180 @@
<?xml version="1.0" encoding="utf-8"?>
<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>
<!-- 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_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>
<!-- 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="repeat">"Понови"</string>
<string name="times_every">"пута у"</string>
<string name="days">"дана"</string>
<string name="reminder">"Подсетник"</string>
<string name="discard">"Одбаци"</string>
<string name="save">"Сачувај"</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">"Низови"</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">"Оцени апликацију"</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="show_archived">"Прикажи архивиране"</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>
<!-- Short description used on the Google Play store. There is an 80-character limit. -->
<string name="store_short_description">"Створите здраве навике и пратите напредак (без огласа)."</string>
<string name="store_description_1">"Loop вам помаже да створите и одржавате здраве навике, самим тим и да достигнете дугорочне циљеве. Детаљна статистика и графикони показују вам колико су се ваше навике временом побољшале. Апликација је отвореног кода и не садржи огласе."</string>
<string name="store_feature_interface">"&lt;b&gt;Једноставан, леп и модеран дизајн&lt;/b&gt;
Loop има минималистички интерфејс који је једноставан за коришћење и прати смернице за материјални дизајн."</string>
<string name="store_feature_score">"&lt;b&gt;Оцена навике&lt;/b&gt;
Поред приказа тренутног низа, Loop поседује напредни алгоритам за израчунавање снаге ваших навика. Ваша навика са сваким понављањем постаје јача, а са сваким пропуштеним даном слабија. Неколико пропуштених дана након дугог низа, пак, неће у потпуности упропастити ваш резултат."</string>
<string name="store_feature_statistics">"&lt;b&gt;Детаљни графикони и статистика&lt;/b&gt;
Пратите свој напредак уз лепе и детаљне графиконе. Вратите се уназад да бисте видели целу историју навика."</string>
<string name="store_feature_schedules">"&lt;b&gt;Флексибилни распоред&lt;/b&gt;
Подржава како дневне навике, тако и оне са сложенијим понављањем (трипут недељно, једанпут сваке друге недеље, сваки други дан и сл.)."</string>
<string name="store_feature_reminders">"&lt;b&gt;Подсетници&lt;/b&gt;
Направите појединачни подсетник за сваку навику у жељено доба дана. С лакоћом маркирајте, одложите или откажите навику директно из обавештења, без отварања апликације."</string>
<string name="store_feature_opensource">"&lt;b&gt;У потпуности отвореног кода и без огласа&lt;/b&gt;
Апликација не садржи никакве огласе, досадна обавештења или наметљиве дозволе; никада и неће. Изворни кôд је у целости доступан под лиценцом GPLv3."</string>
<string name="store_feature_wear">"&lt;b&gt;Оптимизовано за паметне сатове&lt;/b&gt;
Навике можете маркирати, одложити или отказати директно помоћу Android Wear сата."</string>
<string name="about">"О апликацији"</string>
<string name="translators">"Преводиоци"</string>
<string name="developers">"Програмери"</string>
<!-- %s will get replaced by the version number. For example, "Versão %d" will become "Versão 1.2.0". -->
<string name="version_n">"Верзија %s"</string>
<string name="frequency">"Учесталост"</string>
<string name="checkmark">"Штрикла"</string>
<!-- This is a shorter version of "Habit Strength" -->
<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>
<!-- "All time" number of repetitions. Or number of repetitions "since the beginning". -->
<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">"Помоћ"</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">"Направите датотеку коју можете отворити у програму за рад са табелама (нпр. 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>
<!-- 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' -->
<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>
<!-- 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="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>

View File

@@ -26,7 +26,9 @@
<dimen name="history_max_font_size">@dimen/regularTextSize</dimen>
<dimen name="regularTextSize">16sp</dimen>
<dimen name="smallTextSize">14sp</dimen>
<dimen name="smallerTextSize">12sp</dimen>
<dimen name="tinyTextSize">10sp</dimen>
<dimen name="habitNameWidth">160dp</dimen>
<dimen name="progressbarOffset">-10dp</dimen>
<dimen name="checkmarkWidget_heightBreakpoint">55dp</dimen>
</resources>

View File

@@ -3,6 +3,7 @@ buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
}
@@ -11,6 +12,7 @@ buildscript {
allprojects {
repositories {
jcenter()
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
}