This commit is contained in:
GRiker 2012-05-04 04:11:52 -06:00
commit 8d15864ac7
167 changed files with 16469 additions and 13901 deletions

View File

@ -19,6 +19,75 @@
# new recipes: # new recipes:
# - title: # - title:
- version: 0.8.50
date: 2012-05-04
new features:
- title: "Tweak Book: Allow tweaking of KF8 MOBI files. Useful to fine-tune the result of a conversion. Right click on the book and select Tweak Book to use the feature. Note that tweaking a MOBI file that contains both KF8 and older MOBI6 will cause the MOBI6 version to be discarded."
- title: "AZW3 output plugin. This output plugin generates pure KF8 mobi files. These only work on the Kindle Fire and Kindle Touch with latest firmware."
- title: "Conversion: Allow easy re-ordering of the search and replace expressions in the conversion dialog. Also apply the expressions in the same order that they were entered when doing the conversion."
- title: "Automatically add the Tag 'Sample Book' when an Amazon sample is added to calibre"
- title: "FB2 Input: Better handling of inline images."
tickets: [989869]
bug fixes:
- title: "KF8 Output: Fix section to section jumps not working for documents with multi-level ToCs"
- title: "EPUB Input: Handle the case of the metadata ToC containing a reference to the cover HTML file."
tickets: [993812]
- title: "CHM Input: Handle files with deeply nested markup and non html files listed at the start of the manifest."
tickets: [993607]
- title: "KF8 Output: Workaround Kindle Touch bug that causes the book to be rendered as black pages when a height is specified for <body>"
- title: "Fix regression in 0.8.49 that broke italics detection in heuristic processing on 32-bit systems."
tickets: [991380]
- title: "KF8 Output: Fix joint MOBI6/KF8 books not being recognized as MOBI files by older Kindles"
- title: "KF8 Output: Fix errors when processing documents with HTML comments and/or XML processing instructions"
- title: "Get Books: Amazon fix prices not being found. B&N fix details link. ebooks.com: fix cover image. Website changes to various EU stores"
- title: "FB2 Input: More robust base64 decoding to handle embedded images that are incorrectly encoded."
tickets: [990929]
- title: "Fix scrolling with the cover browser updating only the selection in the book list, not the current book."
tickets: [990881]
- title: "Save to Disk: Do not run out memory when saving very large files on systems with low RAM."
tickets: [990741]
- title: "FB2 Output: Use 2 letter language codes in preference to 3-letter ones to not break poorly implemented FB2 readers"
tickets: [990026]
- title: "EPUB Input: Auto set the media-type for OPF manifest entries with an empty media-type"
improved recipes:
- National Post
- Daily Mirror
- Sun
- Newsweek Polska
- Max-Planck
- derStandard
- tweakers.net
new recipes:
- title: George Monbiot
author: Darko Miletic
- title: El Mundo
author: atordo
- title: AraInfo and Diagonal
author: Ruben Pollan
- version: 0.8.49 - version: 0.8.49
date: 2012-04-27 date: 2012-04-27

19
recipes/ara_info.recipe Normal file
View File

@ -0,0 +1,19 @@
#!/usr/bin/env python
__license__ = 'GPL v3'
__copyright__ = 'Ruben Pollan <meskio@sindominio.net>'
__docformat__ = 'restructuredtext en'
from calibre.web.feeds.news import BasicNewsRecipe
class AdvancedUserRecipe1335656316(BasicNewsRecipe):
title = u'AraInfo.org'
__author__ = 'Ruben Pollan'
description = 'Regional newspaper from Aragon'
language = 'es'
oldest_article = 7
max_articles_per_feed = 100
auto_cleanup = True
cover_url = u'http://arainfo.org/wordpress/wp-content/uploads/2011/10/logo-web_alta.jpg'
feeds = [(u'Movimientos', u'http://arainfo.org/category/movimientos/feed/'), (u'Econom\xeda', u'http://arainfo.org/category/economia/feed/'), (u'Ecolog\xeda', u'http://arainfo.org/category/ecologia/feed/'), (u'Culturas', u'http://arainfo.org/category/culturas/feed/'), (u'Altavoz', u'http://arainfo.org/category/altavoz/feed/')]

View File

@ -24,231 +24,122 @@ class Comics(BasicNewsRecipe):
feeds = [] feeds = []
for title, url in [ for title, url in [
("9 Chickweed Lane", "http://comics.com/9_chickweed_lane"), ("9 Chickweed Lane", "http://comics.com/9_chickweed_lane"),
# "Three generations of family with strong characters and flights of fancy . A rarity in the comics, 9 Chickweed Lane spotlights music and dance with superb artistry that complements Brooke McEldowney\u2019s strong-minded characters. A popular comic strip about three generations of family, 9 Chickweed Lane is the story of a young woman who moves away from home to perform with a prestigious metropolitan ballet company in New York City. She is followed there by her childhood friend and recent love interest. McEldowney knows his territory. He attended New York City's Juilliard School, and later studied and performed at the Mozarteum in Salzburg, Austria."
("Agnes", "http://comics.com/agnes"), ("Agnes", "http://comics.com/agnes"),
# "Agnes is a young girl with an imagination just a bit too big for her head. She lives with her grandma in a house trailer in their community called \"The People's Court.\" The spillover is handled by her best friend, Trout, a realist who helps manage their journey up the river to adulthood ... but river journeys are slow when you're both stuck in boot-sucking mud! The river of life sometimes leaves a lot of messy puddles. It's a scramble through youth's treacherous minefield. Agnes has big dreams. Sometimes she wakes up in the middle, sometimes she sleeps right through them. Everybody has dreams, and that's why everybody can identify with her!"
("Alley Oop", "http://comics.com/alley_oop"), ("Alley Oop", "http://comics.com/alley_oop"),
# "The adventures of an irrepressible time-traveling caveman. Alley Oop, the classic caveman comic strip created in 1933 by V.T. Hamlin, is drawn by Jack Bender and written by Carole Bender. The strip revolves around the irrepressible Alley Oop, who travels from prehistoric Moo all the way to the 21st century in his friend Doc Wonmug's time machine. Other favorite regulars in the strip include King Guz and Queen Umpa of Moo, Wonmug's assistants Oscar and Ava, and Alley Oop's girlfriend Ooola. "
("Andy Capp", "http://comics.com/andy_capp"), ("Andy Capp", "http://comics.com/andy_capp"),
# "Andy Capp, the irrepressible pub dweller, has been making readers smile since 1958. Created by Reg Smythe, Andy Capp first appeared in the Daily Mirror newspapers of England in 1958 as a cartoon panel. It quickly became a favorite throughout the country, as readers everywhere could identify with the good-for-nothing Andy and his smart-mouthed wife, Flo."
("Arlo & Janis", "http://comics.com/arlo&janis"), ("Arlo & Janis", "http://comics.com/arlo&janis"),
# "A couple of \u201860s kids raising a teenage son in a complicated modern world. Still romantic after all these years, Arlo and Janis are dreamers who still have to do the household chores. Jimmy Johnson's unique humor and remarkable insight have made Arlo and Janis one of America's favorite comic couples. Taking a funny, realistic look at marriage and parenthood, Johnson portrays their everyday lives as they raise their adolescent son, Gene. As parents raising a teenager, Arlo and Janis have to face the fact that they're not the young ones anymore. A warm, offbeat family comedy with an adult perspective, Arlo & Janis has earned a loyal following of married couples, working parents and people who enjoy Johnson's dry, incisive wit. "
("B.C.", "http://comics.com/bc"), ("B.C.", "http://comics.com/bc"),
# "Set in prehistoric times, it features a group of cavemen and anthropomorphic animals from various geologic eras. B.C. is an American newspaper comic strip created in 1958, written and drawn by Johnny Hart until his death in 2007. Hart died on April 7, 2007 after suffering a stroke at his home in Nineveh, New York, but the strip continues. Both Hart's daughter Perri Hart and his grandson Mason Mastroianni were involved with the strip prior to his death and have taken over the drawing and writing duties, with contributions by Mick Mastroianni."
("Ballard Street", "http://comics.com/ballard_street"), ("Ballard Street", "http://comics.com/ballard_street"),
# "Featuring Scooter, the dog who loves to take baths, but only with his scuba gear. Cartoonist Jerry Van Amerongen is at his best, creating an assortment of panels that have one thing in common: an intense level of absurdity! In May of 2006 Ballard Street was awarded the Best Newspaper Cartoon Panel Of The Year Award by the National Cartoonist Society."
# ("Ben", "http://comics.com/ben"), # ("Ben", "http://comics.com/ben"),
# "Ben does away with the stereotypes of seniors being cranky, miserable and having limited interests and is a more realistic portrayal of older people as active, healthy and in love after all these years. BEN is a new comic strip about family life as seen through the eyes of a retired couple who have offered to babysit their first grandson since their daughter went back to work. Artist Daniel Shelton touches on everyday life and today's issues with humor and affection, bringing to life characters in which we are sure to recognize ourselves and our families. Born in 1965 in Quebec's Eastern Townships, Daniel Shelton knew very early on that he wanted to write and draw his own daily comic strip. Creating and publishing comics throughout his teens, he was awarded two consecutive grants from the Cultural Ministry to study at the Joe Kubert school of Cartooning in New Jersey and School of Visual Arts in New York. \"Ben\" was first published six years ago and has since appeared in newspapers across North America and Asia, in English and French. Two compilation books have been published, winning Shelton an award at the Quebec International Comics Convention. Shelton lives in Hudson, Quebec, with his wife Lorina, his three sons Nicholas (9), Michael (5) and Alec (1) and their golden retriever Max."
# ("Betty", "http://comics.com/betty"), # ("Betty", "http://comics.com/betty"),
# "A working-class hero whose spirit cannot be broken by the endless series of outrages that make up modern life. Gary Delainey writes and Gerry Rasmussen draws, and together this cartooning duo from Alberta, Canada creates Betty, a smart, savvy comic character who is unapologetically ordinary, happy and female. Betty is true modern woman - a wife, mother and working woman. She is a confident, witty lady juggling the demands of family and career."
# ("Big Nate", "http://comics.com/big_nate"), # ("Big Nate", "http://comics.com/big_nate"),
# "The misadventures of an energetic sixth grader who is also an aspiring cartoonist. Aspiring cartoonist Nate Wright is 11 years old, four-and-a-half feet tall, and the all-time record holder for detentions in school history. He's a self-described genius and sixth grade Renaissance Man. Nate, who lives with his dad and older sister, enjoys pestering his family and teachers with his sarcasm. To draw Big Nate, Lincoln Peirce relies on memories of his own childhood and the experiences he collected teaching art at a New York City high school. Peirce occasionally turns his pen over to his creation, and readers get to see life through Nate's eyes as he doodles his adventures in his notebook. Born in Iowa, Peirce grew up in New Hampshire and began creating his own comic strips in the sixth grade. He has also created animated shorts for the Cartoon Network."
# ("Brevity", "http://comics.com/brevity"), # ("Brevity", "http://comics.com/brevity"),
# "It\u2019s not only the soul of wit; it's also sharply intelligent, amusingly idiosyncratic and uproariously funny. It's also not your normal comics fare. In the hands of Guy Endore-Kaiser and Rodd Perry, Brevity is sharply intelligent, amusingly idiosyncratic and often uproariously funny. The mix of Guy's sly sense of humor and Rodd's ingeniously understated art makes this feature unlike anything else in the comics today."
# ("Candorville", "http://comics.com/candorville"), # ("Candorville", "http://comics.com/candorville"),
# "Brutally frank yet evenhanded, Candorville explores social issues, politics and current events. In an upbeat way. Honest. A diverse group of friends living in the inner city, exploring issues such as bigotry, poverty, homelessness, biracialism, the culture of victimhood, youth and personal responsibility. This includes politics and current events seen through the eyes of its main characters; Lemont Brown, a young aspiring writer; Susan Garcia, a young woman working in the corporate world; and Clyde, an angry young man who makes the wrong choices in life. Darrin Bell attended the University of California Berkeley. His cartoons have appeared in the Los Angeles Times, San Francisco Chronicle, The New York Times and several other publications, as well as on MTV, CNN, CBS, NBC and ABC. The cartoons come from a black\/minority perspective but comment on a wide range of issues."
# ("Cheap Thrills", "http://comics.com/cheap_thrills"), # ("Cheap Thrills", "http://comics.com/cheap_thrills"),
# "Tasty recipes in comic-strip form that are easy enough for the novice cook, but delicious enough to please the more experienced chef. Cheap Thrills Cuisine offers recipes, whipped up by Chef Peppi, the alter-ego of chef Bill Lombardo and cartoonist Thach Bui. "
# ("Committed", "http://comics.com/committed"), # ("Committed", "http://comics.com/committed"),
# "Committed is an irreverent comic panel about modern family life when both parents work. Michael Fry created Committed for the alternative weekly The Houston Press in 1991 and United Feature Syndicate began distributing it nationally in April 1994. Committed currently appears in newspapers nationwide. Committed is full of wry humor, warm heart and wild cynicism and has found its way onto that most coveted of newspaper comic strip display spots -- refrigerator doors from Maine to Malibu. Fry attended Baylor University in Waco, Tex., and holds a bachelor of arts in history from the University of Texas at Austin. He was an editorial cartoonist for the student newspapers at both universities, and his first professional cartoon was published in Playboy. He currently creates the suburban farce Over the Hedge with T Lewis for United Feature Syndicate and the monthly \"Out the Window\" cartoon for Windows Sources magazine. His published works include five cartoon anthologies, What I Want to Be When They Grow Up: The First Collection of Committed (Andrews and McMeel, 1996), Over the Hedge with T Lewis (Andrews and McMeel, 1996), When I Was Short (Avon Books, 1992), Scotty: Born to Be Mild (Fine Toon Books, 1989) and Scotty's Houston: The View From Cafe Phil (Loud Books, 1988)."
# ("Cow & Boy", "http://comics.com/cow&boy"), # ("Cow & Boy", "http://comics.com/cow&boy"),
# "The unlikely friendship of a boy and his cow. This beautifully drawn, strikingly funny strip by Mark Leiknes stars Billy, a regular boy who enjoys fishing, biking and hanging out with his best friend named Cow, who just happens to have four stomachs and a set of udders. Billy's dad is a farmer who enjoys a hard day's work and wishes his only son had not befriended a cow. Billy's mom is very loving, but has no room in her house for 800-pound animals. Billy's sister, Tracy, is a teenager who gets embarrassed by her brother and his cow. Martin, Billy's nerdy friend, enjoys hanging out with Billy and Cow. "
# ("Daddy's Home", "http://comics.com/daddys_home"), # ("Daddy's Home", "http://comics.com/daddys_home"),
# "Peter is a stay-at-home Dad, freelance copywriter and would-be novelist -- pretty much in that order. Daddy's Home cast of characters: Peter is a stay-at-home Dad, freelance copywriter and would-be novelist -- pretty much in that order. He works hard, yet believes strongly in the power of sleeping in, and his erratic schedule never prevents him from performing his duties as a husband and father \u2026 not intentionally, anyway. Peter's wife Peggy is a smart, educated woman with a full-time job, who likes things organized a certain way. And by \u201ca certain way,\u201d she means \"her way.\" Their son Elliot is a smart kid on a crusade for knowledge. He's close to his parents, especially his Dad, and relies on both of them for answers to his boundless cache of questions. He also likes to learn things on his own, through trial and error -- a tendency his parents encourage when it's not life threatening. "
# ("Dog eat Doug", "http://comics.com/dog_eat_doug"), # ("Dog eat Doug", "http://comics.com/dog_eat_doug"),
# "Dog Eat Doug is inspired by a husband's life as a homeowner and father of a chocolate Labrador puppy. With the support of his wife, Tammy, and the inspiration of his dog, Sophie, Brian Anderson created Dog eat Doug."
# ("Drabble", "http://comics.com/drabble"), # ("Drabble", "http://comics.com/drabble"),
# "Silly family antics and goofball humor, the Drabble family tickles readers' funny bones with outrageous antics. Kevin Fagan's lighthearted family strip chronicles the zany mishaps of his offbeat characters, especially goofball college student Norman Drabble and his donut-eating father Ralph. One of the best-loved families in the comics, the Drabble clan also includes smart younger brother Patrick, precocious little sister Penny, and June, the Drabble matriarch best known as \"Honeybunch.\" From Norm's relentless pursuit of his dream girl to Ralph's hilarious power struggles with Oogie the cat, Drabble is always full of witty, wacky and wonderful humor. The genuine love that keeps the Drabbles from driving each other crazy makes it one of the best family comic strips around, and the loony things they do make it one of the funniest."
# ("F Minus", "http://comics.com/f_minus"), # ("F Minus", "http://comics.com/f_minus"),
# "Though short on life lessons, precious moments, and pearls of wisdom, this quirky comic strip is profoundly funny. F Minus, by Tony Carrillo, is a comic strip that begs the question, \"Why are we here?\" \"What is life all about?\" and \"Can I take only one shower per week if it's seven times the normal length?\" This very funny, very quirky comic strip was chosen by more than 200,000 college students as the winner of the \"mtvU Strips\" contest. F Minus is a strip short on life lessons, precious moments, and pearls of wisdom. Instead, it tackles life's serious issues, pins them to the ground and steals their lunch money. Then it feels a little bit guilty and gives some of it back."
# ("Family Tree", "http://comics.com/family_tree"), # ("Family Tree", "http://comics.com/family_tree"),
# "Modern family life is a bigger challenge than saving the planet. Pulitzer Prize-winning editorial cartoonist Signe Wilkinson brings her unique style and famous irreverence to the comics with Family Tree, a sophisticated contemporary family comedy. Ames, Maggie, Twig and Teddy Tree are living green \u2013 but modern family life could prove to be a bigger challenge than saving the planet. Tackling everything from shopaholic teens to the real differences between girls and boys, Family Tree is a groundbreaking family comedy that draws on Wilkinson\u2019s wit (and her years of close personal experience with teenagers). Wilkinson is one of contemporary America\u2019s few women cartoonists and she was the first woman to win the Pulitzer for editorial cartooning, in 1992. Wilkinson values her intensely unremarkable family life, which is marked by her interest in growing outdoor lilies, killing indoor orchids, finding an easy way to match her husband\u2019s socks and trying to figure out why Paris Hilton is famous."
# ("Farcus", "http://comics.com/farcus"), # ("Farcus", "http://comics.com/farcus"),
# "Take an ordinary work situation, add a pinch of satire, and let it stew. Farcus was launched by Universal Press Syndicate in 1991 and appeared in more than 250 newspapers worldwide before the creators decided to put the comic \"on hold\" as they pursued other creative projects. Coulthart is now co-founder of Funbag Animation Studios, which produces television programs such as Toad Patrol, The Mole Sisters, and For Better or for Worse. Waisglass is CEO of LaughingStock Licensing Inc., a strategic trademark licensing management firm of popular entertainment brands. David Waisglass, co-creator of FARCUS, draws on a wide range of work experience to come up with comic ideas. He was a journalist, graphic artist, union organizer, filmmaker, HR manager, and management consultant -- all before the age 30. \u201cI love learning new things,\u201d says Waisglass, but agrees that it\u2019s hard to beat cartooning. Gordon Coulthart says he always knew that someday he would be a cartoonist. In addition to developing characters and entertainment properties for television, Gordon supports two children and several local pubs. \"It\u2019s been a a lot of fun,\" say the comic duo about their partnership and working relationship. \u201cThere aren\u2019t too many jobs out there were you get paid to make each other laugh.\u201d "
# ("Fat Cats Classics", "http://comics.com/fat_cats_classics"), # ("Fat Cats Classics", "http://comics.com/fat_cats_classics"),
# "Fat Cats is about two purr-enially pretentious brothers who dominate the business world and indulge in all the finer pleasures their nine lives have to offer. In the cat-eat-dog world of the Fat Cats, running a multi-conglomerate corporation, exploiting the loyal dogs that work in their catnip factory and buying wonderfully ostentatious trinkets are all in a day's work. \"The Fat Cats are different from you and me. They have more money, true, but they're also covered with fur and have tails sticking out of their Armani suits,\" jokes Poderbarac. \"I was inspired by reading the business pages year after year and watching people like Bill Gates, and the ultimate fat cat, Donald Trump. I thought it would be fun to give characters like that feline personalities and to show how they would get along with the working class in my made-up cartoon world,\" he explains. Charlie Podrebarac was born in Kansas City, Kansas, where he began his cartooning career drawing nuns in grade school. He studied advertising journalism at the University of Kansas so that he could pursue his dream of cartooning. After college, he began work as art director for a local magazine which published his first cartoons. Poderbarac then created a humor panel called \"Cowtown,\" for the Kansas City Star (1984 to present). In between, he's produced hundreds of greeting cards for companies including Hallmark, Current, Paramount, and Gibson Greetings. His cartoons have been published in magazines such as Business Law Today, Playboy, and Veterenary Medicine, and he produces advertising art for clients including Sprint, Book of the Month Club, Mastercard and Maggiemoo's Ice Cream. His first comic strip, \"Smart Alex,\" was syndicated by The Washington Post Writers Group from 1995 to 1996. When not drawing in his knotty pine studio, Podrebarac lives the good life with his wife, Alicia, in Westwood, Kansas."
# ("Ferd'nand", "http://comics.com/ferdnand"), # ("Ferd'nand", "http://comics.com/ferdnand"),
# "Ferd'nand is the classic \"silent\" comic strip, starring a wide-eyed cherubic mime, his wife, son and dog. Every day is a new adventure for the title character as he confronts life and fate with wonderful expressiveness. From circus performer to bank cashier to orchestra conductor, Ferd'nand has spent almost six decades as the pantomiming protagonist of middle class life. A timeless classic, Ferd'nand is one of the 10 longest-running comic strips still being drawn. Originally created in 1937 by Danish film animator Henning Dahl Mikkelsen for Presse-Illustrations-Bureau (PIB) in Copenhagen, the strip gained wide popularity in Europe, so PIB brought it to America, where United Feature Syndicate began distributing it in 1947. Mikkelsen moved to California and continued to draw the strip until his death in 1982. Today, Ferd'nand continues to be drawn in \"Mik's\" style by Henrik Rehr. Rehr was born and raised in Denmark and came to the United States in 1992. "
# ("Flight Deck", "http://comics.com/flight_deck"), # ("Flight Deck", "http://comics.com/flight_deck"),
# "The day-to-day provides fodder for this off-beat but true-to-life cartoon. Peter Waldner began drawing cartoons as soon as he was old enough to be trusted with a pencil. He moved on to Elmira College in Elmira, N.Y., where he focused on studio art and film making. Waldner earned his B.A. from Elmira in 1977, and went on to postgraduate studies at the Parsons School of Design and Southampton College in New York. In 1980, Waldner settled on Shelter Island, N.Y. In 1993, he became the editorial cartoonist for the Shelter Island Reporter, followed by the East Hampton Independent and the Southampton Independent. Waldner's cartoons have won awards from the New York Press Association, including the first-place prize in the Editorial Cartoon Division. When he is not painting or drawing, Waldner spends his time taking care of his teenage son and daughter."
# ("Flo & Friends", "http://comics.com/flo&friends"), # ("Flo & Friends", "http://comics.com/flo&friends"),
# "Flo & Friends centers on Flo, a senior citizen whose life does not conform to the stereotypes about the elderly. Flo & Friends is a syndicated daily comic strip drawn by Jenny Campbell and distributed by Creators Syndicate. The comic was originally created by John Gibel in 2002. Jenny Campbell graduated from Arizona State University in 1979 with a BA in journalism, she became a sixth-generation journalist. In 1985, while working at The Orange County Register as a general assignment entertainment writer, Jenny kept doodling and ended up drawing a weekly cartoon in the Friday entertainment supplement. The cartooning bug had bitten her. Today, Jenny runs a thriving cartooning business in Chagrin Falls, Ohio, with 12 children's books to her credit and a list of clients including the textbook arms of most major publishers and Highlights for Children magazine."
# ("Fort Knox", "http://comics.com/fort_knox"), # ("Fort Knox", "http://comics.com/fort_knox"),
# "The tale of a military family's adventures and escapades, from a military brat's point of view. Fort Knox chronicles the life of a military family: Dad, Major Joe Knox; Mom, Jane Knox; and their two boys, Donald and Wesley. The family has picked up and moved \u2014 again \u2014 thousands of miles from family and friends to take up residence at Joe's new assignment at Fort Lincoln. Donald and Wesley have moved before, but that doesn't make it any easier on them. They must face down new bullies, master a new school system and new teachers, and navigate a new community. Added to these pressures is the distance the move puts between them and their beloved grandmother, who's a known troublemaker if not a known felon (yet). On top of all that, there's the strain that military life puts on their parents' otherwise happy marriage. Cartoonist Paul Jon is the son of an Army colonel whose tours of duty included Fort Leavenworth, Fort Jackson and Fort Knox, and who, every morning, liked to say to his fellow soldiers, \"It's a great day to be in the Army.\" Paul Jon understands his dad's attitude, and feels that being a military brat \"made me understand the sacrifices that military families make for our country, and also made me a better person for having to deal with new people all the time.\" "
# ("Frank & Ernest", "http://comics.com/frank&ernest"), # ("Frank & Ernest", "http://comics.com/frank&ernest"),
# "Playful punsters with a \"frank and earnest\" attitude. For more than three decades, Frank & Ernest has continued its tradition of innovative humor that has delighted millions of readers daily. Frank & Ernest stars Frank and Ernest, playful punsters with the ability to appear as any person, place or thing in any time period. The constant element is the pair's \"frank and earnest\" iconoclastic attitude. Frank & Ernest is read by more than 25 million people every day, making it one of today's most popular comics. Creator Bob Thaves was a master of the twisted phrase and skewed outlook. A true innovator, Thaves' Frank & Ernest was the first comic panel presented in a strip format. It was the first to vary the roles of its characters and the first to use block lettering. It was also the first to use comic book-style digital coloring for the Sunday pages. Frank & Ernest was one of the first comic strips to have its own Web site, www.frankandernest.com, which has included several components including the first 3-D interactive comics based on a comic strip. Thaves, who held both bachelors and masters degrees in psychology from the University of Minnesota, began cartooning as a kid and never stopped. He created Frank & Ernest while working as a consultant in industrial psychology in California. Bob Thaves died in August, 2006 and Frank and Ernest continues to be produced by Bob's son, Tom Thaves, who had collaborated with his father on the comic strip since 1997."
# ("Frazz", "http://comics.com/frazz"), # ("Frazz", "http://comics.com/frazz"),
# "Frazz by Jef Mallett follows the adventures of an unexpected role model: an elementary-school janitor who's also a Renaissance man. While he's sweeping the hall, he's whistling Beethoven. Or Lyle Lovett. He paints the woodwork in the classrooms; he paints a Da Vinci on the cafeteria wall. He's a trusted authority figure who is every kid's buddy. He took the janitor's job while he was a struggling songwriter, and when he finally sold a hit song, he decided to stay on at school. Often praised for its intelligent wit, gentle spirit and effortless diversity, Frazz won a 2003 Wilbur Award from the Religion Communicators Council for excellence in communicating values and ethics. "
# ("Free Range", "http://comics.com/free_range"), # ("Free Range", "http://comics.com/free_range"),
# "Free Range is an is an offbeat look at the world over the ages. Bill was a winner of a cartoon contest in the Saturday Evening Post and for a couple of years was named Best Editorial Cartoonist for weeklies in the state of Kansas by the Kansas Press Association. For 20 years Bill has written humor cards for Hallmark Cards in Kansas City, winning several citations for best-selling cards in his category. He has also done the weekly editorial cartoon for the Kansas City Business Journal from 1987 to 2007, which have appeared in Best Editorial Cartoons of the Year by Pelican Publishing for each of the past 11 years. His work is also included in the Cartoon Research Library at Ohio State University. Luckily for Bill, his wife has steadfastly supported his cartooning dreams of glory 100 percent while raising three children. "
# ("Geech Classics", "http://comics.com/geech_classics"), # ("Geech Classics", "http://comics.com/geech_classics"),
# "Jerry Bittle's comic strip illustrates the small town existence in which everybody knows everyone else...and everyone else's business. Jerry Bittle created a peephole into small town life with his eccentrically populated strip, Geech. Where else can you find a no-account mechanic, a sarcastic barber, a cynical bartender, a foul-mouthed diner waitress and a wanna-be country music star? Bittle was raised in Wichita, Kansas. He lived with his wife and three daughters in Dallas, Texas until his death in 2003. Bittle used to say of his fans, \"I get a lot of mail from different parts of the country telling me, 'I grew up in that town, and I know those people. And all this time I thought I was the one who grew up in that town and knew those people.\" Bittle also created Shirley & Son, a warm and funny look at family life after divorce, for United Feature Syndicate. "
# ("Get Fuzzy", "http://comics.com/get_fuzzy"), # ("Get Fuzzy", "http://comics.com/get_fuzzy"),
# "A bitingly hilarious slice of life with a volatile cat, a gentle dog and the unwitting human they live with. Housecats are known to be aloof, but \"cat-titude\" reaches new heights in Get Fuzzy, the bitingly hilarious comic strip from cartoonist Darby Conley. Get Fuzzy is a wry portrait of single life, with pets. At the center of this warm and fuzzy romp is Rob Wilco, a single, mild-mannered ad executive and guardian of anthropomorphic scamps Bucky and Satchel. Bucky is a temperamental cat who clearly wears the pants in this eccentric household. Satchel is a gentle pooch who tries to remain neutral, but frequently ends up on the receiving end of Bucky's mischief. Together, this unlikely trio endures all the trials and tribulations of a typical family... more or less."
# ("Girls & Sports", "http://comics.com/girls&sports"), # ("Girls & Sports", "http://comics.com/girls&sports"),
# "The intricacies of dating, relationships and sports. Justin Borus, Denver-born co-creator and co-writer of Girls & Sports, graduated from Williams College in Williamstown, Mass. Justin currently lives in Denver and will continue to spend his time investigating the intricacies of dating, relationships and sports until these great cosmic mysteries are solved. Andy Feinstein, artist, co-creator and co-writer of Girls & Sports, was also raised in Denver. He graduated from Emory University in Atlanta, where he was the editorial cartoonist and a sportswriter for The Emory Wheel while drawing and writing Girls & Sports with Justin. Andrew spends his time lining up a date for Friday night, watching lots of sporting events and tirelessly practicing his jump shot, which, like his dating skills, still needs much improvement. In their 20-plus combined years of being on the prowl for the perfect girlfriend, they have approached countless girls, been rejected more times than they can remember, gone on tons of dates, been involved in several serious relationships, and yes, have lived to tell the stories."
# ("Graffiti", "http://comics.com/graffiti"), # ("Graffiti", "http://comics.com/graffiti"),
# "Gene Mora creates Graffiti, a witty play on words with a clever, often ironic message. His love of typography and hand lettering started when he was a high school student at the School of Art and Design. He established himself as a graphic designer, working as an Art Director for several advertising agencies including BBDO and Franklin Spier. A freelance assignment with McNaught, a small, independent syndicate, introduced Mora to the world of syndication. He left his job as Art Director to establish his own service as a graphic designer working for syndication, advertising agencies and various design studios in Manhattan. Mora's proximity to syndicated features while working as an art director led to his own interest in creating a feature. He wrote \"Alexander Gate,\" a continuity strip illustrated by Frank Bolle; \"Dear Debbie,\" a lovelorn column; and, ultimately, Graffiti. The chance to use his design and lettering skills along with the opportunity to write seemed a perfect fit, and he has been producing the feature since 1969."
# ("Grand Avenue", "http://comics.com/grand_avenue"), # ("Grand Avenue", "http://comics.com/grand_avenue"),
# "A real, modern grandma who takes care of two cute but pretty rambunctious kids. Grand Avenue, the daily and Sunday comic strip by Pulitzer Prize-winning editorial cartoonist Steve Breen and 2009 Pulitzer finalist Mike Thompson, follows the antics of an energetic pair of fraternal twins being raised by their grandmother. The strip stars Kate Macfarlane, an avid sports fan who powerwalks to stay in shape. Not your typical cookie-baking granny, Grandma Kate has her hands full with this terrific twosome, who are best buddies even though their personalities clash. Gabby is an ambitious, newspaper-reading little girl who plans to become a billionaire before she's 30. Her brother Michael is a more sensitive soul who prefers riding his skateboard or performing scenes from Shakespeare to just about anything else."
# ("Heathcliff", "http://comics.com/heathcliff"), # ("Heathcliff", "http://comics.com/heathcliff"),
# "Heathcliff, a street-smart and mischievous cat with many adventures." # "Heathcliff, a street-smart and mischievous cat with many adventures."
# ("Herb and Jamaal", "http://comics.com/herb_and_jamaal"), # ("Herb and Jamaal", "http://comics.com/herb_and_jamaal"),
# "A tribute to lasting friendships and a reflection on a life well lived. Born in Southern California in 1954, Stephen Bentley grew up in the South Central area of Los Angeles. He attended Pasadena City College and, later, Rio Hondo College, majoring in Art, English and Fire Sciences. Once in the business as a professional artist, Stephen worked for various advertising agencies, whose client list included the Los Angeles Dodgers, Wham-O Toys, the Playboy Channel and Universal Studios. After attending a high-school reunion and re-establishing an old friendship in 1998, Stephen was inspired to create the comic strip Herb and Jamaal. Today, Stephen is a single father who lives in Northern California with his teenage daughter, Natalie."
# ("Herman", "http://comics.com/herman"), # ("Herman", "http://comics.com/herman"),
# "One of the most innovative comics of all time, Herman is the groundbreaking offbeat humor panel created by Jim Unger. In 1992, after 20 years of cartooning and with more than 6,000 original comics to his credit, Unger had finally decided to retire and enjoy life in the Bahamas. But not for long: in 1997, due to popular demand, United Feature Syndicate brought back classic Herman comics with 10 years of Unger's best work. Although Unger has no plans to return to full-time cartooning, he has carefully 'updated' and revised his comic collection, and hopes to sprinkle in a few new comics from time to time. So grab onto your funny bone and get re-acquainted with Herman, one of the most hilarious comic strips ever to be syndicated in newspapers."
# ("Home and Away", "http://comics.com/home_and_away"), # ("Home and Away", "http://comics.com/home_and_away"),
# "Sam and Sandy juggle careers and child care. Love, respect and got-your-back support are the trinity of their relationship. It's school-picture day and Karen has nothing clean to wear. Timmy can't find his cleats and soccer practice is in 10 minutes. Sam is working from home but his conference call is running an hour late, and Sandy is away on business. In Home and Away by Steve Sicula, Sam and Sandy Szwyk are typical parents juggling careers and child care. They find it hard enough to make sure their kids, Karen and Timmy, are where they need to be, when they need to be there (not to mention appropriately dressed). Factor in their business schedules and you've got barely managed chaos. That's why love, respect and a got-your-back support system are the trinity behind Sam and Sandy's relationship. It's what they depend upon -- at home and away."
# ("It's All About You", "http://comics.com/its_all_about_you"), # ("It's All About You", "http://comics.com/its_all_about_you"),
# "It's really all about me. But to the extent that you can relate to it, It's All About You, too. \u201cThe strip\u2019s title is sort of a joke in itself,\u201d says cartoonist Tony Murphy. \u201cIt\u2019s really all about me. But to the extent that you can relate to it, it\u2019s all about you, too.\u201d Murphy\u2019s persona in the strip is a caffeine-craving neurotic named Michael who\u2019s in a long-term, pre-marriage relationship with his well-balanced, herbal-tea-drinking girlfriend, Gina. Michael epitomizes today\u2019s push-me-pull-you mentality in which we\u2019re obsessed with how we appear to the rest of the world, yet desperate to win acceptance strictly by being ourselves. Michael and Gina frequent a local caf\u00e9 where the barista, Chris, is the coffee-counter therapist for all his self-involved customers. Chris pretends to listen to patrons like Gina\u2019s friend Maggie, who is addicted to self-help books, and Maggie\u2019s father, Alex, who rationalizes away his failure to follow a diet or go to the gym. Michael\u2019s software-company cubicle-mate, Albert, also patronizes the caf\u00e9, when he's not being Michael\u2019s sounding board for his relationship with Gina or his laundry list of hang-ups."
# ("Jane's World", "http://comics.com/janes_world"), # ("Jane's World", "http://comics.com/janes_world"),
# "A strip for all those gals out there who are just trying to figure life out. If you're a female cartoon character, you are expected to make jokes about dating, raising children, dieting and anything else that relates to poor body image. But what if you are a female cartoon character who feels that life is too short for caloric concerns? What if you are a cartoon character who chases vampires, needs sensitivity training, requires career counseling and basically needs to get a life? Well, then you'd be Jane. Welcome to Jane's World. Where female cartoon characters are free to be goofy, flat-chested and self-absorbed. Paige Braddock graduated with a degree in Fine Art from the University of Tennessee. Paige worked as an illustrator for several newspapers, including The Chicago Tribune and The Atlanta Constitution before accepting a position as Creative Director at Charles M. Schulz Creative Associates. In this position, Paige works with Schulz family members to oversee the art direction and editorial control for all Peanuts licensed product worldwide. In 2002 Paige launched her own publishing company, Girl Twirl Comics, so that she could finally make her comic feature, Jane's World, available to comic shops and bookstores. Jane's World started as an online feature in the late 1990s but was soon picked up for online distribution by United Feature Syndicate, Inc. Currently, daily installments of Jane's World appear on their Comics.com website. In 2006 Jane's World received an Eisner Award nomination for best humor book."
# ("Jump Start", "http://comics.com/jump_start"), # ("Jump Start", "http://comics.com/jump_start"),
# "A tender, funny view of middle-class family life. One of a handful of syndicated African-American cartoonists, Robb Armstrong brings a unique perspective to his strip with art and storylines that are upbeat, fun and undeniably realistic. Jump Start offers an authentic, positive representation of middle-class African Americans. Joe and Marcy Cobb are a young African-American couple trying to balance their careers - he's a police officer, she's a nurse - with a loving marriage and warm family life shared with their young daughter, Sunny, and toddler son, Jojo. Many readers see themselves reflected in Jump Start. \"I'm thrilled that people say that,\" says Armstrong. \"I'm drawing about my life; about a black couple because I'm black. Joe and Marcy and the characters I've developed are deep and based on real life.\" A popular motivational speaker who addresses groups at schools, churches, libraries and other venues throughout the U.S., Armstrong inspires young people with the story of his own success. "
# ("Kit 'N' Carlyle", "http://comics.com/kit_n_carlyle"), # ("Kit 'N' Carlyle", "http://comics.com/kit_n_carlyle"),
# "A single woman and her mischievous kitten. Kit is a single working woman, Carlyle is her spunky, mischievous kitten and their lives together provide the humor for the daily panel Kit 'N' Carlyle, created by Larry Wright, editorial cartoonist for The Detroit News. Adorable kitten Carlyle shreds the furniture, gets into mischief with Kit's niece Carly and glares at Kit's boyfriends. Few of her dates survive under such intense scrutiny, and those who do endure home-cooked meals so awful, even Carlyle turns up his nose at them. "
# ("Li'l Abner Classics", "http://comics.com/lil_abner_classics"), # ("Li'l Abner Classics", "http://comics.com/lil_abner_classics"),
# "The iconic clan of hillbillies from the impoverished town of Dogpatch, Kentucky. The star Li'l Abner is hardly \"little,\" Abner is 6-foot-3 in his stocking feet , and perpetually 19 years-old; a naive, simple-minded and sweet-natured hillbilly boy. He lives in a ramshackle log cabin with his pint-sized parents. Abner inherited his strength from his irascible Mammy, and his brains from his less-than-brainy Pappy. In Capp's satirical and often complex plots, Abner was a country bumpkin Candide - a paragon of innocence in a sardonically dark and cynical world. Written and drawn by Al Capp (1909 - 1979), the strip ran from 1934 through 1977. Please note due to recent updates to Comics.com, Lil' Abner Classics will now run with the current date displayed. The Li'l Abner Classic strips displayed here are from the archives and were originally published between 1934-1955. "
# ("Liberty Meadows", "http://comics.com/liberty_meadows"), # ("Liberty Meadows", "http://comics.com/liberty_meadows"),
# "Liberty Meadows relates the comedic activities of the staff and denizens of the titular animal sanctuary\/rehabilitation clinic. In 1978 Frank Cho came to United States to see what all the fuss was about. 1990-1993 attended Prince George's Community College. Drew editorial cartoons and comic strips for the bi-weekly student newspaper, The Owl. Won College Media Advisers' Best Stand-Alone Cartoon of 1992. After constant pressure from parents and relatives to go into the medical field, entered University of Maryland at Baltimore School of Nursing. Drew the daily comic strip \"Univerity2\" for three semesters for the University of Maryland student newspaper, The Diamondback. Strip developed a cult-like status with student body and faculty. Won the Best College Cartoonist of 1994 award from the Scripps Howard Foundation out of 157 college cartoonists in the nation, as well as the coveted Charles Schulz Plaque for Excellence in Cartooning. Graduated from nursing school with a bachelor of science degree, but only after being thoroughly cured from any and all desires to go into the nursing profession. Discovered by Creators Syndicate. Self-published the book \"University2 \u2013 The Angry Years!\", debuted the comic strip \"Liberty Meadows\" in newspapers across the country."
# ("Little Dog Lost", "http://comics.com/little_dog_lost"), # ("Little Dog Lost", "http://comics.com/little_dog_lost"),
# "Like any good adventure story, Little Dog Lost by Steve Boreman is a metaphor for broader concepts and bigger concerns. A lost little dog\u2019s picture hangs on a telephone pole, a note begging for his return, reward offered, no questions asked. But the picture was taken some time ago, the poster now faded and curled from sun and rain. The Little Dog is a long way from the home he longs for. But truth be told, for Little Dog, the adventure of the open road is addictive \u2013 fraught with exploits both humorous and heroic, filled with characters both good and bad (but always interesting), and imbued with life lessons. Like any good adventure story, Little Dog Lost by Steve Boreman is a metaphor for broader concepts and bigger concerns. It contains parables and morality plays, palatably packaged in humorous comic strip form. Jeff Smith, creator of Bone, says, \"Little Dog Lost is full of sharp, witty animals, all trying to do their best to survive in the wild...even if they have to eat one another to do it. Steve Boreman's funny and thoughtful comic strip is one of the best to come along in years!\""
# ("Lola", "http://comics.com/lola"), # ("Lola", "http://comics.com/lola"),
# "A tell-it-like-it-is grandma who lives life out loud, Lola, is an independent woman in her late 70s, widowed and living with her son and his family. Her unique view of life is matched only by her fierce independence, wicked sense of humor and blunt, but often heart-warming honesty. Available daily and Sunday, Lola is the creation of Todd Clark. Everyone's grandma may not be as witty as Lola, a sharpshooter who's busy living life to the fullest and making sure everyone else does too. Todd Clark has been drawing for as long as he can remember, possibly a result of always carrying a copy of MAD Magazine with him as a child. Since he began cartooning full-time in 1990, Clark has contributed to a wide range of comic strips, including \"Sherman's Lagoon,\" \"Mother Goose and Grimm,\" \"Frank and Ernest\" and \"New Breed.\" His cartoons have been published in a variety of magazines, including The Saturday Evening Post, Snow Country and Diversion."
# ("Luann", "http://comics.com/luann"), # ("Luann", "http://comics.com/luann"),
# "Readers of all ages love Luann, the exciting comic strip by Greg Evans that brings to life the daily drama of being a young woman. Evans' strong characters, compelling story lines and genuine humor captivate millions of readers every day. Since it began in 1985, Luann has earned a loyal following. Teens everywhere relate to Evans' insightful humor and true-to-life characters. In all story lines, Evans holds Luann up as a fine example of the positive power cartoons can have. \"I've always felt that adolescence is a very funny time -- except when you're in it,\" says Evans. \"My aim is to touch readers' hearts as well as their funny bones.\" A proven favorite, Luann consistently ranks among the top five comic strips in reader surveys. Evans is also applauded for touching on the real issues that teens face -- from puberty and unrequited love to peer pressure, drugs and alcohol. Evans won the National Cartoonists Society's 2003 Reuben Award for Cartoonist of the Year, on his sixth nomination. Get hooked on the life of this sixteen year-old girl. "
# ("Marmaduke", "http://comics.com/marmaduke"), # ("Marmaduke", "http://comics.com/marmaduke"),
# "Marmaduke is America's most lovable, big, huggable Great Dane. Created by Brad Anderson, the classic comic canine has delighted newspaper readers since 1954. Marmaduke lives with the Winslow family, who, try as they might, just can't seem to get him to obey. Despite his antics, the playful pooch is top dog in the neighborhood and on the comics page, where he has endeared himself to readers in more than 20 countries. The daily panel also strikes a chord with pet owners, many of whom write to Anderson to comment on Marmaduke as if he were a real dog. Winner of the National Cartoonists Society's 1976 Reuben Award for Best Comic Panel, Anderson has also created more than two dozen Marmaduke books, which have sold more than 10 million copies worldwide. "
# ("Meg! Classics", "http://comics.com/meg_classics"), # ("Meg! Classics", "http://comics.com/meg_classics"),
# "Meg! is a charming chronicle of a lovable little girl, and her friends and family. Meg lives for the thrill of competing on the soccer field, fights to understand her boy-crazy best friend, and never misses a chance to annoy her little brother. She loves soccer and skateboarding, enjoys art (she named her puppy Van Gogh), and expects to win the World Cup MVP and be elected President in the same year. Greg Curfman was born in Newport News, Virginia and some of his earliest memories are of lying on his parents' living room floor reading the Sunday comics while waiting to leave for church. He always wanted to be a cartoonist and he spent much of his early years -- and his free time during his freshman year at college -- in the library, reading through old collections and histories of comics. He earned his B.S. in Marketing from Christopher Newport University and his M.S. in applied science (computers) from the College of William and Mary in Williamsburg, Va. He married his best friend Diane (who was also the daughter of his dentist), and got a great job writing software for IBM. Curfman tried to satisfy his yearning for cartooning fame by doing the family Christmas cards and occasional pieces of comic art for friends and colleagues. But after a while it wasn't enough. He found he now had something that he didn't have before -- life experience. Wild, crazy life experience of raising three kids and expecting a fourth. The kind of experience that can't be made up; the kind that HAS to be lived. Now he had something to write about."
# ("Minimum Security", "http://comics.com/minimum_security"), # ("Minimum Security", "http://comics.com/minimum_security"),
# "A furious one-eyed bunny and his unusual friends star in America\u2019s cutest pre-post-Apocalypse comic strip. In \"Minimum Security,\" a furious one-eyed bunny and his unusual friends confront the big issues -- saving the world, avoiding foreclosure, online dating -- with everything from willful denial to high-powered explosives. The title comes from a prisoner who, after being released into general society, noted, \"I'm still not free; I'm just in minimum security.\" Stephanie McMillan was born in 1965 in Fort Lauderdale, FL, and decided at age ten to be a cartoonist. She earned a BFA in animation from Tisch School of the Arts at New York University. She has been drawing comics since 1992, and Minimum Security since 1999. Her award-winning cartoons have appeared in dozens of publications, books and comics exhibitions worldwide. Her cartoon collection, \"Attitude Presents Minimum Security,\" edited by Ted Rall, was published by NBM in 2005. Her graphic novel, \"As the World Burns: 50 Simple Things You Can Do to Stay in Denial,\" co-created with writer Derrick Jensen, was published in 2007 by Seven Stories Press."
# ("Moderately Confused", "http://comics.com/moderately_confused"), # ("Moderately Confused", "http://comics.com/moderately_confused"),
# "Laugh at the absurdities we accept as \"reality\" when award-winning editorial cartoonist Jeff Stahler creates Moderately Confused, a whimsical slice-of-life comic. Editorial cartoonist for The Columbus Dispatch, Stahler also draws political cartoons that are distributed worldwide by Newspaper Enterprise Association. \"Moderately Confused is an extension of my daily thinking routine,\" says Stahler. \"I'm used to observing the front pages of the news and commenting with a cartoon. But every day, the rest of the paper tracks the culture, and all of those stories are rich for commentary, too. This panel gives me an outlet for observing those back pages of the paper that I enjoy reading as well.\" Stahler's cartoons appear every week in USA Today and are frequently reprinted in major magazines and newspapers, including Newsweek and The New York Times."
# ("Momma", "http://comics.com/momma"), # ("Momma", "http://comics.com/momma"),
# "Follow the stories of Momma, everyone\u2019s mother. Mell Lazarus is an award-winning cartoonist and a leader in his profession, having created the strips MOMMA and MISS PEACH and served as president of the National Cartoonists Society from 1989 to 1993. MOMMA was created in 1970 and distributed by Publishers-Hall Syndicate, now known as North America Syndicate. MOMMA, which currently appears in more than 400 newspapers worldwide, is based partly on Mell\u2019s mother, Frances. Lazarus points out that MOMMA reflects everyone\u2019s mother. A native of Brooklyn, Lazarus has lived in Los Angeles since the 1970s. He has three daughters."
# ("Monty", "http://comics.com/monty"), # ("Monty", "http://comics.com/monty"),
# "This award-winning, quirky comic strip created by Jim Meddick spoofs suburbia, trashes tacky TV shows and offers absurdist commentary on everything from hosing down spider monkeys to the latest conspiracy theory. Monty's skewed sensibilities have earned the strip a fanatical following on the Web and on newspaper comics pages on six continents, making this daily and Sunday comic strip a cult favorite among comics readers worldwide. Monty won the 2008 National Cartoonists Society\u2019s Award for Best Newspaper Strip. Formerly titled \"Robotman,\" Monty lampoons a wide range of topics. Explains Meddick, \"I've tried to create the comic strip equivalent of 'Monty Python's Flying Circus.' The name 'Monty' is a nod to the influence that show had on my humor. In my cartoon, just about anything can happen - this way, the ideas and characters always stay fresh.\" Monty Montahue is often at the center of this hilariously funny comic strip's outrageous story lines. A brainy, bumbling bachelor who's unlucky in work and in love, Monty shares his home with Fleshy, a hairless cat, and Mr. Pi, a super-logical extraterrestrial. The wacky cast of characters is rounded out by Moondog, Monty's beer-guzzling buddy; Loco Ohno, Monty's crazy ex-girlfriend; and Pilsner the parrot."
# ("Motley Classics", "http://comics.com/motley_classics"), # ("Motley Classics", "http://comics.com/motley_classics"),
# "Motley is a smart, independent cat, who is a \"connoisseur of fine milk\" and pretty much does whatever he wants - including everything from ignoring his owners to running for the occasional political office. Larry Wright has been a cartoonist since the age of 10, drawing comic books for his friends in Detroit, then creating cartoons for his Allen Park, Mich., school newspaper. After graduating from high school, Wright expanded his cartooning skills in the Army. He studied Chinese, was sent to Okinawa as an interpreter and began drawing a strip called \"Uncle Milton\" for the Okinawa Morning Star. When Wright was discharged, he remained in Okinawa to become night editor of the Star. In 1965 he took a job at the copy desk of The Detroit Free Press, and 11 years later became a daily cartoonist at The Detroit News. He created his first syndicated comic, \"Wright Angles,\" for United Feature Syndicate in 1977. Although the strip is no longer syndicated, the popularity of one of the characters, a cat, provided the inspiration for Kit 'N' Carlyle. In 1987, Wright was named associate editor of the editorial page-graphics at The Detroit News and is currently Assistant Graphics Editor. He was elected president of the Association of American Editorial Cartoonists (AAEC) in September, 1994 and will serve as President of the organization in 1996. He lives in Allen Park, Mich. with his wife Naoko. They have a son, a daughter and one grandchild. "
# ("Nancy", "http://comics.com/nancy"), # ("Nancy", "http://comics.com/nancy"),
# "One of the best-loved comic characters of all time, famous for gentle humor and childlike innocence. Created by Ernie Bushmiller in the 1930s, since 1995, the strip has been drawn and written in Bushmiller's classic style by Guy and Brad Gilchrist, the award-winning cartooning team behind \"The Muppets Comic Strip.\" Nancy is famed for its gentle humor and surrealistic sight gags. Nancy's childlike innocence never wavers, no matter what is happening in the world around her. She remains a devoted friend to her pal Sluggo, and can be, depending on the situation, a conceited prima donna or a fun-loving, cute and cheeky little girl. Nancy first made her appearance in the comics in the early 1930s, as a character in \"Fritzi Ritz.\" The little girl with the big red bow became so popular that in 1938, the strip was renamed \"Nancy.\" Nancy has entertained hundreds of millions of comics fans worldwide for decades. Nancy and Sluggo even appeared on a U.S. postage stamp in 1995. "
# ("Natural Selection", "http://comics.com/natural_selection"), # ("Natural Selection", "http://comics.com/natural_selection"),
# "Natural Selection a single-panel, surreal, intelligent, gag cartoon that had the look and feel of an editorial cartoon. Russ Wallace was born into a family of lobstermen in a small Iowa fishing village. Russ was never satisfied with the fishing life. Instead, his idols were the great MAD Magazine artists Mort Drucker and Jack Davis, as well as a host of editorial cartoonists. He painstakingly studied their work while trying to develop a style of his own. Wallace studied at Marshall University and the University of Virginia, eventually emerging with a medical degree. He practiced neurosurgery until he came to his senses and realized that medicine would always involve getting up really early and having to talk to people. With this epiphany he proceeded to illustrate a book written by his father, who then encouraged him to try his hand at editorial cartooning. He became the editorial cartoonist for the Charleston Gazette and was the runner-up to the prestigious Scripps-Howard National Press Award in his first year of cartooning. From this Natural Selection was born. Russ Wallace resides in the Southeast. He has been joined for the last 15 years by a female human who \"appears to be in charge.\" Later, two smaller humans and a dog showed up. They frequently ask to be driven places and eat a lot."
# ("Nest Heads", "http://comics.com/nest_heads"), # ("Nest Heads", "http://comics.com/nest_heads"),
# "With an extended family that spans nearly a century Allen is able to draw on a rich source of family humor for Nestheads. With four brothers and sisters in various stages of coping with their own empty nest, and an extended family that spans nearly a century - from 93-year-old father L.C. to infant grandniece Katie - Allen is able to draw on a rich source of family humor without having to actually put it through college. Allen, raised in Colonial Williamsburg and currently living in the birthplace of Thomas Jefferson, Charlottesville, Virginia, has decided that the best part of history is that it makes him feel young in comparison. He is aided in this pursuit by caring for his elderly cat, Caprice, and seeing his brothers and sisters at every opportunity. "
# ("Off The Mark", "http://comics.com/off_the_mark"), # ("Off The Mark", "http://comics.com/off_the_mark"),
# "A world of scheming pets, evil computers and talking plants that puts an ironic, absurd or just plain silly spin on the ordinary occurrences of everyday life. Mark Parisi's comic panel Off the Mark hits a bull's eye with slightly skewed humor and a twisted look at the little things we take for granted. It is a world of scheming pets, evil computers and talking plants that puts an ironic, absurd or just plain silly spin on the ordinary occurrences of everyday life. Described by one newspaper editor as \"sweet-natured and devilish at the same time,\" off the mark receives fan mail from readers of all ages. It has twice been nominated for \"Best Newspaper Comic Panel\" by the National Cartoonists Society."
# ("On a Claire Day", "http://comics.com/on_a_claire_day"), # ("On a Claire Day", "http://comics.com/on_a_claire_day"),
# "An \"adult\" life where you're supposed to know the answers, but you discover, almost daily, that you don't know as much as you thought you did. Carla Ventresca and Henry Beckett started On A Claire Day when they felt there weren't any comic strips addressing the life they and so many of their friends seemed to be living: an \"adult\" life where you're supposed to know the answers, but you discover, almost daily, that you don't know as much as you thought you did. Where, in fact, you discover that your parents and schools taught you very little of what you need to know to make it in the real world. Carla Ventresca is a graduate of Syracuse University where she majored in Communications. She later moved to Boston and started a greeting card line. It grew big enough to capture the attention of Recycled Paper Greetings, the nation's third largest publisher. Carla is now one of their top artists, selling millions of cards each year, She currently lives in Nashville, Tenn., where she co-creates \"On A Claire Day\" with her husband and best friend, Henry Beckett. Henry Beckett managed to sneak in the back door to Harvard University. He attended UCLA Law School, where he thought law was cool but lawyers weren't. He went and got an MBA, so he could manage all the money he didn't have. Now, he co-creates \"On A Claire Day\" and composes and produces music for lots of clients, including Miramax, Vivendi Universal and Nike."
# ("One Big Happy Classics", "http://comics.com/one_big_happy_classics"), # ("One Big Happy Classics", "http://comics.com/one_big_happy_classics"),
# "The daily adventures of six-year-old Ruthie, along with her family, friends and neighbors. The strip also features her eight-year-old brother Joe, their parents Frank and Ellen, and their grandparents Nick and Rose, who live next door. The strip's title is a takeoff on the phrase, \"One big happy family.\" It debuted on September 11, 1988. The strip takes place in or around Baltimore, Md., where the creator grew up. Joe describes his family as being \"half Italian and half Texan.\" The Italian half comes from Nick, Rose, and Frank. Their family name is Lombard, a slightly Americanized version of the Italian family name Lombardo. Myrna and Ellen supply the Texan side. All the family members are colorful characters with strong opinions on everything. The same can be said for their neighbors."
# ("Over the Hedge", "http://comics.com/over_the_hedge"), # ("Over the Hedge", "http://comics.com/over_the_hedge"),
# "A freshly skewed look at suburban living from the perspective of the animals that lived there first. Created by Michael Fry and T Lewis, Over the Hedge takes a freshly skewed look at suburban living from the perspective of the animals that lived there first. The strip stars RJ, a mischievous raccoon, and Verne, his sensitive best-buddy turtle. Together they fight to save their wooded wonderland from the evils of encroaching suburbia but end up becoming distracted by wide-screen TVs, discarded fast food containers and the fun of wreaking havoc on the local homeowners' association. Over the Hedge has delighted comics readers since 1995 with furry antics of all kinds. Over the Hedge hit the silver screen in May 2006, and was a major hit with audiences around the globe. The DreamWorks computer-animated feature film raked in $335 million at the box office worldwide, and DVD sales continue to mount. The first-rate voice cast includes Bruce Willis as RJ and Garry Shandling as Verne. Wanda Sykes, Avril Lavigne, Steve Carell, Eugene Levy and William Shatner also lend their distinctive pipes to the popular woodland creatures."
# ("PC and Pixel", "http://comics.com/pc_and_pixel"), # ("PC and Pixel", "http://comics.com/pc_and_pixel"),
# "PC O'Data achieved middle age only to be \"downsized\" out of his job and his marriage. Like so many cast out by today's economy, he becomes a free-lance consultant with an office at home. He is available for hire by any PR firm, because advertising is what he used to do, but will accept almost any kind of work to make ends meet. PC is wired, but with technology always changing, is never quite as comfortable surfing the Net as his cat Pixel. An addicted Netsurfer who is never without her laptop. Pixel has a secret friend Digit, a mouse who hangs around PC's apartment and likes to dispense advice over the Internet."
# ("Peanuts", "http://comics.com/peanuts"), # ("Peanuts", "http://comics.com/peanuts"),
# "PEANUTS is the most beloved comic strip in history. What began in the funny pages in 1950 has developed into an enduring classic. Whether you\u2019re a fussbudget like Lucy, philosopher like Linus, Flying Ace like Snoopy, or a lovable loser like Charlie Brown, there is something to touch your heart or make you laugh in PEANUTS. "
# ("Pearls Before Swine", "http://comics.com/pearls_before_swine"), # ("Pearls Before Swine", "http://comics.com/pearls_before_swine"),
# "At its heart, Pearls Before Swine is the comic strip tale of two friends: a megalomaniacal Rat who thinks he knows it all and a slow-witted Pig who doesn't know any better. These two take center stage in Pearls Before Swine, a quirky strip by litigator Stephan Pastis. Together, this pair offers caustic commentary on humanity's quest for the unattainable. Launched in 2002, the strip has twice won the National Cartoonists Society's Reuben division award for Best Newspaper Comic Strip \u2013 in 2004 and in 2007. Available on United Media's comics.com Web site since 2000, Pearls Before Swine has a growing list of fans, including Dilbert cartoonist Scott Adams who says Pearls is \"one of the few comics that make me laugh out loud.\" Pastis never had any formal training, but he did draw cartoons for each of his school newspapers as he grew up. He holds a degree in political science from the University of California at Berkeley. Although he always wanted to be a cartoonist, Pastis realized that the odds of syndication were slim, so he went to UCLA Law School and became an attorney instead. While at UCLA, he drew a popular strip called \"Rosen.\" It was while was hopelessly bored in a class on the European Economic Community that Pastis first drew \"Rat,\" a character that would reappear in every comic strip he created thereafter - including Pearls Before Swine."
# ("Pickles", "http://comics.com/pickles"), # ("Pickles", "http://comics.com/pickles"),
# "Married for 50 years, Earl and Opal appreciate know-me-better-than-I-know-myself honesty and good-natured ribbing. Pickles is a laugh-out-loud comic strip gem, showing the funny side of family and friendships. Earl and Opal share their golden years with their 30-something daughter Sylvia, her husband, Dan and their beloved grandson Nelson. Whether observing the differences between genders and generations or taking a wry but sympathetic look at life in the twilight years, Crane\u2019s good-natured wit and dry humor are sure to please readers of all ages. Pickles has topped comics polls across the nation again and again, and it appears in 500 newspapers around the world. Crane was born in Twin Falls, Idaho, but grew up in the San Francisco Bay area. He graduated with a degree in art from Brigham Young University in 1973. Soon after Pickles\u2019 debut in 1990, Crane \u201cretired\u201d as an art director for an advertising agency in Reno, Nevada, to devote his full attention to his comic strip. Although he often used cartoon figures in ads he designed, Pickles is his first syndicated comic strip."
# ("Prickly City", "http://comics.com/prickly_city"), # ("Prickly City", "http://comics.com/prickly_city"),
# "Carmen and Winslow are friends to the end, although they disagree on just about everything. The unlikely friendship between a coyote pup and a young girl takes center stage in Prickly City. This topical comic strip centers around Carmen, a feisty libertarian-conservative, and Winslow, an impulsive coyote with political aspirations. Winslow can be patronizing and condescending, and his liberal responses produce much of the strip\u2019s humor. Carmen is continuously frustrated by Winslow\u2019s assumption that she should be a liberal feminist. Through it all, though, Carmen and Winslow are friends. Prickly City is created by Scott Stantis, the editorial cartoonist for the Chicago Tribune. "
# ("Raising Duncan Classics", "http://comics.com/raising_duncan_classics"), # ("Raising Duncan Classics", "http://comics.com/raising_duncan_classics"),
# "Raising Duncan by Chris Browne celebrates the furry, four-legged creatures that are the center of many families' lives. Raising Duncan appears in 50 newspapers worldwide, including the Denver Rocky Mountain News, Atlanta Journal and Constitution, Chicago Sun-Times, Detroit Free Press and Minneapolis Star and Tribune. It is also available on the Web at www.comics.com. Raising Duncan follows the antics of Big Daddy Kelly, an easily distracted romance novelist suffering from writer's block. His wife, Adelle, is an organized mystery writer who shares his antique writing desk and his unabashed love for Duncan, a little black Scotty dog who is the heart of their household. A wide-eyed innocent who marvels at the world and asks endless questions, Duncan is loved by everyone - even the cat. Chris Browne, an accomplished comic artist who grew up in Wilton, Connecticut. His father was cartoonist Dik Browne, creator of Hagar the Horrible. As a teenager, Browne assisted his father on his comic strips and continued to work with him until he passed away in 1989. During this time Browne also drew cartoons for the National Lampoon, where editor Sean Kelly dubbed him the magazine's \"Token Good Taste Cartoonist.\" He went on to sell cartoons to Esquire, Heavy Metal, Playboy and The New Yorker. Raising Duncan is inspired by Browne's love for his wife, Carroll, and for their 11 year-old Scottish Terrier, MacDuff. \"There has been a trend in the comics lately towards cynicism,\" says Browne. \"Raising Duncan runs like the wind in the other direction. It's all about love, family, understanding and acceptance - the warm places we find for each other in a cold world.\" Like the characters he has created, Browne lives and works in Sarasota, Florida. When not working on Raising Duncan or waiting for his muse to inspire, Browne can be found prowling local bookstores, quaffing cappuccinos and walking the dog."
# ("Reality Check", "http://comics.com/reality_check"), # ("Reality Check", "http://comics.com/reality_check"),
# "A wacky vision of the world that exposes the hidden hilarity in ordinary circumstances. Cartoonist Dave Whamond offers an offbeat view of the world in Reality Check, his daily and Sunday comic panel that exposes the hidden hilarity in everyday situations. A thoroughly wacky look at life, Whamond explains, \"I just frame some of the silliness of everyday life in the comic and invite people to take a double-take -- to look at life from another angle. Reality Check is more a state of mind than anything else. The characters could be people you know -- maybe even a bit of yourself -- but the names have been changed to protect the innocent.\" Whamond was born in Edmonton, Alberta and grew up in the small northern Canadian town of Whitecourt where, he says, \"there was nothing to do but draw cartoons.\" He discovered doodling at an early age, practiced through many math classes and attended the Alberta College of Art, where he studied visual communications and discovered his true passion -- cartooning and illustration. Whamond freelanced at The Calgary Herald as an editorial cartoonist, sharing duties with the paper's staff cartoonist and publishing three cartoons a week while still in college. He honed his skills at the Herald for five years before devoting himself full-time to freelance illustration for magazines. Whamond's illustrations have been published in Sports Illustrated, National Geographic World, Financial Times, Owl Magazine, Psychology Today and T.V. Times, among others. He also illustrates a monthly feature for Sesame Street magazine."
# ("Red & Rover", "http://comics.com/red&rover"), # ("Red & Rover", "http://comics.com/red&rover"),
# "Step into a time when your best friend has four legs and drools, loyalty is unquestioned and friendship is forever. Red and Rover, A 10-year-old with dreams of going into space one day. Red loves baseball and model rocketry, but most of all his dog, Rover, whom he considers his best friend, confidant, and guardian angel. Rover, a mutt with mostly Lab in him. Rover is cool, calm and collected--unless a squirrel is within earshot--and unfalteringly loyal to Red, who not only found him a home, but found his tickle spot. Brian Basset was born in Norwalk, Conn., in 1957 but grew up in the Washington, D.C., suburb of McLean, Va. In 1975, Brian enrolled at Ohio State University where he lampooned state and student politics as a political cartoonist for the school paper, The Lantern. Three years later Brian landed a six-month \"tryout\" as editorial cartoonist for The Seattle Times. This \"tryout\" lasted 16 years. In 1994, he began to devote himself full-time to his comic strip, \u201cAdam\u201d (now called \u201cAdam@Home\u201d) which he had developed a decade earlier with Universal Press Syndicate. A big believer in space exploration, Basset was honored in 2004 with a one-man show of his Red and Rover space-themed strips at NASA's Washington, DC headquarters. He is the first and only comic strip cartoonist so recognized. On July 26, 2005, an original drawing by Basset commemorating America's return to flight lifted off launch pad 39B along with the crew of the space shuttle Discovery for a near flawless 13-day mission. Brian Basset is married and the father of two boys."
# ("Rip Haywire", "http://comics.com/rip_haywire"), # ("Rip Haywire", "http://comics.com/rip_haywire"),
# "The Adventure Comic Strip is Back -- With a Twist -- in \u201cRip Haywire\u201d. Rip Haywire is a soldier of fortune, a contemporary adventure hero in the classic mold: a brave, square-jawed man of honor who lives for danger. He\u2019s also a bit of a lug. Accompanied on random adventures by his cowardly dog TNT and his venomous ex-girlfriend Cobra, Rip tracks down lost treasure, takes down madmen and takes on any job that promises heart-pounding action, peril and intrigue! And, of course, cash. For Rip Haywire and his pals, every adventure can turn into a surf-and-turf platter of nonstop trouble -- or it can just deal with the everyday hazards of a life lived to the max. Rip Haywire is an action-packed, silly send-up of the adventure comic strip that takes readers on a roller-coaster ride across the globe and shows how even studly mercenaries get yelled at by their mothers. "
# ("Ripley's Believe It or Not!", "http://comics.com/ripleys_believe_it_or_not"), # ("Ripley's Believe It or Not!", "http://comics.com/ripleys_believe_it_or_not"),
# "Fascinating illustrated facts from around the world. Ripley's Believe it or Not!, one of the longest-running comic panels in history, continues to fascinate comics readers with unbelievable facts from around the world. Currently illustrated by John Graziano, these fascinating panels are read every day in nearly 40 countries. The panel gives readers a view of the unusual that earned originator Robert Ripley his fame. Ripley's has developed a worldwide following since Robert Ripley's first Believe it or Not! cartoon appeared in The New York Globe in 1918. Over the next decade, the panel established a tradition of bringing phenomenal events to local newspapers. Ripley traveled all over the world to find the strange tidbits for his Believe It or Not! books and comic strip. He continued to do the strip until he died in 1949. The panel was later drawn by Walter Frem, and then by Don Wimmer. Current illustrator Graziano has been working as an artist and illustrator since 1983, when he received a certificate in illustration from the Newark School of Fine and Industrial Arts. He has designed trading card sets and a portrait series based on the 1960s cult TV show \"Dark Shadows.\" Graziano has also created comic strips for Scream Queens magazine, designed t-shirts graphics and created storyboards and concept drawings for Hollywood films."
# ("Rose Is Rose", "http://comics.com/rose_is_rose"), # ("Rose Is Rose", "http://comics.com/rose_is_rose"),
# "In a melting pot of fantasy and reality, Rose is Rose presents the extraordinary nature of everyday life as seen through the eyes of the Gumbo family. Rose is Rose and creator Pat Brady have received many accolades, including the highest honor in the industry -- the National Cartoonists Society's Reuben Award for Outstanding Cartoonist of the Year (2004). Brady has also received the prestigious Wilbur Award from the Religious Public Relations Council. The strip stars child-at-heart Rose and her ASD (Attentiveness Surplus Disorder) husband Jimbo. Their gentle son Pasquale is watched over by his Guardian Angel who morphs from tiny cherub into gargantuan protector. Family kitten Peekaboo boasts that her humans are the cutest in town. Readers relish the romance in Rose and Jimbo's marriage, yet cheer the emergence of Rose's rebel alter ego, the fearless, wild and ready-to-roll Vicki the Biker. "
# ("Rubes", "http://comics.com/rubes"), # ("Rubes", "http://comics.com/rubes"),
# "Rubes, a single panel cartoon inspired by a collection of greeting cards. Maybe you could call Leigh Rubin a sit-down comedian. But whatever you call him, he\u2019s just gratified to have the opportunity to make other people laugh. With his cartoon panel, Rubes, in hundreds of newspapers across the country and gracing millions of greeting cards, mugs and T-shirts, Rubin has plenty of opportunities. In addition to drawing Rubes, Leigh also enjoys a busy schedule giving thought provoking and entertaining cartooning workshops and presentations for schools as well as professional organizations all around the country. Leigh is married and has three sons."
# ("Rudy Park", "http://comics.com/rudy_park"), # ("Rudy Park", "http://comics.com/rudy_park"),
# "Rudy Park is the story of a modern family connected not by blood, but by something much more powerful: caffeine. These friends, misfits and latte addicts - like many Americans in search of connection - find their sense of community at a cafe. A smart, contemporary satire Rudy Park is drawn by Darrin Bell and written by Theron Heir. At the center of the strip is Rudy Park, a 20-something cafe manager and archetypal Generation X-er. Among the regulars at Rudy's workplace, the House of Java, is his arch-nemesis, Sadie Cohen, an octogenarian with an attitude. Other central characters include Rudy's boss, Armstrong Maynard, a cheap capitalist; Rudy's Uncle Mort, a raving liberal lunatic; Randy \"The Rock\" Taylor, a former football star; and Darlene Desai, a workaholic and Rudy's unrequited love. The House of Java is a both hangout for the strip's characters and a forum for contemporary issues. The strip is peppered with cameo appearances by a variety of newsmakers, from politicians to pop stars. Theron Heir is the pen name for Matt Richtel, a journalist who writes for The New York Times."
# ("Scary Gary", "http://comics.com/scary_gary"), # ("Scary Gary", "http://comics.com/scary_gary"),
# "After 700 years of relentless vampirism, Gary's ready to retire his fangs, gather up his henchman and retire to a sleepy suburban neighborhood. A laid-back prince of darkness, Gary has always felt he's a suburbanite trapped in a vampire's body. So after 700 years of relentless vampirism, he retires his fangs, gathers up his henchman and retires to a sleepy suburban neighborhood. Swapping blood for deck, Gary wants nothing more than to quietly blend into the suburban landscape. Not an easy task when your nefarious and defiant henchman is terrorizing the neighbors. "
# ("Shirley and Son Classics", "http://comics.com/shirley_and_son_classics"), # ("Shirley and Son Classics", "http://comics.com/shirley_and_son_classics"),
# "Shirley and Son, a loving blend of reality and humor reflecting the lives many people are living today. Shirley and Son stars an eight-year-old boy, Louis, whose parents are divorced but are both very involved in raising their son. Like many children of divorced parents, Louis wishes that Shirley and Roger would get back together but they are doing the best they can to get on with their lives. As Bittle explained the strip, \"Shirley and Roger are nice people and things just didn't work out for them in their personal lives. We've all had relationships that didn't work out and we pick up the pieces and get on with it. I think a lot of people will relate to the love in this comic strip. Even when things don't go the way we planned, we still go on.\" Bittle grew up in Wichita, Kansas. He lived with his wife and three daughters in Dallas, Texas, until his death in 2003. Bittle also created the comic strip Geech, a humorous look at life in a small town, also distributed by United Feature Syndicate. Both Geech and Shirley and Son display the cartoonist's unique ability to combine humor with keen, realistic and insightful observations about everyday life."
# ("Soup To Nutz", "http://comics.com/soup_to_nutz"), # ("Soup To Nutz", "http://comics.com/soup_to_nutz"),
# "Sibling rivalry reigns in this funny family farce. The Nutz family is definitely not the Cleavers, the Waltons or the Bradys. But you'll undoubtedly recognize them anyway. Most likely, they're a lot like the family you grew up in... where the battle for the last chicken leg is comparable to the Battle of Bull Run, sibling rivalry is putting it mildly, and family values usually refers to a coupon book. Soup to Nutz by Rick Stromoski stars hard-working Roy Nutz, his loving wife Pat, and their battling brood - sons Roy-boy and Andrew, daughter Babs and rambunctious dog Rosco. Stromoski is the seventh in a family of 12 children. Growing up in such a large family has given him an especially developed sense of humor that he has expressed through drawing from the moment he could pick up a pencil. A self-taught cartoonist and humorous illustrator, his work has appeared in national magazines, children's and humor books, newspapers, licensed products, national advertising and network television. Stromoski's greeting cards have become best-sellers for several major companies. "
# ("Speed Bump", "http://comics.com/speed_bump"), # ("Speed Bump", "http://comics.com/speed_bump"),
# "If life were a movie, these would be the outtakes. Speed Bump appear in over 200 newspapers internationally. In May 2000, the first \"Speed Bump\" book was published, Speed Bump: A Collection of Cartoon Skidmarks (Andrews McMeel). More recent books include Speed Bump: Cartoons for Idea People (2004, ECW Press), which was named Humor Book of the Year by Foreword Magazine, and Just One %$#@ Speed Bump After Another\u2026 (2005, ECW Press). In addition, American Greetings has carried a best-selling line of \"Speed Bump\" calendars and greeting cards, which won a \"Retail Excellence\" award in 2000. Coverly grew up in Plainwell, Michigan, and began taking cartooning seriously in 1986 as an undergraduate student at Eastern Michigan University. He continued his cartooning in graduate school at Indiana University, where his panel won numerous national awards; he was graduated from IU with a master's in creative writing in 1992. In 1994, Creators Syndicate picked up his untitled cartoon panel, helped choose the name \"Speed Bump,\" and a year later, it was running in nearly 100 papers. In 1995 and in 2003, \"Speed Bump\" was given the Best in Newspaper Panels award by the National Cartoonists Society, an honor for which it was also nominated again in 1997, 2001, and 2002. In 1998, the same organization gave him another award for Best Greeting Cards, which were nominated again in 1999. In both 2004 and 2005, Coverly was nominated by the NCS for the prestigious Reuben Award, given to the Outstanding Cartoonist of the Year."
# ("Spot The Frog", "http://comics.com/spot_the_frog"), # ("Spot The Frog", "http://comics.com/spot_the_frog"),
# "The sweetly funny, beautifully drawn world of a lovable little frog and the two-legged mammals who fascinate him. In Spot the Frog, readers learn what Spot already knows: that life is a glass that's always half full. And, if you're a small green frog, that's just the right size for a dip. Spot is an exuberant frog who sometimes doesn't see things for what they really are. For him, a sink full of dirty dishes is a pond to splash in, and a lamp is something to bask under. Karl, Spot's human friend, is a laid-back guy. He goes with the flow, even when the flow is a frog at the door with a suitcase. He looks out for Spot in a grandfatherly way. He's thoughtful and accepting - you'd have to be to welcome a frog into your home. \"Many of today's comic strips feature edgy characters,\" says Heath. \"Spot the Frog is gentler, more whimsical, with a sense of the fantastic. It's about innocence and wisdom and the complete appreciation of what you have. I want readers to learn about Spot, just as Karl does. Every year should bring something new. And every week should bring something unexpected.\" Mark Heath was born 1960 in New Hampshire. Heath attended the University of New Hampshire for a few semesters, long enough to know that high school would be the peak of his academic career. He wanted to be a writer, not a teacher, so he quit school and worked for the next eight years at an assortment of jobs, writing stories at night and every weekend. He sold his first cartoon in the early 1980s to Wildbird Magazine. He sold his second cartoon several years later to Writer's Digest. Since then, his pace has improved. Heath is a freelance cartoonist and an occasional writer of science fiction. His work has appeared in publications including Reader's Digest, First For Women, Women's World, Pirate Writings, Strange Horizons, American Scientist, Asimov's and The Magazine of Fantasy & Science Fiction. He has designed animated greeting cards for Amazon.com and print cards for Marcel Schurman Fine Arts, Recycled Paper Greetings and Renaissance Greetings. He is the author of Drawing Cartoons (North Light Books, 1998). One of his favorite hobbies is playing the trumpet. Heath currently lives in Rhode Island.h"
# ("State of the Union", "http://comics.com/state_of_the_union"), # ("State of the Union", "http://comics.com/state_of_the_union"),
# "Through political cartooning, Moore perfected the combination of political satire, caricatures and humor that are on display in State of the Union. For Carl Moore, a self-described \"fallen liberal,\" his journey to becoming a cartoonist has taken a few strange turns. The cartoonist was once a radical socialist majoring in English literature at the University of California at Berkeley in the early '60s. After watching some fellow socialists throw bricks at police during a 1968 demonstration, however, Moore began to rethink his political leanings. Once he received his degree from design school in 1989, Moore became a freelance editorial cartoonist, publishing his work in newspapers such as the Long Beach Press-Telegram and the San Diego Union-Tribune. He also began drawing cartoons that appeared regularly in the National Review. "
# ("Strange Brew", "http://comics.com/strange_brew"), # ("Strange Brew", "http://comics.com/strange_brew"),
# "With the creation of \"Strange Brew,\" Deering now has an outlet for his creative sense of humor and quirky view of life. \"Being an editorial cartoonist today, you have to be tuned-in to pop culture as well as politics -- but there are some limits to what you can do,\" Deering says \"In Strange Brew, everything's fair game. I get to cut loose and draw anything.\" As an editorial cartoonist, Deering has received numerous honors. Winner of the National Press Foundation's 1997 Berryman Award, Deering also gained top honors in the 1994 national John Fischetti Cartoon Competition and was the seven-time winner of the Arkansas Press Association's Best Editorial Cartoonist award. Born in Little Rock in 1956, Deering has been drawing since his childhood fascination with science fiction and dinosaurs -- subjects he made into comic books. After studying art with Truman Alston, Deering focused on commercial and fine at the University of Arkansas. At the Democrat-Gazette, Deering advanced from layout artist to editorial cartoonist in 1981-82. His promotion to chief editorial cartoonist in 1988 made his cartoons the state's best-known. "
# ("Tarzan Classics", "http://comics.com/tarzan_classics"), # ("Tarzan Classics", "http://comics.com/tarzan_classics"),
# "The famous jungle man and legendary hero created by Edgar Rice Burroughs. Tarzan is one of the most widely known characters in modern fiction, having appeared in books, in movies and on television. A legendary hero, Tarzan enjoys the distinction of starring in the first adventure comic strip, the first continuity strip and the first strip to appeal to generation after generation for more than seven decades. Disney's full-length animated Tarzan feature was released with great success in 1999, marking the 48th film adaptation of the loincloth legend. Tarzan is popular in more than 50 countries around the world. Tarzan originated in Burroughs' 1912 short story \"Tarzan of the Apes.\" Several books followed, and in 1929, the Lord of the Jungle made his first appearance in a daily comic strip. In 1930, United Feature Syndicate took over the syndication of Tarzan, launching the first Sunday comic in 1931. UFS continues to syndicate classic Tarzan daily and Sunday strips. TARZAN TM owned by Edgar Rice Burroughs, Inc. and Used by Permission. Copyright (c) Edgar Rice Burroughs, Inc.. All Rights Reserved."
# ("That's Life", "http://comics.com/thats_life"), # ("That's Life", "http://comics.com/thats_life"),
# "This quick-witted, wry and intelligent comic about modern society is appreciated by all of us who must live life on its own terms. \"Life happens,\" explains The Washington Post Writers Group. \"Thankfully, when it does, there's always another way of looking at things."
# ("The Barn", "http://comics.com/the_barn"), # ("The Barn", "http://comics.com/the_barn"),
# "Where sarcastic cows evade maniacal butchers, cute sheep befriend cranky goats and veterinarians try to control the chaos. This adorable comic strip follows the lives of barnyard animals Stan the bull, Rory the sheep, Jim the pig and more as they evade the butcher\u2019s knife and the chef's menu with the help of their veterinarian friends Brenda and Harold. Will Stan ever win the heart of the newly-arrived cow, Juanita? Can Doug the goat accept the friendly advances of sweet sheep, Rory? Or will Chef Rene triumph and expand his menu to include the cuddly denizens of The Barn? "
# ("The Born Loser", "http://comics.com/the_born_loser"), # ("The Born Loser", "http://comics.com/the_born_loser"),
# "Lovable loser Brutus Thornapple can't get a break, on the job, at home, or anywhere. Chip Sansom began preparing to become The Born Loser at the age of 14 when his father, the late Art Sansom, first created The Born Loser comic strip. That was 1965. After years of observing and assisting his father, Chip is now in the role he was destined for - cartoonist for The Born Loser. A classic comic strip, it is a favorite with readers in all demographic groups, consistently finishing at the top of comic surveys. The Born Loser began as a strip with no central characters that revolved around the loser theme. Gradually, it developed into the comic we see today, starring lovable loser Brutus Thornapple, his wife Gladys, mother-in-law Ramona Gargle, boss Rancid Veeblefester, dim-witted son Wilberforce and the mischievous neighbor Hurricane Hattie O'Hara. "
# ("The Buckets", "http://comics.com/the_buckets"), # ("The Buckets", "http://comics.com/the_buckets"),
# "A frenetically funny snapshot of modern family life: the worries, the mayhem and the often-overlooked rewards. The Buckets is written and illustrated by Greg Cravens and offers a realistic snapshot of modern family life: the worries, the mayhem and the often-overlooked rewards. Examining everyday chaos with a healthy sense of humor, it strikes a chord with parents who juggle the many demands and the mild insanity of raising a family today. Cravens graduated from the University of Memphis in 1987. He met original Buckets creator Scott Stantis while still in college and later called him up with questions about becoming a cartoonist. When, years and years later, Stantis decided to concentrate on writing The Buckets, Cravens was quick to point out that he could mimic Stantis' art style. They began collaborating in 2001, and Cravens took over the strip completely in 2006. In addition to The Buckets, Cravens draws editorial illustrations for various papers, advertising cartoons for a broad range of corporate clients and children's activity books for restaurants, hospitals and businesses. "
# ("The Dinette Set", "http://comics.com/the_dinette_set"), # ("The Dinette Set", "http://comics.com/the_dinette_set"),
# "A lively hustle and bustle of people who truly enjoy every moment of belonging to the masses. Mass consumerism is exciting and colorful!"
# ("The Grizzwells", "http://comics.com/the_grizzwells"), # ("The Grizzwells", "http://comics.com/the_grizzwells"),
# "This family of grizzlies is the comic strip with bite. Created by Bill Schorr, The Grizzwells features a four-bear family of grizzlies. Schorr's quick wit, penchant for puns and razor-sharp observations make for a roller-coaster ride of laughs. For a family strip with bite, you can't do better than The Grizzwells. Edgy, bright and quick, Schorr's writing is refreshing. The loose pen strokes of his illustrations are of the caliber that was once considered standard fare on the comics page. Schorr admits The Grizzwells is loosely based on his own family life - with a twist. For example, like many husbands and wives, Gunther and Flora argue about taking out the garbage. But Flora also complains about her husband eating the garbage! "
# ("The Humble Stumble", "http://comics.com/the_humble_stumble"), # ("The Humble Stumble", "http://comics.com/the_humble_stumble"),
# "Therapy for the sometimes overwhelming challenges of being both mom and dad. The Humble Stumble was born in late 2000 when Roy Schneider suddenly found himself in the unfamiliar and scary position of being fully responsible for the upbringing of his then-9-year-old daughter. Schneider originally created the comic as therapy, as the sometimes overwhelming new challenges of being both Mom and Dad often left Roy with no choice but to laugh at himself while attempting unfamiliar domestic tasks (for example, \"stumbling\" back and forth through the grocery store for an hour and a half to find six items). Roy Schneider has been a professional cartoonist since 1992. His work has been published in magazines, greeting cards, card games and other media, but his goal from the start has been to have a syndicated daily comic strip; probably the result of learning to read from stacks of Peanuts and Dennis the Menace paperbacks as a very young child. In addition to Charles Schulz and Hank Ketcham, his earliest influences include MAD magazine's Sergio Aragones and Don Martin, classic animation from Warner Brothers and MGM (director Tex Avery, in particular), later studying the work of such underground artists as Gilbert Shelton and Robert Crumb, and becoming an avid Monty Python fan. He was eventually lured back to the newspaper comics pages when Bill Watterson's \"Calvin and Hobbes\" caught his attention quite profoundly in the late 1980s. In addition to cartooning, Roy is a professional musician and enjoys music festivals, camping, cooking, travel and getting horrendously dirty and sweaty out in the yard. He lives in Florida with his sweetheart and their two children."
# ("The Knight Life", "http://comics.com/the_knight_life"), # ("The Knight Life", "http://comics.com/the_knight_life"),
# "A deft blend of goofy humor and political insight that puts the \u201cfunny\u201d back into the funny pages with uniquely dynamic style. The Knight Life is a hilariously twisted view of life through the eyes and pen of its creator, community-oriented urban hipster and award-winning cartoonist Keith Knight. The Knight Life deftly blends political insight and neurotic humor in a uniquely fluid and dynamic style, offering a comic strip that\u2019s fresh, sharp, topical and funny. Designed for daily newspapers, The Knight Life follows Knight\u2019s long-running, 2007 Harvey Award-winning weekly comic strip \"The K Chronicles,\" which appears on salon.com. An unabashedly provocative political and social satire, The Knight Life tackles contemporary issues like consumer culture, bacon, the media, race, family and everything else, gently mocking the minutiae of daily life with self-deprecating humor, honesty and goofiness\u2014a combination that\u2019s perfect for the comics. And The Knight Life\u2019s energetic style reminds readers that comics can look funny as well as read funny. The result is accessible yet edgy, compassionate and political\u2014and never preachy. Knight won the 2006 and 2007 Glyph Awards, in addition to the 2007 Harvey Award for Best Comic Strip (for \u201cThe K Chronicles\u201d). He creates \u201c(Th)ink,\u201d a weekly comic panel, and is a frequent contributor to Mad Magazine and ESPN The Magazine. He also raps in the \u201csemi-conscious\u201d hip-hop group, the Marginal Prophets. "
# ("The Meaning of Lila", "http://comics.com/the_meaning_of_lila"), # ("The Meaning of Lila", "http://comics.com/the_meaning_of_lila"),
# "The strip centers around Lila, her cubicle partner and close friend Boyd, and their friend and co-worker Drew. Lila works as a customer service representative, answering telephones for MetroMart, a fictional large retail store in Cleveland, Ohio. She dislikes her job, but seems too afraid or unmotivated to change the status quo. She is in her mid to late 20s and her main objectives in life are finding the right man and the right pair of shoes. Lila is very attractive, but seems to lack confidence in herself. Lila is also shallow, materialistic, and self-centered. She doesn't read books or newspapers, but loves to read celebrity gossip and fashion magazines. Lila runs her own shoe blog on the Internet, where she writes about and gives advice about women's shoes. Despite her shortcomings, she is still a nice and friendly person. She has a cat named Frankie."
# ("The Other Coast", "http://comics.com/the_other_coast"), # ("The Other Coast", "http://comics.com/the_other_coast"),
# "This strip blends environmental, political, and animal rights issues with comedy. Born in 1957, in Dunedin, New Zealand, Adrian Raeside got his start in cartooning by drawing on washroom walls as a kid. Editorial cartoonist for the Victoria Times Colonist for over 27 years, Raeside\u2019s editorial cartoons appear in over 250 newspapers and magazines worldwide, from the Los Angeles Times to Newsweek Japan. Raeside founded and operated an animation company in 1988, to animate editorial cartoons for the CBC Journal. Over the next four years he created, directed and produced dozens of animated shows for CBS, Turner Broadcasting and Children\u2019s Television Workshop, including adapting two Jim Henson Muppet characters for animation. Raeside left the production business in 1992, but is still actively involved in the creative side, having since written over 60 scripts for various animated TV shows. The Other Coast strip was picked up by Creators Syndicate in 2001 and now appears in over 200 newspapers worldwide. The second Other Coast collection, This Is Your First Rock Garden, Isn't It? was published in 2005. "
# ("The Sunshine Club", "http://comics.com/the_sunshine_club"), # ("The Sunshine Club", "http://comics.com/the_sunshine_club"),
# "The Sunshine Club explores the universal human experience of growing up and growing older. With wit and insight, it goes beyond the cliches of cranky retirees and inattentive children to celebrate candidly the human side of change. There's no other way to say it. Aging is a fact of life. It starts at birth and never stops. It's as much a part of our world as eating and sleeping. It's inevitable, if not always welcome. Since we can't control it, the best course of treatment is to laugh about it. That's why there's The Sunshine Club - Life in Generation Rx, a daily and Sunday comic strip by Howie Schneider. The characters are easily recognizable. They are married, single, widowed, flirtatious, romantic, sentimental, philosophical, lonely, gregarious and nostalgic. Our imperfections were never so funny as they are in The Sunshine Club. Howie Schneider (1930-2007). He was the creator of the nationally syndicated comic strip \"Eek and Meek,\" which appeared for 35 years in more than 400 newspapers through Newspaper Enterprise Association. Schneider later created The Sunshine Club in 2003 and continued until his death. He was also a magazine cartoonist whose work was published in The New Yorker, Playboy, Esquire, Redbook, McCall's and many other publications. He was editorial cartoonist for the Provincetown (MA) Banner, an award-winning weekly newspaper, and he twice won the award for Best Editorial Cartoon from the New England Press Association. Schneider co-authored and illustrated Amos: The Story of an Old Dog and His Couch, The Amazing Amos, Amos Ahoy! and Amos Camps Out (Little, Brown). He was illustrator of Blumpoe the Grumpoe Meets Arnold the Cat (Little, Brown); and author and illustrator of Uncle Lester's Hat, No Dogs Allowed (Putnam) and Chewy Louie (Rising Moon), now in its seventh printing. His cartoon books include Howie Schneider Unshucked (On Cape Publications), The World is No Place for Children, The Deceivers (Doubleday), and Mom's the Word (World). There are also three Eek and Meek collections (Pocket Books). In addition to his cartooning, painting and publishing work, Schneider was an accomplished sculptor who worked in bronze, terra cotta and plaster and created likenesses of New Yorker cartoonist Mischa Richter, U.S. Poet Laureate Stanley Kunitz, and many others. Schneider served 20 years on the board of the Newspaper Features Council and eight years on the board of the National Cartoonists Society. He passed away in 2007 at the age of 77."
# ("Unstrange Phenomena", "http://comics.com/unstrange_phenomena"), # ("Unstrange Phenomena", "http://comics.com/unstrange_phenomena"),
# "Welcome to the land of UNSTRANGE PHENOMENA, where the weird and the cantaloupe play. Mr. Allison has spent a lifetime rummaging abandoned warehouses, searching for answers to questions that the human race has asked since the beginning of time. This feature, Unstrange Phenomena, will explain the mysteries of the universe and reveal the unsuppressed knowledge of the ages. Be prepared for strange facts that defy natural laws and refute our accepted notions about blah, blah, blah and everything else. Watch for the grand opening of the Unstrange Phenomena Museum, to be located in the brown mobile home across the road from the county jail in Tinfoil, Texas."
# ("Watch Your Head", "http://comics.com/watch_your_head"), # ("Watch Your Head", "http://comics.com/watch_your_head"),
# "\u201cWatch Your Head\u201d chronicles the lives of six students attending Oliver Otis University. The strip is told largely through the eyes of Cory, a freshman who\u2019s academically brilliant and socially awkward, especially with girls. His first friend at Otis U. is Omar, a recluse who some suspect is tied umbilically to his computer. Quincy, Omar\u2019s friend (and therefore Cory\u2019s friend by default), seems primarily to be studying women and fun and rarely has a serious moment. Kevin is a foreigner times two\u2014one of the few whites on the predominantly black campus, and Canadian to boot. Robin is the object of Cory\u2019s crush, the woman who leaves him befuddled and tongue-tied. And Jason is Cory\u2019s roommate and polar opposite. Cory Thomas spent his formative years in San Fernando, Trinidad. As a child, his interest in comic books soon developed into an interest in art and cartooning. In 1998, Thomas accepted a full academic scholarship to Howard University in Washington, D.C., to study mechanical engineering. He graduated magna cum laude in 2002 and then returned to Howard in 2003 to acquire his masters degree. That year he also became a fulltime illustrator at the Hilltop, Howard University's newspaper, where he presented the earliest versions of \"Watch Your Head.\" Today, Thomas creates his strip from his home just outside Washington."
# ("Wizard of Id", "http://comics.com/wizard_of_id"), # ("Wizard of Id", "http://comics.com/wizard_of_id"),
# "The riotous reign of Id's merciless miniature monarch seems secure -- and millions of loyal subjects around the world wouldn't have it any other way. The Wizard of Id has been enchanting audiences since 1964, but the real wizards behind this comic classic were artist Brant Parker and writer Johnny Hart. The pair began paving the path to the Kingdom of Id in 1950, when Parker, a staff artist for the Binghamton Press in upstate New York, was asked to judge a high school art contest. Among the entrants was teenager Johnny Hart, whose work so impressed Parker that he arranged a meeting. Parker and Hart discovered a mutual interest in cartooning, hired an agent and began submitting work to such magazines as the Saturday Evening Post, Collier's and Good Housekeeping. By the end of the decade, Parker was working as an art director at IBM and Hart had created the comic strip B.C., a prehistoric parody of modern man's foibles. In 1964, Hart brought that comic concept even further up to date -- from the Stone Age to the Middle Ages, to be exact -- added a castle of characters and took the premise of The Wizard of Id to Parker. More than a quarter of a century later, Brant Parker passed the torch to his son, Jeff, in 1997. The kingdom they conjured up thrives as well. The Wizard of Id is syndicated to more than 1,000 newspapers worldwide, has generated more than a score of trade paperbacks and consistently earns top rankings in readership polls. The strip has also earned numerous awards, including Best Humor Strip Awards from the National Cartoonist Society. Parker and Hart each were awarded the NCS's Reuben Award for Cartoonist of the Year: Hart in 1971 and Parker in 1984."
# ("Working Daze", "http://comics.com/working_daze"), # ("Working Daze", "http://comics.com/working_daze"),
# "Working Daze is a slightly skewed look at life in a modern, high-tech office. The comic centers around the staff of MacroMicroWare, a computer company that makes a bunch of products, though nobody is really certain what their main market focus is. Still, the CEO is mega-rich, so the staff assumes that somebody somewhere must be doing something right. John Zakour is a humor\/sci-fi writer and graduate student in Human Behavior. In the past, he has done such diverse things as write zillions (well, thousands) of gags for syndicated cartoonists and comedians, ride ambulances as an Emergency Medical Technician, work as a Web guru for a major university (which helped lead to creating Working Daze), write greeting cards, and assistant-teach Judo. His humorous sci-fi book, The Plutonium Blonde, is published by Daw books and is available at fine bookstores all over the country (and now in Russia also). Scott Roberts has worked with John on many projects over the years, starting with the Rugrats comic strip. Scott is the creator of the long-running Patty Cake comic, and a longtime free-lancer for Nickelodeon Magazine and DC Cartoon Network comics. He currently colors and letters Prince Valiant. His work can be viewed at http:\/\/webcomicsnation.com\/scottartist\/. "
# ("Working It Out", "http://comics.com/working_it_out"), # ("Working It Out", "http://comics.com/working_it_out"),
# "This comic strip centers around a character named \"Mr Jamison\" \u2013 a bushy-moustached, pencil-nosed low-level manager who seems to take delight in the suffering and mistreatment of his subordinates. Born in 1968, in South Florida, Charlos Gary always dreamed of becoming a cartoonist. One of seven children raised by his parents in an inner-city section of Orlando, he knew at an early age that his artistic ability could become a way out of poverty. However, it wasn't until two years later at the University of Toledo's paper, The Collegian, that he committed himself to becoming a serious cartoonist. After graduation in 1995, his first professional political cartoon appeared in the (Elmira, N.Y.) Star-Gazette, where he got started as a graphic artist. In 1997, Gary moved to Chicago, where he split his time between drawing cartoons and creating graphics for the (Arlington Heights, Ill.) Daily Herald. His work there earned him several awards and honors, including a Pulitzer Prize nomination in 1999. Later that year, Gary began working for the Chicago Tribune as a graphic artist. His cartooning talent didn't go unnoticed in the newsroom, and within two years, he created a single-panel strip called Working It Out, which ran weekly in the Tribune's business section. Gary currently lives in St. Petersburg, Fla., with his wife, Agustina."
# ("Zack Hill", "http://comics.com/zack_hill"), # ("Zack Hill", "http://comics.com/zack_hill"),
# "Ten-year-old Zack now lives with his widowed mother, who runs a boarding house full of oddballs. A hyperactive kid with an overactive imagination, Zack sometimes causes her to pull her hair out as she tries to make ends meet. The comic appears in over 20 major newspapers, including the Chicago Sun-Times, the Seattle Times, the Philadelphia Daily News and the Buffalo News. Zack Hill is currently being developed into an animated TV show by TV writer Will Schifrin (Fraser) and producer Prudence Fenton (Pee Wee's Funhouse). Zack Hill is also being adapted into a musical by Werner Trieschmann and Tom Tierny (Eleanor). Zack Hill can be seen every day on seattletimes.com or Comics.com. John Deering's family encouraged his early displays of artistic talent, and he decided to pursue a career in art. He studied painting with portrait artist Truman Alston and majored in Fine Art at the University of Arkansas at Little Rock. In 1981, John landed a job at the Arkansas Democrat-Gazette, where his cartooning ability developed in the paper's editorial art department. He was promoted to chief editorial cartoonist in 1988. Numerous regional and national awards soon followed, as John won the John Fischetti Cartooning Award from Columbia College, Chicago, in 1993 and the Berryman Award from the National Press Foundation in 1997. John's editorial cartoons and a comic panel, Strange Brew, are also distributed nationally by Creators Syndicate. John lives in Little Rock with his wife, Kathy, and their sons, Will and Matthew, who provide real-life inspiration for Zack Hill. John's experience as a comic strip writer began years ago when he wrote for Archie Comics Inc. John worked with famed Archie artist Dan DeCarlo, creator of Josie and the Pussycats, writing the Archie comic strip, which ran in over 250 newspapers around the world. He wrote and directed the award-winning independent feature film Best Man in Grass Creek. The film was presented in over 10 film festivals, such as the Montreal Film Festival. It won three awards, including the Bronze Award at the Flagstaff Film Festival, and Best Comedy at the Santa Clarita Film Festival in Los Angeles. Before making his first feature film, John was the VP of Development for Morgan Freeman's production company, Revelations Entertainment in Santa Monica, Calif. He also assisted talent manager Beverlee Dean, who has represented such talent as Reese Witherspoon, Kevin Sorbo and Jim Caviezel."
# ("(Th)ink", "http://comics.com/think"), # ("(Th)ink", "http://comics.com/think"),
# "Tackling the political and social issues impacting communities of color." # "Tackling the political and social issues impacting communities of color."
# ("Adam Zyglis", "http://comics.com/adam_zyglis"), # ("Adam Zyglis", "http://comics.com/adam_zyglis"),
# "Known for his excellent caricatures, as well as independent and incisive imagery. " # "Known for his excellent caricatures, as well as independent and incisive imagery. "
# ("Andy Singer", "http://comics.com/andy_singer"), # ("Andy Singer", "http://comics.com/andy_singer"),
# "Andy Singer's cartoons are based on his own experiences and what he sees in the world around him. He loves comedy and humor, but is also interested in politics, philosophy, religion, art and history, which is reflected in his cartoons."
# ("Bill Day", "http://comics.com/bill_day"), # ("Bill Day", "http://comics.com/bill_day"),
# "Powerful images on sensitive issues." # "Powerful images on sensitive issues."
# ("Bill Schorr", "http://comics.com/bill_schorr"), # ("Bill Schorr", "http://comics.com/bill_schorr"),
# "Strong commentary with pointed humor, winner of the National Cartoonists Society\u2019s Editorial Cartoon Award. Also Bill Schorr pens the Grizzwells seen here on Comics.com. "
# ("Bob Englehart", "http://comics.com/bob_englehart"), # ("Bob Englehart", "http://comics.com/bob_englehart"),
# "Englehart studied at the American Academy of Art in Chicago before joining the staff of Chicago Today as cartoonist. He now works full-time as editorial cartoonist for The Hartford Courant. "
# ("Brian Fairrington", "http://comics.com/brian_fairrington"), # ("Brian Fairrington", "http://comics.com/brian_fairrington"),
# "Brian is one of the most accomplished young cartoonists in the country. Brian was the recipient of the Locher Award, the Charles M. Schulz Award, and several Society of Professional Journalists awards and Gold Circle Awards. "
# ("Bruce Beattie", "http://comics.com/bruce_beattie"), # ("Bruce Beattie", "http://comics.com/bruce_beattie"),
# "Bruce Beattie has been creating captivating and controversial editorial cartoons since 1986. He is also creator of a comic strip, and his work has been featured in several museum exhibits, including the State of Florida's Museum of History. Beattie graduated from the University of Pennsylvania with a degree in Oriental studies and attended the Art Center College of Design in Los Angeles. He began his career at The Honolulu Advertiser and then moved on to the Daytona Beach News-Journal, where he has been editorial cartoonist since 1981. His awards include the Florida Society of Professional Journalists' Sunshine State Award for Excellence in Editorial Cartoons and the Florida Press Club's Award for Excellence in Journalism. "
# ("Cam Cardow", "http://comics.com/cam_cardow"), # ("Cam Cardow", "http://comics.com/cam_cardow"),
# "Cam's editorial cartoons take aim at many of the issues in the news today: Meech Lake, the GST, developments in Europe, steroids, the revolution in China, Canada's love affair with the NHL, and much more. Cam's deft pen skillfully skewers politicians and eloquently illustrates the world's current events. Cam is the pen name of Cameron Cardow, the editorial cartoonist at the Regina Leader Post. Cam recently won the Canadian National Newspaper Award for Cartooning, and his inimitable style will be familiar to anyone who reads a newspaper - his cartoons have appeared in almost all of the major daily papers in Canada."
# ("Chip Bok", "http://comics.com/chip_bok"), # ("Chip Bok", "http://comics.com/chip_bok"),
# "Chip Bok began his career as the editorial cartoonist at the Clearwater Sun in 1980. In 1983, he joined Knight-Ridder\u2019s early online venture, Viewtron. He also illustrated Dave Barry\u2019s column and drew a weekly cartoon for the Miami Herald\u2019s late great Sunday magazine, Tropic. He became editorial cartoonist for the original John S. Knight paper, the Akron Beacon Journal, in 1987. From his drawing board at the Akron Beacon Journal, Chip Bok has won two National Cartoonists Society awards for Best Editorial Cartoonist (1995, 1999). He was a Pulitzer finalist in 1997. Other awards include the Fischetti Award (1988), National Press Foundation Berryman award (1993), H.L. Mencken Award (1993), and four Ohio A.P. Awards (1992, 1996, 1999, 2000). Bok\u2019s cartoons appear in Time, Newsweek, Washington Post, The New York Times, The Los Angeles Times and many other newspapers, magazines and websites through Creators Syndicate. He is the author of two books: Bok! The 9\/11 Crisis in Political Cartoons (University of Akron Press, 2002) and A Recent History of the United States in Political Cartoons: A Look Bok! (University of Akron Press, 2005). Bok is a graduate of the University of Dayton and currently lives in Akron with his wife Deb and two of their four children."
# ("Chris Britt", "http://comics.com/chris_britt"), # ("Chris Britt", "http://comics.com/chris_britt"),
# "Chris Britt's political cartoons are sometimes controversial, often outrageous and always thought-provoking. His take-no-prisoners style has been entertaining readers since 1991. A self-described liberal, Britt nevertheless delights in skewering deserving politicians of every persuasion. His numerous awards include first place for editorial cartooning from the Washington Press Association in 1995, the National Press Foundation's Berryman Award as editorial cartoonist of the year in 1994, and the Sigma Delta Chi Award for editorial cartooning from the Society of Professional Journalists in 2009. "
# ("Chuck Asay", "http://comics.com/chuck_asay"), # ("Chuck Asay", "http://comics.com/chuck_asay"),
# "Chuck sifts the events of the day through his biblical worldview and tries to persuade readers to see things his way. That rights are given by a higher authority than the governments of men, that mankind is not the ultimate arbiter of truth and that our Constitutional Republic is worth protecting. Chuck believes ideas, not politicians rule the world. He tries to protect ideas which he thinks are good and attacks ideas he thinks bring harm. Asay has experienced life as a teacher, a grandpa and bomb-thrower of ideas. His home base is in Colorado Springs with the Gazette newspaper."
# ("Clay Bennett", "http://comics.com/clay_bennett"), # ("Clay Bennett", "http://comics.com/clay_bennett"),
# "Clay Bennett visually distills complex issues down to their very essence. When Clay Bennett left The Christian Science Monitor in 2008 to join the Chattanooga Times Free Press, his editorial cartoons became available for syndication. Washington Post Writers Group Editorial Director Alan Shearer immediately signed Bennett, despite industry forces that are depleting the ranks of cartoonists and reducing the space for their work. \"I've heard people in our business say editorial cartooning is in decline as newspapers slash and burn, and they are right to a degree,\" Shearer said. \"But creatively, cartooning is as strong as ever, and Clay is one of the brightest lights. His work will be a strong presence in the marketplace.\" Bennett has been the editorial cartoonist for The Christian Science Monitor since 1998 and, while there, he was a Pulitzer finalist for an unprecedented five consecutive years, winning it in 2002. He has also earned just about every other editorial cartoon award there is, including the Robert F. Kennedy Journalism Award, the John Fischetti Editorial Cartoon Competition, the Overseas Press Club's Thomas Nast Award, the National Headliner Award, the Society of Professional Journalists' Sigma Delta Chi Award, the National Journalism Award from the Scripps Howard Foundation, and the National Cartoonists Society Division Award for Best Editorial Cartoons. Bennett was also named Editorial Cartoonist of the Year by Editor & Publisher magazine in 2001. Bennett was the editorial cartoonist at the St. Petersburg (Fla.) Times from 1981 until he was fired in 1994, whereupon he spent more than three years in \"professional oblivion\" before being hired by The Monitor. \"The Christian Science Monitor saved my career,\" said Bennett. \"The editors there showed faith in me when few in this business seemed willing to.\" Before working in St. Petersburg, Bennett was a staff artist at both the Pittsburgh Post-Gazette and the Fayetteville (NC) Times. He is married to portrait artist, illustrator and cartoonist Cindy Procious, and they have three children, Matt, Ben and Sarah."
# ("Daryl Cagle", "http://comics.com/daryl_cagle"), # ("Daryl Cagle", "http://comics.com/daryl_cagle"),
# "Daryl Cagle has been one of America\u2019s most prolific cartoonists. Raised in California, Daryl went to college at UC Santa Barbara and then moved to New York City, where he worked for 10 years with Jim Henson\u2019s Muppets, illustrating scores of books, magazines, calendars, and all manner of products. In 2001, Daryl started a new syndicate, Cagle Cartoons, Inc. (www.caglecartoons.com), which distributes the cartoons of 50 editorial cartoonists and columnists to more than 800 newspapers in the United States, Canada, and Latin America. Daryl is a past president of the National Cartoonists Society and current president of the National Cartoonists Society Foundation. He is a frequent guest on Fox News, CNN and MSNBC. Daryl is a popular and entertaining public speaker. "
# ("David Fitzsimmons", "http://comics.com/david_fitzsimmons"), # ("David Fitzsimmons", "http://comics.com/david_fitzsimmons"),
# "David Fitzsimmons is a new editorial cartoons on comics.com. He is also a staff writer and editorial cartoonist for the Arizona Daily Star. " # "David Fitzsimmons is a new editorial cartoons on comics.com. He is also a staff writer and editorial cartoonist for the Arizona Daily Star. "
# ("Drew Litton", "http://comics.com/drew_litton"), # ("Drew Litton", "http://comics.com/drew_litton"),
@ -258,43 +149,26 @@ class Comics(BasicNewsRecipe):
# ("Eric Allie", "http://comics.com/eric_allie"), # ("Eric Allie", "http://comics.com/eric_allie"),
# "Eric Allie is an editorial cartoonist with the Pioneer Press and CNS News. " # "Eric Allie is an editorial cartoonist with the Pioneer Press and CNS News. "
# ("Gary Markstein", "http://comics.com/gary_markstein"), # ("Gary Markstein", "http://comics.com/gary_markstein"),
# "Gary Markstein makes a living by skewering pompous public figures and politicians of every political stripe. Gary Markstein cut his cartooning teeth while doodling in the margins of his grade-school homework and went on to earn a degree in fine arts from Arizona State University. Now he makes a living by skewering pompous public figures and politicians of every political stripe. Markstein, is an artist at the Milwaukee Journal Sentinel and was previously the cartoonist for the Tribune Newspapers in Arizona. His many awards for cartoons and illustrations include the Milwaukee Press Club Award, Cox Newspapers' Best Editorial Cartoonist award, a second-place National Headliner Award, a third-place Berryman award from the National Press Foundation (both in 1997) and the 1997 John Fischetti Editorial Cartoonist Competition for 1997. He won the Global Media Award for Excellence in Population Reporting two years in a row (2001, 2002). "
# ("Gary McCoy", "http://comics.com/gary_mccoy"), # ("Gary McCoy", "http://comics.com/gary_mccoy"),
# "Gary McCoy is known for his editorial cartoons, humor and inane ramblings. He is a 2 time nominee for Best Magazine Cartoonist of the Year by the National Cartoonists Society. He resides in Belleville, IL. " # "Gary McCoy is known for his editorial cartoons, humor and inane ramblings. He is a 2 time nominee for Best Magazine Cartoonist of the Year by the National Cartoonists Society. He resides in Belleville, IL. "
# ("Gary Varvel", "http://comics.com/gary_varvel"), # ("Gary Varvel", "http://comics.com/gary_varvel"),
# "Varvel is a well established book illustrator as well as editorial cartoonist for the The Indianapolis Star. Born in Indianapolis, Indiana in 1957, Varvel was drawn to cartoons as a child when he saw a copy of MAD magazine. In 1974, he met Jerry Barnett, the editorial cartoonist for The Indianapolis News who mentored and encouraged him to pursue a career in cartooning. In 1975, Varvel studied visual communication at John Herron School of Art at Indiana University, Purdue University at Indianapolis (IUPUI). In college he drew cartoons for the Sagamore, the college newspaper. Varvel was hired as an newsroom artist for The Indianapolis News when Jerry Barnett recommended him for the position. He spent the next 16 years working as the chief artist managing a 3-person art department. During that time, Varvel applied to many newspapers around the country for an editorial cartooning position. But in 1994, pulitzer prize winning cartoonist Charles Werner retired from The Indianapolis Star and Varvel's dream came true when he landed the position. In 2005, Varvel placed second in the national Best of Gannett contest for Editorial Cartooning. In the past 12 years, Varvel has won the Indiana Society of Professional Journalists' Award for Best Editorial Cartoon ten times. He is also an eight-time winner of the first place award for Best Editorial Cartoonist in the Hoosier State Press Association Contest since 1995. Varvel's work is nationally syndicated through Creators Syndicate. His cartoons have appeared on CNN, FOX News and in Newsweek, Time, The New York Times, The Washington Post, USA Today, Washington Times, National Review, World magazine and Sports Illustrated. Varvel lives in Brownsburg with his wife of 26 years, Carol. They have three children: Ashley-23, Brett-21 and Drew-16."
# ("Henry Payne", "http://comics.com/henry_payne"), # ("Henry Payne", "http://comics.com/henry_payne"),
# "Henry Payne reports regularly on economic, consumer and environmental issues. He is the editorial cartoonist for The Detroit News. He also writes and draws a column, Payne & Ink, which appears on the paper's Monday Op-Ed page. His weekly CAR-toon - a humorous look at America's car-crazy culture - runs Tuesdays on The News' web site, detnews.com. He has been a runner-up for both the Pulitzer and Mencken awards. Payne is an active race car driver, tennis and squash player, and lives with wife, Talbot, and two children in Bloomfield Hills, Michigan."
# ("JD Crowe", "http://comics.com/jd_crowe"), # ("JD Crowe", "http://comics.com/jd_crowe"),
# "Crowe generously spreads his tough love to international and national issues based on the news of the day. J.D. Crowe is the staff cartoonist for the Mobile Register (Mobile, Alabama.) He aggressively works local and state issues (Lord knows there's lots of work to be done in Lower Alabama,) feeling it his duty to weed out numskull politicians on the homefront before they can grow in the national spotlight. J.D. lives near the gulf coast in Fairhope, Alabama, with his family."
# ("Jeff Parker", "http://comics.com/jeff_parker"), # ("Jeff Parker", "http://comics.com/jeff_parker"),
# "An award winning cartoonist, Parker hits home with a powerful satirical twist on today's issues. Growing up with rockets on Florida's space coast, Jeff Parker first began drawing editorial cartoons for Florida Environments news magazine in 1989 followed by Orlando Business Journal in 1990 before joining his hometown newspaper, Florida Today, in 1992. In 2005, Jeff was honored with the National Cartoonists Society's Reuben Division Award for Editorial Cartooning after three prior nominations. Jeff works from his home studio. His wife, Pat, considers him her only child. "
# ("Jeff Stahler", "http://comics.com/jeff_stahler"), # ("Jeff Stahler", "http://comics.com/jeff_stahler"),
# "Jab, poke, stick, skewer, prod, lampoon... this is the unique language of political cartoonist Jeff Stahler. Stahler was a finalist for the National Cartoonists Society's 1999 Reuben division award for Best Editorial Cartoons and has won numerous national and local awards, including first place in the 1990 John Fischetti Editorial Cartoon Competition. He lives in Cincinnati with his family and is the Editorial cartoonist for The Columbus Dispatch. Stahler also creates the whimsical slice-of-life daily comic panel \"Moderately Confused\" seen here on Comics.com."
# ("Jerry Holbert", "http://comics.com/jerry_holbert"), # ("Jerry Holbert", "http://comics.com/jerry_holbert"),
# "Holbert's strips are an even-handed lampooning of everyday life. Jerry Holbert is on staff at the Boston Herald where he is an editorial cartoonist. He was named the best editorial cartoonist of the year by the National Cartoonists Society in 2001. "
# ("John Cole", "http://comics.com/john_cole"), # ("John Cole", "http://comics.com/john_cole"),
# "John Cole's interest in cartooning took root while drawing for his junior high newspaper. He went on to claim honorable mention (1994) and first place (2004) in the John Fischetti Editorial Cartoon Competition, as well as the undying animosity of Durham's politically correct readership. In 1985, John worked at the Durham Morning Herald (later The Herald-Sun) in Durham, North Carolina. Exploiting the town's robust political mix, he eventually convinced his superiors to name him the paper's full time editorial cartoonist. Cole joined the editorial department of The Times-Tribune in Scranton, Pennsylvania, in April, 2005. He lives in Pennsylvania with his family. "
# ("John Darkow", "http://comics.com/john_darkow"), # ("John Darkow", "http://comics.com/john_darkow"),
# "John Darkow is a contributing editorial cartoonist for the Humor Times as well as editoiral cartoonist for the Columbia Daily Tribune, Missouri" # "John Darkow is a contributing editorial cartoonist for the Humor Times as well as editoiral cartoonist for the Columbia Daily Tribune, Missouri"
# ("John Sherffius", "http://comics.com/john_sherffius"), # ("John Sherffius", "http://comics.com/john_sherffius"),
# "John Sherffius has been capturing the issues of the day in pen and ink since his college years at the University of California, Los Angeles. Sherffius has been honored in recent years with national cartooning awards from the Robert F. Kennedy Foundation, the National Press Foundation, the Society of Professional Journalists and the Scripps Howard Foundation. He is the 2008 winner of the Herblock Award. His home paper is the Daily Camera in Boulder, Colo."
# ("Larry Wright", "http://comics.com/larry_wright"), # ("Larry Wright", "http://comics.com/larry_wright"),
# "Larry began drawing political cartoons in 1960 for the Okinawa Morning Star, a civilian-owned English language daily, while serving with the Army on Okinawa. He left Okinawa in 1965 and returned to his hometown of Detroit for a job on the news desk of the Detroit Free Press. Here he began drawing a daily political cartoon on the Free Press Feature Page and in 1976 The Detroit News offered me a position as a full-time cartoonist. He later took the job of Associate Creative Director of detnews.com, the Detroit News website that went online in July 1995. He lives in Michigan with his family. You can also see his strip Kit N' Carlyle here at comics.com."
# ("Lisa Benson", "http://comics.com/lisa_benson"), # ("Lisa Benson", "http://comics.com/lisa_benson"),
# "Politically conservative, artistically brilliant cartoons that speak to mainstream America. Lisa Benson is a rare talent who can illustrate a major news story in a single drawing and convey her ideas to readers in very few words,\u201d said Alan Shearer, Writers Group editorial director. \u201cConservative describes her politically. Brilliant describes her artistically. A combination of artistic talent, moral indignation and strong point of view mesh somehow to produce some of the finest work I have ever seen from a local cartoonist. Looking at her portfolio, I was blown away.\u201d Benson came to editorial cartooning a little later than most, in the midst of raising her four children. In the early 1990s, Benson\u2019s husband\u2019s business was going through an industry wide recession, so she began looking at employment options to supplement the family income. In 1990, she started drawing cartoons for a local monthly publication, \u201cThe Senior Advocate,\u201d and doing paste-up and cutting rubylith for the color separations. Benson soon decided to give editorial cartooning a try. \u201cI was so confident the Daily Press needed my services back in 1992 that I stuffed ONE sample cartoon in an envelope and mailed it to the opinion page editor. I must have included my phone number, because Steve Williams called me in for a meeting and hired me to do two cartoons each week.\u201d Benson stopped editorial cartooning from 2002 to 2004, a period she calls \u201cnursing home hell.\u201d Despite the personal pressures, Benson earned first-place honors from the California Newspaper Publishers Association (under 75,000 circulation) in 2000 and second place in 2004. In 2005, she took both second and third place from the Society of Professional Journalists\u2019 Inland Southern California Chapter. A native Californian, Benson lives in Apple Valley with her husband, Gregory, a building designer. They have four children, ages 18 to 26."
# ("Marshall Ramsey", "http://comics.com/marshall_ramsey"), # ("Marshall Ramsey", "http://comics.com/marshall_ramsey"),
# "Cartooning whiz kid Marshall Ramsey has been creating cartoons with a fresh, 'Generation X' point of view since 1994. Cartooning whiz kid Marshall Ramsey began drawing when his mother, an art teacher, gave him a pencil and a piece of paper to keep him quiet in church. Those early doodlings eventually evolved into the slightly warped but right on target cartoons that Ramsey has been creating since 1994. Full of biting wit, his cartoons provide a fresh, 'Generation X' point of view. Born in New Jersey, he grew up in Atlanta and earned a marketing degree at the University of Tennessee, where he was a cartoonist at the school newspaper. His honors include being named winner of the 1993 John Locher Memorial Award. Ramsey began his professional career by filling in for the editorial cartoonist at the Knoxville Journal. He moved on to positions as creative director at the Conroe (Texas) Courier and at Copley News Service before becoming the editorial cartoonist at the Jackson, Miss., Clarion-Ledger. He was a Pulitzer finalist in 2002."
# ("Matt Bors", "http://comics.com/matt_bors"), # ("Matt Bors", "http://comics.com/matt_bors"),
# "Matt Bors relentlessly follows the latest absurdities in American politics and culture. His illustration work can be found in dozens of magazines and newspapers across the country and has been featured on the covers of numerous newsweeklies, including the NY Press, Miami New TImes, Boston Phoenix, and OC Weekly. Matt graduated from The Art Institute of Pittsburgh in 2003 and currently resides in Portland, OR."
# ("Michael Ramirez", "http://comics.com/michael_ramirez"), # ("Michael Ramirez", "http://comics.com/michael_ramirez"),
# "Two-time Pulitzer Prize winner Michael Ramirez combines an encyclopedic knowledge of the news with a captivating drawing style. In addition to the 1994 and 2008 Pulitzer Prizes, Ramirez was the 2008 winner of the prestigious Fischetti Award. He is a three-time Sigma Delta Chi, Society of Professional Journalism Award winner, a Lincoln Fellow and a recipient of the UCI Medal. He is a senior editor and the editorial cartoonist for Investor's Business Daily. He is formerly the editorial cartoonist for the Los Angeles Times, The Memphis Commercial Appeal and a contributing cartoonist for USA Today."
# ("Mike Keefe", "http://comics.com/mike_keefe"), # ("Mike Keefe", "http://comics.com/mike_keefe"),
# "Keefe's cartoons are often considered intense and irreverent. He is winner of several top awards including The Fischetti editorial cartoon competition (1991, 2001,2007), the National Headliners Club (1986), and the Society of Professional Journalists (1986). Keefe, is a former US Marine, college math teacher, and for a short time, (before Frank Shorter's heat), the state masters record holder in the indoor mile. He plays guitar and harp for the rock and blues band, Falling Rock. Keefe has tow grown children and lives with his wife in downtown Denver. He has no known allergies"
# ("Mike Luckovich", "http://comics.com/mike_luckovich"), # ("Mike Luckovich", "http://comics.com/mike_luckovich"),
# " 2006 winner of the Reuben, the National Cartoonists Society's top award for cartoonist of the year. After freelancing and selling life insurance to make ends meet following his graduation from the University of Washington in 1982, Luckovich landed his first cartooning job at the Greenville News in South Carolina. After nine months at the News, Luckovich was hired by The Times-Picayune in New Orleans, where he stayed for four years before moving on to Atlanta. Mike Luckovich of the Atlanta Constitution received two amazing honors in 2006, winning both a Pulitzer Prize and the Reuben award for Outstanding Cartoonist of the Year. This was the second Pulitzer for Luckovich; his first was awarded in 1995. He had previously received the Reuben award for Editorial Cartooning in 2001, but this was his first time to be named the overall outstanding cartoonist by a group of his peers. Impressive as these achievements are, they are only the latest in a long line of awards for Luckovich. He was a runner-up for the Pulitzer in 1987 before garnering the 1995 win. In 1989, he won the Overseas Press Club's award for the \"Best Cartoons on Foreign Affairs for 1989,\" and in 1991, he was awarded the National Headliners award for editorial cartoonists. In 1994, a Luckovich cartoon was selected by voters in a Newsweek magazine poll as one of the four best editorial cartoons of the year. Luckovich's cartoons, syndicated nationally by Creators Syndicate, appear in more than 350 daily publications, including The Washington Post, The San Diego Union-Tribune, The Denver Post, Newsday, New York Post, The Cleveland Plain-Dealer, The Dallas Morning News, the Boston Globe, the Seattle Times, the Los Angeles Times, the Chicago Tribune, the Nashville Tennessean and the Houston Chronicle, and are reprinted regularly in Time, Newsweek and the New York Times."
# ("MIke Thompson", "http://comics.com/mike_thompson"), # ("MIke Thompson", "http://comics.com/mike_thompson"),
# "Mike Thompson's award-winning cartoons have appeared in publications including Time, The New York Times and The Wall Street Journal. Mike Thompson is the editorial cartoonist for the Detroit Free Press. His work has won numerous honors, including The 2002 Overseas Press Club Award for cartooning, the national 2000 Society of Professional Journalists Sigma Delta Chi Award, the 2000 National Press Foundation Award, the H.L. Mencken award and the national Women in Communications Clarion Award. Thompson, who also draws for USA Today on a rotating basis, has had his work reprinted in such publications as Time, Newsweek, Forbes, The New York Times and The Wall Street Journal. In addition, his cartoons have been featured on CNN, C-SPAN, the NBC \"Today\" show and the Fox News Network. Thompson began his career as contributing cartoonist for The Milwaukee Journal and later worked as staff cartoonist for the St. Louis Sun and the Copley Illinois newspapers before joining the Free Press in November 1998. "
# ("Monte Wolverton", "http://comics.com/monte_wolverton"), # ("Monte Wolverton", "http://comics.com/monte_wolverton"),
# "Unique mix of perspectives" # "Unique mix of perspectives"
# ("Mr. Fish", "http://comics.com/mr_fish"), # ("Mr. Fish", "http://comics.com/mr_fish"),
@ -302,11 +176,9 @@ class Comics(BasicNewsRecipe):
# ("Nate Beeler", "http://comics.com/nate_beeler"), # ("Nate Beeler", "http://comics.com/nate_beeler"),
# "Middle America meets the Beltway." # "Middle America meets the Beltway."
# ("Nick Anderson", "http://comics.com/nick_anderson"), # ("Nick Anderson", "http://comics.com/nick_anderson"),
# "Cartoons with an independent streak and a sophisticated use of color. Pulitzer winner. Nick Anderson of the Houston Chronicle is an avowed independent who covers politics and contemporary cultural issues in a way that connects with readers. His loose, idiosyncratic style carries with it an unconventional message that has broad appeal. \"I approach my work with a healthy skepticism for the ideological extremists littering our political landscape,\" explains Anderson. Anderson grew up in Toledo, Ohio, in a family that encouraged independent thinking in politics. Anderson majored in political science at Ohio State University and was editorial cartoonist for the school's newspaper, The Lantern. In 1989, he won the Charles M. Schulz Award for best college cartoonist. He interned one summer at The Louisville Courier-Journal, which immediately recognized his talent. After his graduation from OSU, the newspaper created a position for him as an associate editorial cartoonist and illustrator. Anderson was promoted to chief editorial cartoonist in 1995 and was syndicated by the Writers Group a year later. After 15 years with the Courier-Journal, in 2006 Anderson accepted a position at the Houston Chronicle. In 2005, Anderson was awarded the Pulitzer Prize for Editorial Cartooning. In addition to the Pulitzer, Anderson earned the Sigma Delta Chi award in 2000, the 1999 Fischetti Award, and first-place honors for editorial cartooning in the Best of Gannett Awards in 1996, 1997 and 1999. Anderson's cartoons have been published in Newsweek, The New York Times, The Washington Post, USA Today, the Chicago Tribune and other papers. He lives in Houston with his wife, Cecilia Baylon, and his sons, Colton and Travis, whose names Anderson hides in each of his cartoons."
# ("Pat Bagley", "http://comics.com/pat_bagley"), # ("Pat Bagley", "http://comics.com/pat_bagley"),
# "Unfair and Totally Unbalanced." # "Unfair and Totally Unbalanced."
# ("Paul Szep", "http://comics.com/paul_szep"), # ("Paul Szep", "http://comics.com/paul_szep"),
# "Editorial cartoons from a two time Pulitzer Prize winner as well as a Harvard fellow. Paul Szep was born in the darkest Canada, which accounts for the way he talks, eh? He was a hockey player and worked in the steel mills, which accounts for the way he thinks. He is a graduate of the Ontario College of Art in Toronto, Ontario. He has won two Pulitzer Prizes, two Sigma Delta Chi Awards, a Headliner Award, the International Thomas Nast Award, three honorary doctorates, and was inducted into Hamilton's Hall of Fame in 2003. He was a fellow at Harvard. Paul has two great children, Amy and Jason, and is a single-digit golfer, which only means he plays way too much golf and draws far too few cartoons."
# ("RJ Matson", "http://comics.com/rj_matson"), # ("RJ Matson", "http://comics.com/rj_matson"),
# "Power cartoons from NYC and Capitol Hill" # "Power cartoons from NYC and Capitol Hill"
# ("Rob Rogers", "http://comics.com/rob_rogers"), # ("Rob Rogers", "http://comics.com/rob_rogers"),
@ -314,17 +186,11 @@ class Comics(BasicNewsRecipe):
# ("Robert Ariail", "http://comics.com/robert_ariail"), # ("Robert Ariail", "http://comics.com/robert_ariail"),
# "Clever and unpredictable" # "Clever and unpredictable"
# ("Scott Stantis", "http://comics.com/scott_stantis"), # ("Scott Stantis", "http://comics.com/scott_stantis"),
# "Scott Stantis regularly skewers the prominent political figures of the day from his home paper, the Chicago Tribune. After graduating from high school in Madison, Wis., Stantis and his family returned to Southern California, and Scott enrolled at Los Angeles Community College and California State University, Long Beach. Shortly after being kicked out of the latter, he landed the job of editorial cartoonist for the Orange County Register. Thus began his career in earnest. Next he was hired by The Commercial Appeal in Memphis, Tenn. Additional editorial cartoon jobs followed, first at The Arizona Republic and now at the Chicago Tribune. He lives in Hoover, Ala., with a mortgage, car payments, his wife Janien (since 1981) and two sons. He also has a box turtle and a dog named Dogzilla. When Scott isn't creating editorial cartoons, he works on a comic strip, 'The Buckets,' and other animation projects. He also writes screenplays, reads, collects political memorabilia, plays with his kids, walks the dog and ignores his yard."
# ("Signe Wilkinson", "http://comics.com/signe_wilkinson"), # ("Signe Wilkinson", "http://comics.com/signe_wilkinson"),
# "Left-leaning bite that makes readers think -- as soon as they stop laughing. After acquiring a BA in English from a western university of middling academic reputation, Wilkinson was unprepared for real work ... so she became a reporter, stringing for the West Chester (PA) Daily Local News. She also worked for the Quakers, the Academy of Natural Sciences of Philadelphia, and with a housing project in Cyprus, a job that ended with a bang when a coup d'etat was followed by a military invasion from Turkey. Back in the newsroom, Wilkinson began drawing the people she was supposed to be reporting on. She realized cartooning combined her interests in art and politics without taxing her interest in spelling. After a year of remedial art school, including a stint at the Pennsylvania Academy of the Fine Arts, she began freelancing at several Philadelphia and New York publications, finally landing a full-time job at the San Jose Mercury News in 1982. After 3 1\/2 years on a steep learning curve, Wilkinson repaid her long-suffering Mercury News editor by taking a job at the Philadelphia Daily News. In addition to her five cartoons a week for the Daily News, Wilkinson has drawn mulch-based cartoons for Organic Gardening magazine, mortarboard-based cartoons for the Institute for Research on Higher Education and water-based cartoons for the University Barge Club newsletter. \"How to Grow the $735 Tomato\" is the title of her 1999 gardening calendar. Her awards include the 1992 Pulitzer Prize, the 1991 Berryman Award and 1997 Overseas Press Club Award. Her most cherished honor was being named \"the Pennsylvania state vegetable substitute\" by the speaker of the Pennsylvania House of Representatives in 1989.bb"
# ("Steve Benson", "http://comics.com/steve_benson"), # ("Steve Benson", "http://comics.com/steve_benson"),
# "From behind his drawing board at The Arizona Republic, editorial \u201charpoonist\u201d Steve Benson regularly lobs his ink-bottle grenades, drawing beads on rascals in high places, as well as drawing fire. Indeed, Steve\u2019s work proves the observation of his editor, \u201cA picture is worth a thousand phone calls.\u201d Responding to a cartoon drawn at his expense, Arizona\u2019s late Sen. Barry Goldwater penned the cartoonist the following note: \u201cThere are -- and have been -- good Bensons. You ain\u2019t.\u201d In 1993, Steve won the Pulitzer Prize for editorial cartooning. Prior to winning that award, he held the distinction of being the contest\u2019s most nominated loser. His cartoons have also earned him a National Headliner Award, an Overseas Press Club Citation for Excellence, a Rocky Mountain Emmy, a place in Who\u2019s Who in the West, and several Best of the West and Arizona Press Club Awards. He was a 2002 recipient of the American Civil Liberties Union \u201cPractitioner of the First Amendment Award,\u201d given to him for having \u201ctaken on John Ashcroft, Jerry Falwell, President Bush and anyone else who has sought to denigrate or to deprive us of liberties we are guaranteed under the Bill of Rights.\u201d Steve\u2019s work has been a regular cause of morning upset and\/or delight around the country\u2019s breakfast tables for 20 years. His cartoons are nationally distributed by Creators Syndicate. They have also appeared in Time, Newsweek, U.S. News & World Report, the New York Times and The Washington Post, as well as on CNN, MSNBC, ABC\u2019s Nightline, CBS\u2019s 60 Minutes and PBS's MacNeil-Lehrer Report -- not to mention in millions of readers\u2019 wastebaskets. Steve is past-president of the Association of American Editorial Cartoonists. He is a native of Sacramento, Calif., an Eagle Scout and a 1979 alumnus of Brigham Young University, where he graduated magna cum loudest. Steve is the author of five books of his editorial cartoons. Married to Mary Ann Christensen of Preston, Idaho, since 1977, Steve and his wife reside in Gilbert, Ariz. They have four children, all grown and all living under assumed names."
# ("Steve Breen", "http://comics.com/steve_breen"), # ("Steve Breen", "http://comics.com/steve_breen"),
# "Two-time Pulitzer Prize-winner Steve Breen is fast developing a reputation for provocative political cartoons. A Southern California native, Breen spent much of his childhood at home reading Mad magazine while his friends were off at the beach. Although he earned a degree in political science and a U. S. history teaching credential, Breen was hooked on cartooning as a career after one of his cartoons was published in Newsweek when he was only 19 years old. He is the winner of the 2007 Berryman Award presented by the National Press Foundation, and the 1998 and 2009 Pulitzer Prize for Editorial Cartooning. "
# ("Steve Kelley", "http://comics.com/steve_kelley"), # ("Steve Kelley", "http://comics.com/steve_kelley"),
# "An honors graduate from Dartmouth College, Kelley spent two decades as a political cartoonist for The San Diego Union-Tribune. In 2002, he moved to The Times-Picayune in New Orleans. His work has won dozens of awards, including six first-place finishes from the California Newspaper Publishers Association. In 2001, he won first-place awards from the CNPA, the Los Angeles Press Club and the Best of the West competition. That same year, he also won the National Headliner Award. The Virginia native is a popular speaker and humorist. A veteran of seven appearances on The Tonight Show, Kelley gives much of his time and talent to charity. Funny Money, which he co-created, has provided funding for the San Diego Child Abuse Prevention Foundation for seven consecutive years. In 2001, he started 1,000 Laughs for 1,000 Smiles to raise money to fund reconstructive surgery for children in Mexico. Kelley is the father of a young son, Hayden, about whom he brags without regard to the listener's interest."
# ("Steve Sack", "http://comics.com/steve_sack"), # ("Steve Sack", "http://comics.com/steve_sack"),
# "Steve Sack has been the editorial cartoonist for the Minneapolis Star Tribune since 1981. A native of the Twin Cities, Steve was born in St. Paul, Minn. in 1953. His newspaper career began while attending the University of Minnesota, where he illustrated features and drew editorial cartoons for the school paper, The Minnesota Daily. Two years later, he was hired as staff cartoonist for the Fort Wayne, Ind., Journal-Gazette. After three years, Steve returned to Minnesota to join the Star Tribune. He has won assorted Minnesota cartooning awards and has received national recognition of his work, winning the Press Club's National Headliner Award, the Sigma Delta Chi cartooning award and the Scripps Howard Foundation's editorial cartooning contest. In 2004, he was a named a finalist for the Pulitzer Prize. With partner Craig Macintosh, he also produces the children's Sunday comics feature \"Doodles,\" and in his free time, he enjoys oil painting. Steve lives in the Twin Cities with his wife, Beth"
]: ]:
articles = self.make_links(url) articles = self.make_links(url)
if articles: if articles:

View File

@ -1,13 +1,13 @@
from calibre.web.feeds.news import BasicNewsRecipe from calibre.web.feeds.news import BasicNewsRecipe
from calibre import browser
import re import re
import mechanize
class AdvancedUserRecipe1306061239(BasicNewsRecipe): class AdvancedUserRecipe1306061239(BasicNewsRecipe):
title = u'The Daily Mirror' title = u'The Daily Mirror'
description = 'News as provide by The Daily Mirror -UK' description = 'News as provided by The Daily Mirror -UK'
__author__ = 'Dave Asbury' __author__ = 'Dave Asbury'
# last updated 7/4/12 # last updated 28/4/12
language = 'en_GB' language = 'en_GB'
#cover_url = 'http://yookeo.com/screens/m/i/mirror.co.uk.jpg' #cover_url = 'http://yookeo.com/screens/m/i/mirror.co.uk.jpg'
@ -15,89 +15,80 @@ class AdvancedUserRecipe1306061239(BasicNewsRecipe):
oldest_article = 1 oldest_article = 1
max_articles_per_feed = 10 max_articles_per_feed = 12
remove_empty_feeds = True remove_empty_feeds = True
remove_javascript = True remove_javascript = True
no_stylesheets = True no_stylesheets = True
auto_cleanup = True # auto_cleanup = True
#conversion_options = { 'linearize_tables' : True } #conversion_options = { 'linearize_tables' : True }
#keep_only_tags = [
# dict(name='h1'), keep_only_tags = [ dict(name='h1'),
# dict(name='div',attrs={'id' : 'body-content'}), dict(name='div',attrs={'class' : 'lead-text'}),
#dict(name='div',atts={'class' : 'article-body'}), dict(name='div',attrs={'class' : 'styleGroup clearfix'}),
dict(name='div',attrs={'class' : 'widget relatedContents pictures widget-editable viziwyg-section-245 inpage-widget-158123'}),
dict(name='figure',attrs={'class' : 'clearfix'}),
dict(name='div',attrs={'class' :'body '}),
#dict(attrs={'class' : ['article-attr','byline append-1','published']}), #dict(attrs={'class' : ['article-attr','byline append-1','published']}),
#dict(name='p'), #dict(name='p'),
# ] ]
#remove_tags_after = [dict (name='div',attrs={'class' : 'related'})]
remove_tags = [ remove_tags = [
dict(attrs={'class' : 'comment'}),
dict(name='title'), dict(name='title'),
dict(name='div',attrs={'class' : ['inline-ad span-16 last','caption']}), dict(name='ul',attrs={'class' : 'clearfix breadcrumbs '}),
# dict(name='div',attrs={'id' : ['sidebar','menu','search-box','roffers-top']}), dict(name='ul',attrs={'id' : 'login-201109171215'}),
#dict(name='div',attrs={'class' :['inline-ad span-16 last','article-resize','related','list teasers']}), dict(name='div',attrs={'class' : ['inline-ad span-16 last','caption']}),#'widget navigation breadcrumb widget-editable viziwyg-section-198 inpage-widget-80721 span-17','image-credit'
#dict(attrs={'class' : ['channellink','article-tags','replace','append-html']}), ]
]
# preprocess_regexps = [
#(re.compile(r'<dl class="q-search">.*?</dl>', re.IGNORECASE | re.DOTALL), lambda match: '')]
preprocess_regexps = [
(re.compile(r'- mirror.co.uk', re.IGNORECASE | re.DOTALL), lambda match: '')]
preprocess_regexps = [ preprocess_regexps = [
(re.compile(r'Advertisement >>', re.IGNORECASE | re.DOTALL), lambda match: '')] (re.compile(r'- mirror.co.uk', re.IGNORECASE | re.DOTALL), lambda match: '')]
#preprocess_regexps = [
#(re.compile(r'Sponsored Links', re.IGNORECASE | re.DOTALL), lambda match: '')]
feeds = [ feeds = [
(u'News',u'http://www.mirror.co.uk/news/rss.xml'),
(u'Sports',u'http://www.mirror.co.uk/sport/rss.xml'),
(u'3AM',u'http://www.mirror.co.uk/3am/rss.xml'),
(u'Lifestyle',u'http://www.mirror.co.uk/lifestyle/rss.xml')
(u'UK News', u'http://feed43.com/0287771688643868.xml')
,(u'Tech News', u'http://feed43.com/2455520588350501.xml')
,(u'Weird World','http://feed43.com/0863800333634654.xml')
,(u'Sport','http://feed43.com/7713243036546130.xml')
,(u'Sport : Boxing ','http://feed43.com/0414732220804255.xml')
,(u'Sport : Rugby Union','http://feed43.com/4710138762362383.xml')
,(u'Sport : Other','http://feed43.com/4501416886323415.xml')
,(u'TV and Film','http://feed43.com/5238302853765104.xml')
,(u'Celebs','http://feed43.com/8770061048844683.xml')
,(u'Life Style : Family','http://feed43.com/4356170742410338.xml')
,(u'Travel','http://feed43.com/1436576006476607.xml')
# example of commented out feed not needed ,(u'Travel','http://www.mirror.co.uk/advice/travel/rss.xml') # example of commented out feed not needed ,(u'Travel','http://www.mirror.co.uk/advice/travel/rss.xml')
] ]
extra_css = ''' extra_css = '''
body{ text-align: justify; font-family:Arial,Helvetica,sans-serif; font-size:11px; font-size-adjust:none; font-stretch:normal; font-style:normal; font-variant:normal; font-weight:normal;} h1{ font-size:medium;}
h1{ font-size:18px;} body{ text-align: justify; font-family:Arial,Helvetica,sans-serif; font-size:11px; font-size-adjust:none; font-stretch:normal; font-style:normal; font-variant:normal; font-weight:normal;}
img { display:block} img { display:block}
''' '''#
def get_cover_url(self): def get_cover_url(self):
soup = self.index_to_soup('http://www.politicshome.com/uk/latest_frontpage.html') soup = self.index_to_soup('http://www.politicshome.com/uk/latest_frontpage.html')
# look for the block containing the mirror button and url # look for the block containing the mirror button and url
cov = soup.find(attrs={'style' : 'background-image: url(http://www.politicshome.com/images/sources/source_frontpage_button_92.gif);'}) cov = soup.find(attrs={'style' : 'background-image: url(http://www.politicshome.com/images/sources/source_frontpage_button_92.gif);'})
cov2 = str(cov) cov2 = str(cov)
cov2='http://www.politicshome.com'+cov2[9:-142] cov2='http://www.politicshome.com'+cov2[9:-142]
#cov2 now contains url of the page containing pic #cov2 now contains url of the page containing pic
soup = self.index_to_soup(cov2) soup = self.index_to_soup(cov2)
cov = soup.find(attrs={'id' : 'large'}) cov = soup.find(attrs={'id' : 'large'})
cov2 = str(cov) cov2 = str(cov)
cov2=cov2[27:-18] cov2=cov2[27:-18]
#cov2 now is pic url, now go back to original function #cov2 now is pic url, now go back to original function
br = mechanize.Browser() br = browser()
br.set_handle_redirect(False) br.set_handle_redirect(False)
try: try:
br.open_novisit(cov2) br.open_novisit(cov2)
cover_url = cov2 cover_url = cov2
except: except:
cover_url = 'http://yookeo.com/screens/m/i/mirror.co.uk.jpg' cover_url ='http://profile.ak.fbcdn.net/hprofile-ak-snc4/373019_6149699161_1710984811_n.jpg'
# print '******** string is ', cov2,' ***'
#cover_url = cov2 #cover_url = cov2
#cover_url = 'http://www.thesun.co.uk/img/global/new-masthead-logo.png' #cover_url = 'http://www.thesun.co.uk/img/global/new-masthead-logo.png'
return cover_url return cover_url

View File

@ -10,8 +10,8 @@ from calibre.web.feeds.news import BasicNewsRecipe
class DerStandardRecipe(BasicNewsRecipe): class DerStandardRecipe(BasicNewsRecipe):
title = u'derStandard' title = u'derStandard'
__author__ = 'Gerhard Aigner and Sujata Raman' __author__ = 'Gerhard Aigner and Sujata Raman and Marcel Jira'
description = u'Nachrichten aus ??sterreich' description = u'Nachrichten aus Österreich'
publisher ='derStandard.at' publisher ='derStandard.at'
category = 'news, politics, nachrichten, Austria' category = 'news, politics, nachrichten, Austria'
use_embedded_content = False use_embedded_content = False
@ -30,17 +30,26 @@ class DerStandardRecipe(BasicNewsRecipe):
h4{color:#404450;font-size:x-small;} h4{color:#404450;font-size:x-small;}
h6{color:#404450; font-size:x-small;} h6{color:#404450; font-size:x-small;}
''' '''
feeds = [(u'International', u'http://derstandard.at/?page=rss&ressort=internationalpolitik'), feeds = [
(u'Inland', u'http://derstandard.at/?page=rss&ressort=innenpolitik'), (u'Newsroom', u'http://derStandard.at/?page=rss&ressort=Seite1'),
(u'Wirtschaft', u'http://derstandard.at/?page=rss&ressort=investor'), (u'Inland', u'http://derstandard.at/?page=rss&ressort=InnenPolitik'),
(u'Web', u'http://derstandard.at/?page=rss&ressort=webstandard'), (u'International', u'http://derstandard.at/?page=rss&ressort=InternationalPolitik'),
(u'Sport', u'http://derstandard.at/?page=rss&ressort=sport'), (u'Wirtschaft', u'http://derStandard.at/?page=rss&ressort=Wirtschaft'),
(u'Panorama', u'http://derstandard.at/?page=rss&ressort=panorama'), (u'Web', u'http://derStandard.at/?page=rss&ressort=Web'),
(u'Etat', u'http://derstandard.at/?page=rss&ressort=etat'), (u'Sport', u'http://derStandard.at/?page=rss&ressort=Sport'),
(u'Kultur', u'http://derstandard.at/?page=rss&ressort=kultur'), (u'Panorama', u'http://derStandard.at/?page=rss&ressort=Panorama'),
(u'Wissenschaft', u'http://derstandard.at/?page=rss&ressort=wissenschaft'), (u'Etat', u'http://derStandard.at/?page=rss&ressort=Etat'),
(u'Gesundheit', u'http://derstandard.at/?page=rss&ressort=gesundheit'), (u'Kultur', u'http://derStandard.at/?page=rss&ressort=Kultur'),
(u'Bildung', u'http://derstandard.at/?page=rss&ressort=subildung') (u'Wissenschaft', u'http://derStandard.at/?page=rss&ressort=Wissenschaft'),
(u'Gesundheit', u'http://derStandard.at/?page=rss&ressort=Gesundheit'),
(u'Bildung', u'http://derStandard.at/?page=rss&ressort=Bildung'),
(u'Meinung', u'http://derStandard.at/?page=rss&ressort=Meinung'),
(u'Lifestyle', u'http://derStandard.at/?page=rss&ressort=Lifestyle'),
(u'Reisen', u'http://derStandard.at/?page=rss&ressort=Reisen'),
(u'Karriere', u'http://derStandard.at/?page=rss&ressort=Karriere'),
(u'Immobilien', u'http://derstandard.at/?page=rss&ressort=Immobilien'),
(u'dieStandard', u'http://dieStandard.at/?page=rss&ressort=diestandard'),
(u'daStandard', u'http://daStandard.at/?page=rss&ressort=dastandard')
] ]
keep_only_tags = [ keep_only_tags = [

37
recipes/diagonal.recipe Normal file
View File

@ -0,0 +1,37 @@
#!/usr/bin/env python
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
__license__ = 'GPL v3'
__copyright__ = 'Ruben Pollan <meskio@sindominio.net>'
__docformat__ = 'restructuredtext en'
from calibre.web.feeds.news import BasicNewsRecipe
class AdvancedUserRecipe1335657507(BasicNewsRecipe):
title = u'diagonal'
__author__ = 'Ruben Pollan'
description = 'Periodico quincenal de actualidad critica'
language = 'es'
oldest_article = 15
max_articles_per_feed = 100
auto_cleanup = True
cover_url = u'http://diagonalperiodico.net/IMG/siteon0.jpg'
feeds = [(u'Panorama', u'http://diagonalperiodico.net/-Panorama-.html?page=backend'),
(u'Global', u'http://diagonalperiodico.net/-Global,104-.html?page=backend'),
(u'Fotonoticia - Galería', u'http://diagonalperiodico.net/-Fotonoticia-Galeria-.html?page=backend'),
(u'Libertades y Derechos', u'http://diagonalperiodico.net/-Libertades-y-Derechos,77-.html?page=backend'),
(u'Saberes', u'http://diagonalperiodico.net/-Saberes,78-.html?page=backend'),
(u'En movimiento', u'http://diagonalperiodico.net/-En-movimiento-.html?page=backend'),
(u'Culturas', u'http://diagonalperiodico.net/-Culturas,89-.html?page=backend'),
(u'Cuerpo', u'http://diagonalperiodico.net/-Cuerpo,99-.html?page=backend'),
(u'La plaza', u'http://diagonalperiodico.net/-La-plaza-.html?page=backend'),
(u'Enfoques', u'http://diagonalperiodico.net/-Enfoques,106-.html?page=backend'),
(u'Humor - Galería', u'http://diagonalperiodico.net/-Humor-Galeria-.html?page=backend'),
(u'Entrevistas digitales', u'http://diagonalperiodico.net/-Entrevistas-Digitales-.html?page=backend'),
(u'Cartas a diagonal', u'http://diagonalperiodico.net/-Cartas-a-Diagonal-.html?page=backend'),
(u'Blogs', u'http://diagonalperiodico.net/-Blogs-.html?page=backend')]
def get_article_url(self, article):
link = article.get('link')
return 'http://diagonalperiodico.net/' + link

View File

@ -0,0 +1,21 @@
from calibre.web.feeds.news import BasicNewsRecipe
class ElMundoTodayRecipe(BasicNewsRecipe):
title = 'El Mundo Today'
__author__ = 'atordo'
description = u'La actualidad del mañana'
category = 'Noticias, humor'
cover_url = 'http://www.elmundotoday.com/wp-content/themes/EarthlyTouch/images/logo.png'
oldest_article = 30
max_articles_per_feed = 30
auto_cleanup = True
no_stylesheets = True
language = 'es'
use_embedded_content = True
feeds = [('El Mundo Today', 'http://www.elmundotoday.com/feed/')]
def get_broser(self):
br = BasicNewsRecipe.get_browser(self)
br.set_handle_gzip(True)
return br

View File

@ -1,24 +1,32 @@
from calibre.web.feeds.recipes import BasicNewsRecipe from calibre.web.feeds.recipes import BasicNewsRecipe
class AdvancedUserRecipe1303841067(BasicNewsRecipe): class AdvancedUserRecipe1303841067(BasicNewsRecipe):
title = u'Max-Planck-Inst.' title = u'Max-Planck-Gesellschaft'
__author__ = 'schuster' description = 'Forschungs-News-Feed der Max-Planck-Gesellschaft'
oldest_article = 30 __author__ = 'schuster, a.peter'
max_articles_per_feed = 100 __license__ = 'GPL v3'
version = 2
oldest_article = 30
max_articles_per_feed = 100
no_stylesheets = True no_stylesheets = True
use_embedded_content = False use_embedded_content = False
language = 'de' language = 'de'
remove_javascript = True remove_javascript = True
timefmt = ' [%d.%m.%Y]'
remove_tags = [dict(attrs={'class':['box_url', 'print_kontakt']}), remove_tags = [dict(attrs={'class':['box_url', 'print_kontakt']}),
dict(id=['skiplinks'])] dict(id=['skiplinks']),
dict(name='div', attrs={'id':['print_options','print_head']}),
dict(name='div', attrs={'class':['col2_box_meta']}),
dict(name='a', attrs={'class':['toggle_description']}),
dict(name='span', attrs={'class':['lens']})]
def print_version(self, url): def print_version(self, url):
split_url = url.split("/") print_url = url + '?print=yes'
print_url = 'http://www.mpg.de/print/' + split_url[3]
return print_url return print_url
feeds = [(u'Forschung', u'http://www.mpg.de/de/forschung.rss')] feeds = [(u'Forschung', u'http://www.mpg.de/de/forschung.rss')]
def get_masthead_url(self):
return 'http://www.mpg.de/images/logo_print.png'

View File

@ -56,7 +56,7 @@ class AdvancedUserRecipe1306097511(BasicNewsRecipe):
encoding = 'utf-8' encoding = 'utf-8'
remove_attributes = ['style', 'font', 'width', 'height', 'itemtype', 'itemprop', 'itemscope']#, 'href'] remove_attributes = ['style', 'font', 'width', 'height', 'itemtype', 'itemprop', 'itemscope']#, 'href']
use_embedded_content = False use_embedded_content = False
extra_css = 'body{font-size:1em;padding:5px 0}body,a,h2{background-color:#fff;text-decoration:none;color:#000}#date,div.byline,p.article-image-caption .credits,.calibrenavbar{font-size:.5em}.article-box-fact.module-title,#date,div.byline{clear:both}.article-box-fact.module-title{margin:8px 0}.article-box-fact.module-title,h2{font-size:1.1em}h1.title{font-size:1.4em}h1.title,.article-body p,div.article-image-caption-2column,div.article-image-caption-3column,#date,div.byline{margin-bottom:.6em}div.article-box-fact div.subtitle,.article-box-fact.module-title,h1.title,p.article-image-caption{font-weight:700}div.column-1-3{margin-left:19px}div.column-1-2{display:inline}div.column-1-2,div.column-1-3{margin-right:7px}p.article-image-caption{font-size:.6em;margin-top:5px}p.article-image-caption,#date,div.byline{color:#616262}p.article-image-caption .credits{font-style:italic}div.article-image-caption{width:246px}div.article-image-caption-2column{width:373px}div.column-3{background-color:#eee;float:right;width:50%}div.column-3 module-title{border:1px solid #aaa}div.article-box-fact div.subtitle,.article-box-fact.module-title{color:#24763b}div.byline{border-top:2px solid #24763b}div.column-3,img,div.column-3,p.small,div.article-image-caption{margin:.5em}img,p.small,.column1,h2{border:0;padding:0}.column1,h1,h2{margin:0}' extra_css = 'body{font-size:1em;padding:5px 0}body,a,h2{background-color:#fff;text-decoration:none;color:#000}#date,div.byline,p.article-image-caption .credits,.calibrenavbar,.calibre5{font-size:.5em}.article-box-fact.module-title,#date,div.byline{clear:both}.article-box-fact{font-size:0.7em}.article-box-fact.module-title{margin:8px 0; font-size:0.8em}h2{font-size:1em}h1.title{font-size:1.4em}h1.title,.article-body p,div.article-image-caption-2column,div.article-image-caption-3column,#date,div.byline{margin-bottom:.6em}div.article-box-fact div.subtitle,.article-box-fact.module-title,h1.title,p.article-image-caption{font-weight:700}div.column-1-3{margin-left:19px}div.column-1-2{display:inline}div.column-1-2,div.column-1-3{margin-right:7px}p.article-image-caption{font-size:.6em;margin-top:5px}p.article-image-caption,#date,div.byline{color:#616262}p.article-image-caption .credits{font-style:italic}div.article-image-caption{width:246px}div.article-image-caption-2column{width:373px}div.column-3{background-color:#eee;float:right;width:50%}div.column-3 module-title{border:1px solid #aaa}div.article-box-fact div.subtitle,.article-box-fact.module-title{color:#24763b}div.byline{border-top:2px solid #24763b}div.column-3,img,div.column-3,p.small,div.article-image-caption{margin:.5em}img,p.small,.column1,h2,.calibre5,.calibrenavbar{border:0;padding:0}.column1,h1,h2,.calibrenavbar{margin:0}'
preprocess_regexps = [ preprocess_regexps = [
@ -71,11 +71,11 @@ class AdvancedUserRecipe1306097511(BasicNewsRecipe):
remove_tags = [ remove_tags = [
dict(name=['iframe','script','noscript','style']), dict(name=['iframe','script','noscript','style']),
dict(name='div', attrs={'class':[re.compile('column-[14]-5'),'col-179 ','col-373 ','clear','ad','navigation',re.compile('share-tools(-top)?'),'tools','metroCommentFormWrap','article-tools-below-title','related-links','padding-top-15',re.compile('^promo.*?$'),'teaser-component',re.compile('fb(-comments|_iframe_widget)')]}), dict(name='div', attrs={'class':['column-4-5','column-1-5','ad-msg','col-179 ','col-373 ','clear','ad','navigation',re.compile('share-tools(-top)?'),'tools','metroCommentFormWrap','article-tools-below-title','related-links','padding-top-15',re.compile('^promo.*?$'),'teaser-component',re.compile('fb(-comments|_iframe_widget)'),'promos','header-links','promo-2']}),
dict(id=['column-1-5-bottom','column-4-5',re.compile('^ad(\d+|adcomp.*?)?$'),'sidebar',re.compile('^article-\d'),'comments','gallery-1']), dict(id=['column-1-5-bottom','column-4-5',re.compile('^ad(\d+|adcomp.*?)?$'),'adadcomp-4','margin-5','sidebar',re.compile('^article-\d'),'comments','gallery-1']),
dict(name='a', attrs={'name':'comments'}), dict(name='a', attrs={'name':'comments'}),
#dict(name='div', attrs={'data-href'}), #dict(name='div', attrs={'data-href'}),
dict(name='img', attrs={'class':'top-line'}), dict(name='img', attrs={'class':'top-line','title':'volledig scherm'}),
dict(attrs={'style':re.compile('^(.*(display\s?:\s?none|img-mask|white)\s?;?.*)$'),'title':'volledig scherm'})] dict(attrs={'style':re.compile('^(.*(display\s?:\s?none|img-mask|white)\s?;?.*)$'),'title':'volledig scherm'})]
'''removed by before/after: '''removed by before/after:

View File

@ -18,16 +18,21 @@ __IncludeThumbnails__ = True
__UseLife__ = True __UseLife__ = True
# (HK only) It is to disable premium content (Default: False) # (HK only) It is to disable premium content (Default: False)
__InclPremium__ = False __InclPremium__ = False
# (HK only) Turn below to True if you wish to parse articles in news.mingpao.com with their printer-friendly formats (Default: True) # (HK only) Turn below to True if you wish to parse articles in news.mingpao.com with their printer-friendly formats (Default: False)
__ParsePFF__ = True __ParsePF__ = False
# (HK only) Turn below to True if you wish to parse articles in news.mingpao.com with text formats (Default: True) -- override __ParsePF__
__ParseTxt__ = True
# (HK only) Use mobile text version for some articles (Default: False)
__ParseSelectedMobile__ = False
# (HK only) Turn below to True if you wish hi-res images (Default: False) # (HK only) Turn below to True if you wish hi-res images (Default: False)
__HiResImg__ = False __HiResImg__ = False
# Override the date returned by the program if specifying a YYYYMMDD below # Override the date returned by the program if specifying a YYYYMMDD below (not work if __ParseSelectedMobile__ is True and __UseLife__ is False)
__Date__ = '' __Date__ = ''
''' '''
Change Log: Change Log:
2012/04/24: improved parsing of news.mingpao.com content
2011/12/18: update the overridden create_odf(.) routine with the one from Calibre version 0.8.31. Move __UseChineseTitle__ usage away 2011/12/18: update the overridden create_odf(.) routine with the one from Calibre version 0.8.31. Move __UseChineseTitle__ usage away
from create_odf(.). Optional support of text_summary and thumbnail images in Kindle's article view. Start new day from create_odf(.). Optional support of text_summary and thumbnail images in Kindle's article view. Start new day
download of Hong Kong Mingpao at 4.30am. Set the actual publication date shown on kindle device. download of Hong Kong Mingpao at 4.30am. Set the actual publication date shown on kindle device.
@ -81,6 +86,7 @@ class MPRecipe(BasicNewsRecipe):
category = 'Chinese, News, Hong Kong' category = 'Chinese, News, Hong Kong'
extra_css = 'img {display: block; margin-left: auto; margin-right: auto; margin-top: 10px; margin-bottom: 10px; max-height:90%;} font>b {font-size:200%; font-weight:bold;} div[class=heading] {font-size:200%; font-weight:bold;} div[class=images] {font-size:50%;}' extra_css = 'img {display: block; margin-left: auto; margin-right: auto; margin-top: 10px; margin-bottom: 10px; max-height:90%;} font>b {font-size:200%; font-weight:bold;} div[class=heading] {font-size:200%; font-weight:bold;} div[class=images] {font-size:50%;}'
masthead_url = 'http://news.mingpao.com/image/portals_top_logo_news.gif' masthead_url = 'http://news.mingpao.com/image/portals_top_logo_news.gif'
remove_tags_before = dict(name='font', attrs={'color':['navy']})
keep_only_tags = [dict(name='h1'), keep_only_tags = [dict(name='h1'),
dict(name='font', attrs={'style':['font-size:14pt; line-height:160%;']}), # for entertainment page title dict(name='font', attrs={'style':['font-size:14pt; line-height:160%;']}), # for entertainment page title
dict(name='font', attrs={'color':['AA0000']}), # for column articles title dict(name='font', attrs={'color':['AA0000']}), # for column articles title
@ -91,13 +97,17 @@ class MPRecipe(BasicNewsRecipe):
dict(attrs={'class':['photo']}), dict(attrs={'class':['photo']}),
dict(name='table', attrs={'width':['100%'], 'border':['0'], 'cellspacing':['5'], 'cellpadding':['0']}), # content in printed version of life.mingpao.com dict(name='table', attrs={'width':['100%'], 'border':['0'], 'cellspacing':['5'], 'cellpadding':['0']}), # content in printed version of life.mingpao.com
dict(name='img', attrs={'width':['180'], 'alt':['????']}), # images for source from life.mingpao.com dict(name='img', attrs={'width':['180'], 'alt':['????']}), # images for source from life.mingpao.com
dict(attrs={'class':['images']}) # for images from txt dict(attrs={'class':['images']}), # for images from txt
dict(name='table', attrs={'width':['100%'], 'cellspacing':['0'], 'cellpadding':['0'], 'border':['0']}) # content table in pda site
] ]
if __KeepImages__: if __KeepImages__:
remove_tags = [dict(name='style'), remove_tags = [dict(name='style'),
dict(attrs={'id':['newscontent135']}), # for the finance page from mpfinance.com dict(attrs={'id':['newscontent135']}), # for the finance page from mpfinance.com
dict(name='font', attrs={'size':['2'], 'color':['666666']}), # article date in life.mingpao.com article dict(name='font', attrs={'size':['2'], 'color':['666666']}), # article date in life.mingpao.com article
dict(name='img', attrs={'alt':["明報網站", "按此列印", "關閉本視窗"]}), # non-article images in life.mingpao.com article
dict(name='img', attrs={'src':["../image/top_2.gif"]})
#dict(name='table') # for content fetched from life.mingpao.com #dict(name='table') # for content fetched from life.mingpao.com
#dict(name='table', attrs={'width':['98%'], 'cellspacing':['0'], 'cellpadding':['0'], 'border':['0']})
] ]
else: else:
remove_tags = [dict(name='style'), remove_tags = [dict(name='style'),
@ -105,6 +115,7 @@ class MPRecipe(BasicNewsRecipe):
dict(name='font', attrs={'size':['2'], 'color':['666666']}), # article date in life.mingpao.com article dict(name='font', attrs={'size':['2'], 'color':['666666']}), # article date in life.mingpao.com article
dict(name='img'), dict(name='img'),
#dict(name='table') # for content fetched from life.mingpao.com #dict(name='table') # for content fetched from life.mingpao.com
#dict(name='table', attrs={'width':['98%'], 'cellspacing':['0'], 'cellpadding':['0'], 'border':['0']})
] ]
remove_attributes = ['width'] remove_attributes = ['width']
preprocess_regexps = [ preprocess_regexps = [
@ -118,7 +129,15 @@ class MPRecipe(BasicNewsRecipe):
(re.compile(r"<div id='newscontent'><br>", re.DOTALL|re.IGNORECASE), (re.compile(r"<div id='newscontent'><br>", re.DOTALL|re.IGNORECASE),
lambda match: "<div id='newscontent'>"), lambda match: "<div id='newscontent'>"),
(re.compile(r"<br><br></b>", re.DOTALL|re.IGNORECASE), (re.compile(r"<br><br></b>", re.DOTALL|re.IGNORECASE),
lambda match: "</b>") lambda match: "</b>"),
(re.compile(r'<br><br><img src="http://pda.mingpao.com/image/shim.gif" width=11><br>', re.DOTALL|re.IGNORECASE),
lambda match: ''),
(re.compile(r'<img src="http://pda.mingpao.com/image/mbup.gif" border=0>', re.DOTALL|re.IGNORECASE),
lambda match: ''),
(re.compile(r'<img src="http://pda.mingpao.com/image/mbun.gif" border=0>', re.DOTALL|re.IGNORECASE),
lambda match: ''),
#(re.compile(r'[<a href="HotNews1.cfm.+?">.+?</a>]', re.DOTALL|re.IGNORECASE),
#lambda match: '')
] ]
elif __Region__ == 'Vancouver': elif __Region__ == 'Vancouver':
if __UseChineseTitle__ == True: if __UseChineseTitle__ == True:
@ -222,6 +241,10 @@ class MPRecipe(BasicNewsRecipe):
else: else:
return self.get_dtlocal().strftime("%d") return self.get_dtlocal().strftime("%d")
# Note: does not work with custom date given by __Date__
def get_weekday(self):
return self.get_dtlocal().weekday()
def get_cover_url(self): def get_cover_url(self):
if __Region__ == 'Hong Kong': if __Region__ == 'Hong Kong':
cover = 'http://news.mingpao.com/' + self.get_fetchdate() + '/' + self.get_fetchdate() + '_' + self.get_fetchday() + 'gacov.jpg' cover = 'http://news.mingpao.com/' + self.get_fetchdate() + '/' + self.get_fetchdate() + '_' + self.get_fetchday() + 'gacov.jpg'
@ -260,7 +283,23 @@ class MPRecipe(BasicNewsRecipe):
if articles: if articles:
feeds.append((title, articles)) feeds.append((title, articles))
if __InclPremium__ == True: # if __InclPremium__ == True:
# # parse column section articles directly from .txt files
# for title, url, keystr in [(u'\u5c08\u6b04 Columns', 'http://life.mingpao.com/cfm/dailynews2.cfm?Issue=' + dateStr +'&Category=ncolumn', 'ncl')
# ]:
# articles = self.parse_section2_txt(url, keystr)
# if articles:
# feeds.append((title, articles))
#
# for title, url in [(u'\u526f\u520a Supplement', 'http://news.mingpao.com/' + dateStr + '/jaindex.htm'),
# (u'\u82f1\u6587 English', 'http://news.mingpao.com/' + dateStr + '/emindex.htm')]:
# articles = self.parse_section(url)
# if articles:
# feeds.append((title, articles))
# new
if __InclPremium__ == True and (self.get_weekday() <> 6 or __ParseSelectedMobile__ == False):
# if both not on Sunday and not __ParseSelectedMobile__, go ahead
# parse column section articles directly from .txt files # parse column section articles directly from .txt files
for title, url, keystr in [(u'\u5c08\u6b04 Columns', 'http://life.mingpao.com/cfm/dailynews2.cfm?Issue=' + dateStr +'&Category=ncolumn', 'ncl') for title, url, keystr in [(u'\u5c08\u6b04 Columns', 'http://life.mingpao.com/cfm/dailynews2.cfm?Issue=' + dateStr +'&Category=ncolumn', 'ncl')
]: ]:
@ -268,17 +307,45 @@ class MPRecipe(BasicNewsRecipe):
if articles: if articles:
feeds.append((title, articles)) feeds.append((title, articles))
for title, url in [(u'\u526f\u520a Supplement', 'http://news.mingpao.com/' + dateStr + '/jaindex.htm'), if __InclPremium__ == False or self.get_weekday() <> 6:
(u'\u82f1\u6587 English', 'http://news.mingpao.com/' + dateStr + '/emindex.htm')]: for title, url, seckey in [(u'\u526f\u520a Supplement', 'http://news.mingpao.com/' + dateStr + '/jaindex.htm', 'ja')]:
articles = self.parse_section(url) if __ParseTxt__ == False:
articles = self.parse_section(url)
else:
articles = self.parse_section_txt(url, seckey)
if articles:
feeds.append((title, articles))
else:
if __InclPremium__ == True and __ParseSelectedMobile__ == True:
articles = self.parse_section_mobile('http://premium.mingpao.com/pda/palm', 'HotNews1.cfm?cat=ja&token=b218bc260b89c0&online=1')
if articles:
feeds.append((u'\u526f\u520a Supplement', articles))
else:
for title, url, seckey in [(u'\u526f\u520a Supplement', 'http://news.mingpao.com/' + dateStr + '/jaindex.htm', 'ja')]:
if __ParseTxt__ == False:
articles = self.parse_section(url)
else:
articles = self.parse_section_txt(url, seckey)
if articles:
feeds.append((title, articles))
for title, url, seckey in [(u'\u82f1\u6587 English', 'http://news.mingpao.com/' + dateStr + '/emindex.htm', 'em')]:
if __ParseTxt__ == False:
articles = self.parse_section(url)
else:
articles = self.parse_section_txt(url, seckey)
if articles: if articles:
feeds.append((title, articles)) feeds.append((title, articles))
# end of new
else: else:
for title, url in [(u'\u8981\u805e Headline', 'http://news.mingpao.com/' + dateStr + '/gaindex.htm'), for title, url, seckey in [(u'\u8981\u805e Headline', 'http://news.mingpao.com/' + dateStr + '/gaindex.htm', 'ga'),
(u'\u6e2f\u805e Local', 'http://news.mingpao.com/' + dateStr + '/gbindex.htm'), (u'\u6e2f\u805e Local', 'http://news.mingpao.com/' + dateStr + '/gbindex.htm', 'gb'),
(u'\u6559\u80b2 Education', 'http://news.mingpao.com/' + dateStr + '/gfindex.htm'), (u'\u6559\u80b2 Education', 'http://news.mingpao.com/' + dateStr + '/gfindex.htm', 'gf'),
(u'\u793e\u8a55/\u7b46\u9663 Editorial', 'http://news.mingpao.com/' + dateStr + '/mrindex.htm')]: (u'\u793e\u8a55/\u7b46\u9663 Editorial', 'http://news.mingpao.com/' + dateStr + '/mrindex.htm', 'mr')]:
articles = self.parse_section(url) if __ParseTxt__ == False:
articles = self.parse_section(url)
else:
articles = self.parse_section_txt(url, seckey)
if articles: if articles:
feeds.append((title, articles)) feeds.append((title, articles))
@ -287,10 +354,13 @@ class MPRecipe(BasicNewsRecipe):
#if ed_articles: #if ed_articles:
# feeds.append((u'\u793e\u8a55/\u7b46\u9663 Editorial', ed_articles)) # feeds.append((u'\u793e\u8a55/\u7b46\u9663 Editorial', ed_articles))
for title, url in [(u'\u8ad6\u58c7 Forum', 'http://news.mingpao.com/' + dateStr + '/faindex.htm'), for title, url, seckey in [(u'\u8ad6\u58c7 Forum', 'http://news.mingpao.com/' + dateStr + '/faindex.htm', 'fa'),
(u'\u4e2d\u570b China', 'http://news.mingpao.com/' + dateStr + '/caindex.htm'), (u'\u4e2d\u570b China', 'http://news.mingpao.com/' + dateStr + '/caindex.htm', 'ca'),
(u'\u570b\u969b World', 'http://news.mingpao.com/' + dateStr + '/taindex.htm')]: (u'\u570b\u969b World', 'http://news.mingpao.com/' + dateStr + '/taindex.htm', 'ta')]:
articles = self.parse_section(url) if __ParseTxt__ == False:
articles = self.parse_section(url)
else:
articles = self.parse_section_txt(url, seckey)
if articles: if articles:
feeds.append((title, articles)) feeds.append((title, articles))
@ -322,7 +392,9 @@ class MPRecipe(BasicNewsRecipe):
if articles: if articles:
feeds.append((title, articles)) feeds.append((title, articles))
if __InclPremium__ == True:
if __InclPremium__ == True and (self.get_weekday() <> 6 or __ParseSelectedMobile__ == False):
# if both not on Sunday or not __ParseSelectedMobile__, go ahead
# parse column section articles directly from .txt files # parse column section articles directly from .txt files
for title, url, keystr in [(u'\u5c08\u6b04 Columns', 'http://life.mingpao.com/cfm/dailynews2.cfm?Issue=' + dateStr +'&Category=ncolumn', 'ncl') for title, url, keystr in [(u'\u5c08\u6b04 Columns', 'http://life.mingpao.com/cfm/dailynews2.cfm?Issue=' + dateStr +'&Category=ncolumn', 'ncl')
]: ]:
@ -330,9 +402,33 @@ class MPRecipe(BasicNewsRecipe):
if articles: if articles:
feeds.append((title, articles)) feeds.append((title, articles))
for title, url in [(u'\u526f\u520a Supplement', 'http://news.mingpao.com/' + dateStr + '/jaindex.htm'), if __InclPremium__ == False or self.get_weekday() <> 6:
(u'\u82f1\u6587 English', 'http://news.mingpao.com/' + dateStr + '/emindex.htm')]: for title, url, seckey in [(u'\u526f\u520a Supplement', 'http://news.mingpao.com/' + dateStr + '/jaindex.htm', 'ja')]:
articles = self.parse_section(url) if __ParseTxt__ == False:
articles = self.parse_section(url)
else:
articles = self.parse_section_txt(url, seckey)
if articles:
feeds.append((title, articles))
else:
if __InclPremium__ == True and __ParseSelectedMobile__ == True:
articles = self.parse_section_mobile('http://premium.mingpao.com/pda/palm', 'HotNews1.cfm?cat=ja&token=b218bc260b89c0&online=1')
if articles:
feeds.append((u'\u526f\u520a Supplement', articles))
else:
for title, url, seckey in [(u'\u526f\u520a Supplement', 'http://news.mingpao.com/' + dateStr + '/jaindex.htm', 'ja')]:
if __ParseTxt__ == False:
articles = self.parse_section(url)
else:
articles = self.parse_section_txt(url, seckey)
if articles:
feeds.append((title, articles))
for title, url, seckey in [(u'\u82f1\u6587 English', 'http://news.mingpao.com/' + dateStr + '/emindex.htm', 'em')]:
if __ParseTxt__ == False:
articles = self.parse_section(url)
else:
articles = self.parse_section_txt(url, seckey)
if articles: if articles:
feeds.append((title, articles)) feeds.append((title, articles))
@ -366,7 +462,7 @@ class MPRecipe(BasicNewsRecipe):
feeds.append((title, articles)) feeds.append((title, articles))
return feeds return feeds
# parse from news.mingpao.com # parse from news.mingpao.com (web html)
def parse_section(self, url): def parse_section(self, url):
dateStr = self.get_fetchdate() dateStr = self.get_fetchdate()
soup = self.index_to_soup(url) soup = self.index_to_soup(url)
@ -379,17 +475,57 @@ class MPRecipe(BasicNewsRecipe):
title = self.tag_to_string(a) title = self.tag_to_string(a)
url = a.get('href', False) url = a.get('href', False)
url = 'http://news.mingpao.com/' + dateStr + '/' +url url = 'http://news.mingpao.com/' + dateStr + '/' +url
# replace the url to the print-friendly version # replace the url to the alternative version
if __ParsePFF__ == True: if __ParsePF__ == True:
# printer-friendly option
if url.rfind('Redirect') <> -1 and __InclPremium__ == True: if url.rfind('Redirect') <> -1 and __InclPremium__ == True:
url = re.sub(dateStr + '.*' + dateStr, dateStr, url) url = re.sub(dateStr + '.*' + dateStr, dateStr, url)
url = re.sub('%2F.*%2F', '/', url) url = re.sub('%2F.*%2F', '/', url)
title = title.replace(u'\u6536\u8cbb\u5167\u5bb9', '') if __InclPremium__ == True:
title = title.replace(u'\u6536\u8cbb\u5167\u5bb9', '')
url = url.replace('%2Etxt', '_print.htm') url = url.replace('%2Etxt', '_print.htm')
url = url.replace('%5F', '_') url = url.replace('%5F', '_')
else: else:
url = url.replace('.htm', '_print.htm') url = url.replace('.htm', '_print.htm')
if url not in included_urls and url.rfind('Redirect') == -1: #if url not in included_urls and url.rfind('Redirect') == -1 and (__InclPremium__ == False or title.rfind(u'\u6536\u8cbb\u5167\u5bb9') == -1):
if url not in included_urls and (__InclPremium__ == True or title.rfind(u'\u6536\u8cbb\u5167\u5bb9') == -1):
current_articles.append({'title': title, 'url': url, 'description':'', 'date':''})
included_urls.append(url)
current_articles.reverse()
return current_articles
# parse from news.mingpao.com (txt)
def parse_section_txt(self, url, ch):
dateStr = self.get_fetchdate()
soup = self.index_to_soup(url)
divs = soup.findAll(attrs={'class': ['bullet','bullet_grey']})
current_articles = []
included_urls = []
divs.reverse()
for i in divs:
a = i.find('a', href = True)
title = self.tag_to_string(a)
url = a.get('href', False)
#print 'Base url: ', url
# replace the url to the alternative version
# text version
if url.rfind('Redirect') <> -1:
url = 'http://news.mingpao.com/' + dateStr + '/' +url
#print 'original url: ', url
url = re.sub(dateStr + '/../cfm/Redirect.cfm.*NewsFile=', 'ftp/WebNews2/', url)
url = re.sub('%2F', '/', url)
if __InclPremium__ == True:
title = title.replace(u'\u6536\u8cbb\u5167\u5bb9', '')
url = url.replace('%2Etxt', '.txt')
url = url.replace('%5F', '_')
else:
# get the first two char in url as ch
seckey = url[0:2]
url = url.replace('.htm', '.txt')
url = 'http://news.mingpao.com/ftp/WebNews2/' + dateStr + '/' + ch + '/' + seckey + '/' + url
#print 'updated url: ', url
if url not in included_urls and (__InclPremium__ == True or title.rfind(u'\u6536\u8cbb\u5167\u5bb9') == -1):
#if url not in included_urls and (url.rfind('Redirect') == -1) and (__InclPremium__ == False or title.rfind(u'\u6536\u8cbb\u5167\u5bb9') == -1):
current_articles.append({'title': title, 'url': url, 'description':'', 'date':''}) current_articles.append({'title': title, 'url': url, 'description':'', 'date':''})
included_urls.append(url) included_urls.append(url)
current_articles.reverse() current_articles.reverse()
@ -415,7 +551,7 @@ class MPRecipe(BasicNewsRecipe):
current_articles.append({'title': title, 'url': url, 'description': ''}) current_articles.append({'title': title, 'url': url, 'description': ''})
included_urls.append(url) included_urls.append(url)
except: except:
print 'skipping a premium article' print 'skipping a premium article'
current_articles.reverse() current_articles.reverse()
return current_articles return current_articles
@ -437,6 +573,20 @@ class MPRecipe(BasicNewsRecipe):
current_articles.reverse() current_articles.reverse()
return current_articles return current_articles
# parse from mobile version
def parse_section_mobile(self, base, page):
soup = self.index_to_soup(base + '/' + page)
a = soup.findAll('a', href=True)
current_articles = []
included_urls = []
for i in a:
title = self.tag_to_string(i)
url = i.get('href', False)
if url not in included_urls and url.rfind('HotNews2.cfm') <> -1:
current_articles.append({'title': title, 'url': base + '/' + url, 'description': ''})
included_urls.append(url)
return current_articles
# parse from www.mingpaovan.com # parse from www.mingpaovan.com
def parse_section3(self, url, baseUrl): def parse_section3(self, url, baseUrl):
self.get_fetchdate() self.get_fetchdate()
@ -631,15 +781,22 @@ class MPRecipe(BasicNewsRecipe):
br.open_novisit(url + "/../" + gifimg[5:len(gifimg)-1]) br.open_novisit(url + "/../" + gifimg[5:len(gifimg)-1])
new_html = new_html.replace(img, gifimg) new_html = new_html.replace(img, gifimg)
except: except:
# find the location of the first _ if __ParseTxt__ == False:
pos = img.find('_') # find the location of the first _
if pos > -1: pos = img.find('_')
# if found, insert _ after the first _ if pos > -1:
newimg = img[0:pos] + '_' + img[pos:] # if found, insert _ after the first _
new_html = new_html.replace(img, newimg) newimg = img[0:pos] + '_' + img[pos:]
new_html = new_html.replace(img, newimg)
else:
# if not found, insert _ after "
new_html = new_html.replace(img[1:], '"_' + img[1:])
else: else:
# if not found, insert _ after " # insert to front
new_html = new_html.replace(img[1:], '"_' + img[1:]) #print 'imgstr: ', img
pos = img.find('_')
new_html = new_html.replace(img[5:], '_' + img[5:])
elif url.rfind('life.mingpao.com') > -1: elif url.rfind('life.mingpao.com') > -1:
imglist = re.findall('src=\'?.*?jpg\'', new_html) imglist = re.findall('src=\'?.*?jpg\'', new_html)
br = mechanize.Browser() br = mechanize.Browser()
@ -673,9 +830,13 @@ class MPRecipe(BasicNewsRecipe):
newimg = img[0:pos+1] + '_' + img[pos+1:] newimg = img[0:pos+1] + '_' + img[pos+1:]
#print 'Use hi-res img', newimg #print 'Use hi-res img', newimg
new_html = new_html.replace(img, newimg) new_html = new_html.replace(img, newimg)
# test
#print new_html
return new_html return new_html
def preprocess_html(self, soup): def preprocess_html(self, soup):
for mobiletitle in soup.findAll('font', attrs={'color': ['navy']}):
mobiletitle.name = 'h1'
for item in soup.findAll(style=True): for item in soup.findAll(style=True):
del item['style'] del item['style']
for item in soup.findAll(style=True): for item in soup.findAll(style=True):
@ -909,3 +1070,4 @@ class MPRecipe(BasicNewsRecipe):
opf.render(opf_file, ncx_file) opf.render(opf_file, ncx_file)

43
recipes/monbiot.recipe Normal file
View File

@ -0,0 +1,43 @@
__license__ = 'GPL v3'
__copyright__ = '2012, Darko Miletic <darko.miletic at gmail.com>'
'''
www.monbiot.com
'''
from calibre.web.feeds.news import BasicNewsRecipe
class GeorgeMonbiot(BasicNewsRecipe):
title = 'George Monbiot - blog'
__author__ = 'Darko Miletic'
description = 'Tell people something they know already and they will thank you for it. Tell people something new and they will hate you for it.'
publisher = 'George Monbiot'
category = 'news, politics, UK, World'
oldest_article = 15
max_articles_per_feed = 200
no_stylesheets = True
encoding = 'utf8'
use_embedded_content = False
language = 'en_GB'
remove_empty_feeds = True
publication_type = 'blog'
extra_css = """
body{font-family: Arial,Helvetica,sans-serif }
img{margin-bottom: 0.4em; display:block}
"""
conversion_options = {
'comment' : description
, 'tags' : category
, 'publisher' : publisher
, 'language' : language
}
remove_tags = [
dict(name=['meta','link']),
dict(attrs={'class':'shareinpost'}),
dict(attrs={'id':'paging'})
]
remove_attributes=['lang']
keep_only_tags=[dict(attrs={'id':'content'})]
feeds = [(u'Articles', u'http://www.monbiot.com/feed/atom/')]

View File

@ -1,5 +1,4 @@
from calibre.web.feeds.recipes import BasicNewsRecipe from calibre.web.feeds.recipes import BasicNewsRecipe
from calibre.ebooks.BeautifulSoup import BeautifulSoup
class NYTimes(BasicNewsRecipe): class NYTimes(BasicNewsRecipe):
@ -11,22 +10,8 @@ class NYTimes(BasicNewsRecipe):
needs_subscription = False needs_subscription = False
no_stylesheets = True no_stylesheets = True
#remove_tags_before = dict(name='h1', attrs={'class':'heading'}) auto_cleanup = True
remove_tags_after = dict(name='div', attrs={'class':'npStoryTools npWidth1-6 npRight npTxtStrong'}) auto_cleanup_keep = '//*[@class="npStoryPhoto npTxtPlain"]'
remove_tags = [
dict(name='iframe'),
dict(name='div', attrs={'class':['story-tools', 'npStoryTools npWidth1-6 npRight npTxtStrong']}),
#dict(name='div', attrs={'id':['qrformdiv', 'inSection', 'alpha-inner']}),
#dict(name='form', attrs={'onsubmit':''}),
dict(name='ul', attrs={'class':'npTxtAlt npGroup npTxtCentre npStoryShare npTxtStrong npTxtDim'}),
]
# def preprocess_html(self, soup):
# table = soup.find('table')
# if table is not None:
# table.extract()
# return soup
#TO GET ARTICLE TOC #TO GET ARTICLE TOC
@ -53,14 +38,14 @@ class NYTimes(BasicNewsRecipe):
if current_section is not None and x.name == 'h5': if current_section is not None and x.name == 'h5':
# Article found # Article found
title = self.tag_to_string(x) title = self.tag_to_string(x)
a = x.find('a', href=lambda x: x and 'story' in x) a = x.find('a', href=True)
if a is None: if a is None:
continue continue
url = a.get('href', False) url = a.get('href', False)
if not url or not title: if not url or not title:
continue continue
#if url.startswith('story'): #if url.startswith('story'):
url = 'http://www.nationalpost.com/todays-paper/'+url #url = 'http://www.nationalpost.com/todays-paper/'+url
self.log('\t\tFound article:', title) self.log('\t\tFound article:', title)
self.log('\t\t\t', url) self.log('\t\t\t', url)
current_articles.append({'title': title, 'url':url, current_articles.append({'title': title, 'url':url,
@ -70,11 +55,4 @@ class NYTimes(BasicNewsRecipe):
feeds.append((current_section, current_articles)) feeds.append((current_section, current_articles))
return feeds return feeds
def preprocess_html(self, soup):
story = soup.find(name='div', attrs={'id':'npContentMain'})
##td = heading.findParent(name='td')
##td.extract()
soup = BeautifulSoup('<html><head><title>t</title></head><body></body></html>')
body = soup.find(name='body')
body.insert(0, story)
return soup

View File

@ -2,20 +2,25 @@
#!/usr/bin/env python #!/usr/bin/env python
__license__ = 'GPL v3' __license__ = 'GPL v3'
__copyright__ = '2010, matek09, matek09@gmail.com' __copyright__ = '2010, matek09, matek09@gmail.com; 2012, admroz, a.rozewicki@gmail.com'
from calibre.web.feeds.news import BasicNewsRecipe from calibre.web.feeds.news import BasicNewsRecipe
from calibre.ptempfile import PersistentTemporaryFile from calibre.ptempfile import PersistentTemporaryFile
from string import capwords
import datetime import datetime
class Newsweek(BasicNewsRecipe): class Newsweek(BasicNewsRecipe):
# how many issues to go back, 0 means get the most current one
BACK_ISSUES = 1
EDITION = '0' EDITION = '0'
DATE = None DATE = None
YEAR = datetime.datetime.now().year YEAR = datetime.datetime.now().year
title = u'Newsweek Polska' title = u'Newsweek Polska'
__author__ = 'matek09' __author__ = 'matek09, admroz'
description = 'Weekly magazine' description = 'Weekly magazine'
encoding = 'utf-8' encoding = 'utf-8'
language = 'pl' language = 'pl'
@ -25,6 +30,9 @@ class Newsweek(BasicNewsRecipe):
articles_are_obfuscated = True articles_are_obfuscated = True
#
# Parses each article
#
def get_obfuscated_article(self, url): def get_obfuscated_article(self, url):
br = self.get_browser() br = self.get_browser()
br.open(url) br.open(url)
@ -37,7 +45,28 @@ class Newsweek(BasicNewsRecipe):
info = main_section.find('ul', attrs={'class' : 'articleInfo'}) info = main_section.find('ul', attrs={'class' : 'articleInfo'})
authors = info.find('li').find('h4') authors = info.find('li').find('h4')
article = main_section.find('div', attrs={'id' : 'article'}) article = main_section.find('div', attrs={'id' : 'article'})
html = unicode(title) + unicode(authors) + unicode(article)
# remove related articles box
related = article.find('div', attrs={'class' : 'relatedBox'})
if related is not None:
related.extract()
# remove div with social networking links and links to
# other articles in web version
for div in article.findAll('div'):
if div.find('span', attrs={'class' : 'google-plus'}):
div.extract()
for p in div.findAll('p'):
if p.find('span', attrs={'style' : 'color: rgb(255, 0, 0);'}):
p.extract()
continue
for a in p.findAll('a'):
if a.find('span', attrs={'style' : 'font-size: larger;'}):
a.extract()
html = unicode(title) + unicode(authors) + unicode(article)
next = main_section.find('li', attrs={'class' : 'next'}) next = main_section.find('li', attrs={'class' : 'next'})
while next: while next:
@ -59,32 +88,34 @@ class Newsweek(BasicNewsRecipe):
self.temp_files[-1].close() self.temp_files[-1].close()
return self.temp_files[-1].name return self.temp_files[-1].name
def is_full(self, issue_soup):
while True:
main_section = issue_soup.find(id='mainSection')
next = main_section.find('li', attrs={'class' : 'next'})
if len(main_section.findAll(attrs={'class' : 'locked'})) > 1:
return False
elif next is None:
return True
else:
issue_soup = self.index_to_soup(next.find('a')['href'])
def find_last_full_issue(self, archive_url): #
# Goes back given number of issues. It also knows how to go back
# to the previous year if there are not enough issues in the current one
#
def find_last_issue(self, archive_url):
archive_soup = self.index_to_soup(archive_url) archive_soup = self.index_to_soup(archive_url)
select = archive_soup.find('select', attrs={'id' : 'paper_issue_select'}) select = archive_soup.find('select', attrs={'id' : 'paper_issue_select'})
for option in select.findAll(lambda tag: tag.name == 'option' and tag.has_key('value')): options = select.findAll(lambda tag: tag.name == 'option' and tag.has_key('value'))
# check if need to go back to previous year
if len(options) > self.BACK_ISSUES:
option = options[self.BACK_ISSUES];
self.EDITION = option['value'].replace('http://www.newsweek.pl/wydania/','') self.EDITION = option['value'].replace('http://www.newsweek.pl/wydania/','')
issue_soup = self.index_to_soup('http://www.newsweek.pl/wydania/' + self.EDITION) self.index_to_soup('http://www.newsweek.pl/wydania/' + self.EDITION)
if self.is_full(issue_soup): else:
return self.BACK_ISSUES = self.BACK_ISSUES - len(options)
self.YEAR = self.YEAR - 1
self.find_last_issue(archive_url + ',' + str(self.YEAR))
self.YEAR = self.YEAR - 1
self.find_last_full_issue(archive_url + ',' + str(self.YEAR))
#
# Looks for the last issue which we want to download. Then goes on each
# section and article and stores them (assigning to sections)
#
def parse_index(self): def parse_index(self):
archive_url = 'http://www.newsweek.pl/wydania/archiwum' archive_url = 'http://www.newsweek.pl/wydania/archiwum'
self.find_last_full_issue(archive_url) self.find_last_issue(archive_url)
soup = self.index_to_soup('http://www.newsweek.pl/wydania/' + self.EDITION) soup = self.index_to_soup('http://www.newsweek.pl/wydania/' + self.EDITION)
self.DATE = self.tag_to_string(soup.find('span', attrs={'class' : 'data'})) self.DATE = self.tag_to_string(soup.find('span', attrs={'class' : 'data'}))
main_section = soup.find(id='mainSection') main_section = soup.find(id='mainSection')
@ -93,32 +124,44 @@ class Newsweek(BasicNewsRecipe):
feeds = [] feeds = []
articles = {} articles = {}
sections = [] sections = []
while True:
news_list = main_section.find('ul', attrs={'class' : 'newsList'})
for h2 in news_list.findAll('h2'):
article = self.create_article(h2) news_list = main_section.find('ul', attrs={'class' : 'newsList'})
category_div = h2.findNext('div', attrs={'class' : 'kategorie'}) section = 'Inne'
section = self.tag_to_string(category_div)
if articles.has_key(section): for li in news_list.findAll('li'):
articles[section].append(article) h3 = li.find('h3')
else: if h3 is not None:
articles[section] = [article] section = capwords(self.tag_to_string(h3))
sections.append(section) continue
else:
h2 = li.find('h2')
if h2 is not None:
article = self.create_article(h2)
if article is None :
continue
if articles.has_key(section):
articles[section].append(article)
else:
articles[section] = [article]
sections.append(section)
next = main_section.find('li', attrs={'class' : 'next'})
if next is None:
break
soup = self.index_to_soup(next.find('a')['href'])
main_section = soup.find(id='mainSection')
for section in sections: for section in sections:
feeds.append((section, articles[section])) feeds.append((section, articles[section]))
return feeds return feeds
#
# Creates each article metadata (skips locked ones). The content will
# be extracted later by other method (get_obfuscated_article).
#
def create_article(self, h2): def create_article(self, h2):
article = {} article = {}
a = h2.find('a') a = h2.find('a')
if a is None:
return None
article['title'] = self.tag_to_string(a) article['title'] = self.tag_to_string(a)
article['url'] = a['href'] article['url'] = a['href']
article['date'] = self.DATE article['date'] = self.DATE
@ -129,7 +172,3 @@ class Newsweek(BasicNewsRecipe):
else: else:
article['description'] = '' article['description'] = ''
return article return article

View File

@ -1,58 +1,59 @@
import re
from calibre.web.feeds.recipes import BasicNewsRecipe from calibre.web.feeds.recipes import BasicNewsRecipe
class AdvancedUserRecipe1308591763(BasicNewsRecipe): class AdvancedUserRecipe1335532466(BasicNewsRecipe):
title = u'Richmond Times-Dispatch' title = u'Richmond Times-Dispatch'
description = 'News from Richmond, Virginia' description = 'News from Richmond, Virginia, USA'
language = 'en'
__author__ = 'jde' __author__ = 'jde'
oldest_article = 3 #days cover_url = 'http://static2.dukecms.com/va_tn/timesdispatch_com/site-media/img/icons/logo252x97.png'
language = 'en'
encoding = 'utf8'
oldest_article = 1 #days
max_articles_per_feed = 25 max_articles_per_feed = 25
summary_length = 150 needs_subscription = False
no_stylesheets = True
remove_javascript = True remove_javascript = True
use_embedded_content = False recursions = 0
encoding = 'utf8' use_embedded_content = False
publisher = 'Richmond Times-Dispatch' no_stylesheets = True
category = 'news, Virginia, world' auto_cleanup = True
publication_type = 'newsportal'
extra_css = ' body{ font-family: Verdana,Helvetica,Arial,sans-serif } .introduction{font-weight: bold} .story-feature{display: block; padding: 0; border: 1px solid; width: 40%; font-size: small} .story-feature h2{text-align: center; text-transform: uppercase} '
preprocess_regexps = [(re.compile(r'<!--.*?-->', re.DOTALL), lambda m: '')]
conversion_options = {
'comments' : description
,'tags' : category
,'language' : language
,'publisher' : publisher
,'linearize_tables': True
}
remove_attributes = ['width','height'] feeds = [
remove_tags_before = dict(name='h1', attrs={'id':'story_headline'})
remove_tags_after = dict(name='class', attrs={'id':'content_fbrecommend'}) ('News',
'http://www2.timesdispatch.com/list/feed/rss/news-archive'),
('Breaking News',
'http://www2.timesdispatch.com/list/feed/rss/breaking-news'),
('National News',
'http://www2.timesdispatch.com/list/feed/rss/national-news'),
('Local News',
'http://www2.timesdispatch.com/list/feed/rss/local-news'),
('Business',
'http://www2.timesdispatch.com/list/feed/rss/business'),
('Local Business',
'http://www2.timesdispatch.com/list/feed/rss/local-business'),
('Politics',
'http://www2.timesdispatch.com/list/feed/rss/politics'),
('Virginia Politics',
'http://www2.timesdispatch.com/list/feed/rss/virginia-politics'),
('Editorials',
'http://www2.timesdispatch.com/list/feed/rss/editorial-desk'),
('Columnists and Blogs',
'http://www2.timesdispatch.com/list/feed/rss/news-columnists-blogs'),
('Opinion Columnists',
'http://www2.timesdispatch.com/list/feed/rss/opinion-editorial-columnists'),
('Letters to the Editor',
'http://www2.timesdispatch.com/list/feed/rss/opinion-letters'),
('Traffic',
'http://www2.timesdispatch.com/list/feed/rss/traffic'),
('Sports',
'http://www2.timesdispatch.com/list/feed/rss/sports2'),
('Entertainment/Life',
'http://www2.timesdispatch.com/list/feed/rss/entertainment'),
('Movies',
'http://www2.timesdispatch.com/list/feed/rss/movies'),
('Music',
'http://www2.timesdispatch.com/list/feed/rss/music'),
('Dining & Food',
'http://www2.timesdispatch.com/list/feed/rss/dining'),
remove_tags = [
dict(name='iframe'),
dict(name='div', attrs={'id':['topslider', 'top_links', 'top_links_center', 'top_links_right', 'mast', 'mainnav', 'search', 'searchbar_box', 'dateline', 'breadcrumb']}),
dict(name='div', attrs={'id':['sectionheader', 'comments_list', 'comment_form', 'sr_b', 'mg_ft', 'bottomad', 'mgproperties', 'copyright', 'bottomnow']}),
dict(name='div', attrs={'id':['comments_left']}),
dict(name='div', attrs={'class':['related_content', 'article_comments', 'article_foot', 'content_fbrecommend']}),
dict(name='div', attrs={'class':['bottom_social addthis_toolbox', 'featurebox', 'article_bottom']}),
dict(name='ul', attrs={'class':['jd_menu']})
] ]
feeds = [
(u'News', u'http://www2.timesdispatch.com/list/feed/rss/news-archive/'),
(u'Breaking News', u'http://www2.timesdispatch.com/list/feed/rss/breaking-news/'),
(u'National News', u'http://www2.timesdispatch.com/list/feed/rss/national-news/'),
(u'Local News', u'http://www2.timesdispatch.com/list/feed/rss/local-news/'),
(u'Business', u'http://www2.timesdispatch.com/list/feed/rss/business/'),
(u'Local Business', u'http://www2.timesdispatch.com/list/feed/rss/local-business/'),
(u'Politics', u'http://www2.timesdispatch.com/list/feed/rss/politics/'),
(u'Virginia Politics', u'http://www2.timesdispatch.com/list/feed/rss/virginia-politics/'),
(u'Editorials', u'http://www2.timesdispatch.com/list/feed/rss/editorial-desk/'),
(u'Columnists and Blogs', u'http://www2.timesdispatch.com/list/feed/rss/news-columnists-blogs//'),
(u'Opinion Columnists', u'http://www2.timesdispatch.com/list/feed/rss/opinion-editorial-columnists/'),
(u'Letters to the Editor', u'http://www2.timesdispatch.com/list/feed/rss/opinion-letters/'),
(u'Traffic', u'http://www2.timesdispatch.com/list/feed/rss/traffic/'),
]

View File

@ -1,12 +1,14 @@
import re, mechanize import re, random
from calibre import browser
from calibre.web.feeds.recipes import BasicNewsRecipe from calibre.web.feeds.recipes import BasicNewsRecipe
class AdvancedUserRecipe1325006965(BasicNewsRecipe): class AdvancedUserRecipe1325006965(BasicNewsRecipe):
title = u'The Sun UK' title = u'The Sun UK'
description = 'A Recipe for The Sun tabloid UK' description = 'A Recipe for The Sun tabloid UK'
__author__ = 'Dave Asbury' __author__ = 'Dave Asbury'
# last updated 7/4/12 # last updated 29/4/12
language = 'en_GB' language = 'en_GB'
oldest_article = 1 oldest_article = 1
max_articles_per_feed = 15 max_articles_per_feed = 15
@ -48,12 +50,10 @@ class AdvancedUserRecipe1325006965(BasicNewsRecipe):
feeds = [ feeds = [
(u'News','http://feed43.com/2517447382644748.xml'), (u'News', u'http://www.thesun.co.uk/sol/homepage/news/rss'),
(u'Sport', u'http://feed43.com/4283846255668687.xml'), (u'Sport', u'http://www.thesun.co.uk/sol/homepage/sport/rss'),
(u'Bizarre', u'http://feed43.com/0233840304242011.xml'), (u'Showbiz', u'http://www.thesun.co.uk/sol/homepage/showbiz/rss'),
(u'Film',u'http://feed43.com/1307545221226200.xml'), (u'Woman', u'http://www.thesun.co.uk/sol/homepage/woman/rss'),
(u'Music',u'http://feed43.com/1701513435064132.xml'),
(u'Sun Woman',u'http://feed43.com/0022626854226453.xml'),
] ]
def get_cover_url(self): def get_cover_url(self):
@ -61,14 +61,11 @@ class AdvancedUserRecipe1325006965(BasicNewsRecipe):
# look for the block containing the sun button and url # look for the block containing the sun button and url
cov = soup.find(attrs={'style' : 'background-image: url(http://www.politicshome.com/images/sources/source_frontpage_button_84.gif);'}) cov = soup.find(attrs={'style' : 'background-image: url(http://www.politicshome.com/images/sources/source_frontpage_button_84.gif);'})
#cov = soup.find(attrs={'id' : 'large'}) #cov = soup.find(attrs={'id' : 'large'})
cov2 = str(cov) cov2 = str(cov)
cov2='http://www.politicshome.com'+cov2[9:-133] cov2='http://www.politicshome.com'+cov2[9:-133]
#cov2 now contains url of the page containing pic #cov2 now contains url of the page containing pic
#cov2 now contains url of the page containing pic #cov2 now contains url of the page containing pic
soup = self.index_to_soup(cov2) soup = self.index_to_soup(cov2)
cov = soup.find(attrs={'id' : 'large'}) cov = soup.find(attrs={'id' : 'large'})
@ -76,16 +73,21 @@ class AdvancedUserRecipe1325006965(BasicNewsRecipe):
cov2=cov2[27:-18] cov2=cov2[27:-18]
#cov2 now is pic url, now go back to original function #cov2 now is pic url, now go back to original function
br = mechanize.Browser() br = browser()
br.set_handle_redirect(False) br.set_handle_redirect(False)
try: try:
br.open_novisit(cov2) br.open_novisit(cov2)
cover_url = cov2 cover_url = cov2
except: except:
cover_url = 'http://www.thesun.co.uk/img/global/new-masthead-logo.png' cover_url = random.choice((
'http://img.thesun.co.uk/multimedia/archive/00905/errorpage6_677961a_905507a.jpg'
,'http://img.thesun.co.uk/multimedia/archive/00905/errorpage7_677962a_905505a.jpg'
,'http://img.thesun.co.uk/multimedia/archive/00905/errorpage5_677960a_905512a.jpg'
,'http://img.thesun.co.uk/multimedia/archive/00905/errorpage2_677957a_905502a.jpg'
,'http://img.thesun.co.uk/multimedia/archive/00905/errorpage3_677958a_905503a.jpg'
))
#cover_url = cov2
#cover_url = 'http://www.thesun.co.uk/img/global/new-masthead-logo.png'
return cover_url return cover_url

View File

@ -2,65 +2,50 @@
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai # vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import with_statement from __future__ import with_statement
''' Changelog
2012-04-27 DrMerry:
Added cover picture
removed some extra tags
'''
__license__ = 'GPL v3' __license__ = 'GPL v3'
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import re import re
from calibre.web.feeds.news import BasicNewsRecipe from calibre.web.feeds.news import BasicNewsRecipe
class Tweakers(BasicNewsRecipe): class Tweakers(BasicNewsRecipe):
title = u'Tweakers.net - with Reactions' title = u'Tweakers.net'
__author__ = 'Roedi06' __author__ = 'Kovid Goyal'
language = 'nl' language = 'nl'
oldest_article = 7 oldest_article = 4
max_articles_per_feed = 100 max_articles_per_feed = 40
cover_url = 'http://img51.imageshack.us/img51/7470/tweakersnetebook.gif' cover_url = 'http://tweakers.net/ext/launch/g/logo.gif'
keep_only_tags = [dict(name='div', attrs={'class':'columnwrapper news'}), keep_only_tags = [dict(name='div', attrs={'class':'columnwrapper news'})]
{'id':'reacties'},
]
remove_tags = [dict(name='div', attrs={'id' : ['utracker']}), remove_tags = [dict(name='div', attrs={'class':'reacties'}),
{'id' : ['channelNav']}, {'id' : ['utracker','socialButtons','b_ac']},
{'id' : ['contentArea']}, {'class' : ['sidebar','advertorial']},
{'class' : ['breadCrumb']}, {'class' : re.compile('nextPrevious')},
{'class' : ['nextPrevious ellipsis']},
{'class' : ['advertorial']},
{'class' : ['sidebar']},
{'class' : ['filterBox']},
{'id' : ['toggleButtonTxt']},
{'id' : ['socialButtons']},
{'class' : ['button']},
{'class' : ['textadTop']},
{'class' : ['commentLink']},
{'title' : ['Reageer op deze reactie']},
{'class' : ['pageIndex']},
{'class' : ['reactieHeader collapsed']},
] ]
no_stylesheets=True no_stylesheets=True
filter_regexps = [r'ads\.doubleclick\.net',r'ad\.doubleclick\.net']
preprocess_regexps = [ feeds = [(u'Tweakers.net', u'http://tweakers.net/feeds/nieuws.xml')]
(re.compile(r'<hr*?>', re.IGNORECASE | re.DOTALL), lambda match : ''),
(re.compile(r'<p>', re.IGNORECASE | re.DOTALL), lambda match : ''),
(re.compile(r'</p>', re.IGNORECASE | re.DOTALL), lambda match : ''),
(re.compile(r'<a.*?>'), lambda h1: '<b><u>'),
(re.compile(r'</a>'), lambda h2: '</u></b>'),
(re.compile(r'<span class="new">', re.IGNORECASE | re.DOTALL), lambda match : ''),
(re.compile(r'</span>', re.IGNORECASE | re.DOTALL), lambda match : ''),
(re.compile(r'<div class="moderation"><img src="http://tweakimg.net/g/if/comments/score_0'), lambda match : ' - moderated 0<div class="moderation"><img src="http://tweakimg.net/g/if/comments/score_0'),
(re.compile(r'<div class="moderation"><img src="http://tweakimg.net/g/if/comments/score_1'), lambda match : ' - moderated +1<div class="moderation"><img src="http://tweakimg.net/g/if/comments/score_1'),
(re.compile(r'<div class="moderation"><img src="http://tweakimg.net/g/if/comments/score_2'), lambda match : ' - moderated +2<div class="moderation"><img src="http://tweakimg.net/g/if/comments/score_2'),
(re.compile(r'<div class="moderation"><img src="http://tweakimg.net/g/if/comments/score_3'), lambda match : ' - moderated +3<div class="moderation"><img src="http://tweakimg.net/g/if/comments/score_3'),
(re.compile(r'<div class="moderation">.*?</div>'), lambda h1: ''),
]
extra_css = '.reactieHeader { color: #333333; font-size: 6px; border-bottom:solid 2px #333333; border-top:solid 1px #333333; } \ def preprocess_html(self, soup):
.reactieContent { font-family:"Times New Roman",Georgia,Serif; color: #000000; font-size: 8px; } \ for a in soup.findAll('a', href=True, rel=True):
.quote { font-family:"Times New Roman",Georgia,Serif; padding-left:2px; border-left:solid 3px #666666; color: #666666; }' if a['rel'].startswith('imageview'):
a['src'] = a['href']
del a['href']
feeds = [(u'Tweakers.net', u'http://feeds.feedburner.com/tweakers/nieuws')] a.name = 'img'
for x in a.findAll(True):
def print_version(self, url): x.extract()
return url + '?max=200' return soup
def postprocess_html(self, soup, first):
for base in soup.findAll('base'):
base.extract()
return soup

View File

@ -0,0 +1,17 @@
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from calibre.web.feeds.news import BasicNewsRecipe
class ViceESRecipe(BasicNewsRecipe):
title = u'Vice Magazine España'
__author__ = 'atordo'
description = u'La página web oficial de la revista Vice España'
category = u'noticias, fotografía, blogs, moda, arte, cine, música, literatura, tecnología'
cover_url = 'http://www.seeklogo.com/images/V/Vice-logo-668578AC94-seeklogo.com.gif'
oldest_article = 20
max_articles_per_feed = 30
auto_cleanup = True
no_stylesheets = True
language = 'es'
feeds = [('Vice', 'http://www.vice.com/es/rss')]

View File

@ -490,12 +490,6 @@ save_original_format = True
# how many should be shown, here. # how many should be shown, here.
gui_view_history_size = 15 gui_view_history_size = 15
#: When using the 'Tweak Book' action, which format to prefer
# When tweaking a book that has multiple formats, calibre picks one
# automatically. By default EPUB is preferred to HTMLZ. If you would like to
# prefer HTMLZ to EPUB for tweaking, change this to 'htmlz'
tweak_book_prefer = 'epub'
#: Change the font size of book details in the interface #: Change the font size of book details in the interface
# Change the font size at which book details are rendered in the side panel and # Change the font size at which book details are rendered in the side panel and
# comments are rendered in the metadata edit dialog. Set it to a positive or # comments are rendered in the metadata edit dialog. Set it to a positive or

View File

@ -377,7 +377,7 @@
<xsl:apply-templates/><br/> <xsl:apply-templates/><br/>
</xsl:template> </xsl:template>
<!-- image --> <!-- image -->
<xsl:template match="fb:image"> <xsl:template match="fb:body/fb:image|fb:section/fb:image">
<div align="center"> <div align="center">
<xsl:element name="img"> <xsl:element name="img">
<xsl:attribute name="border">1</xsl:attribute> <xsl:attribute name="border">1</xsl:attribute>
@ -395,4 +395,20 @@
</xsl:element> </xsl:element>
</div> </div>
</xsl:template> </xsl:template>
<xsl:template match="fb:image">
<xsl:element name="img">
<xsl:choose>
<xsl:when test="starts-with(@xlink:href,'#')">
<xsl:attribute name="src"><xsl:value-of select="substring-after(@xlink:href,'#')"/></xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="src"><xsl:value-of select="@xlink:href"/></xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="@title">
<xsl:attribute name="title"><xsl:value-of select="@title"/></xsl:attribute>
</xsl:if>
</xsl:element>
</xsl:template>
</xsl:stylesheet> </xsl:stylesheet>

View File

@ -12,14 +12,14 @@ msgstr ""
"Report-Msgid-Bugs-To: Debian iso-codes team <pkg-isocodes-" "Report-Msgid-Bugs-To: Debian iso-codes team <pkg-isocodes-"
"devel@lists.alioth.debian.org>\n" "devel@lists.alioth.debian.org>\n"
"POT-Creation-Date: 2011-11-25 14:01+0000\n" "POT-Creation-Date: 2011-11-25 14:01+0000\n"
"PO-Revision-Date: 2012-04-12 09:56+0000\n" "PO-Revision-Date: 2012-04-28 10:42+0000\n"
"Last-Translator: Dídac Rios <didac@niorcs.com>\n" "Last-Translator: Ferran Rius <frius64@hotmail.com>\n"
"Language-Team: Catalan <linux@softcatala.org>\n" "Language-Team: Catalan <linux@softcatala.org>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-04-13 05:26+0000\n" "X-Launchpad-Export-Date: 2012-04-29 04:45+0000\n"
"X-Generator: Launchpad (build 15070)\n" "X-Generator: Launchpad (build 15149)\n"
"Language: ca\n" "Language: ca\n"
#. name for aaa #. name for aaa
@ -9536,7 +9536,7 @@ msgstr "Ani"
#. name for hni #. name for hni
msgid "Hani" msgid "Hani"
msgstr "" msgstr "Haní"
#. name for hnj #. name for hnj
msgid "Hmong Njua" msgid "Hmong Njua"
@ -9544,7 +9544,7 @@ msgstr "Miao; Hmong Njua"
#. name for hnn #. name for hnn
msgid "Hanunoo" msgid "Hanunoo"
msgstr "" msgstr "Hanunoo"
#. name for hno #. name for hno
msgid "Hindko; Northern" msgid "Hindko; Northern"
@ -9552,35 +9552,35 @@ msgstr "Hindko; septentrional"
#. name for hns #. name for hns
msgid "Hindustani; Caribbean" msgid "Hindustani; Caribbean"
msgstr "" msgstr "Hindustaní; Caribeny"
#. name for hnu #. name for hnu
msgid "Hung" msgid "Hung"
msgstr "" msgstr "Hung"
#. name for hoa #. name for hoa
msgid "Hoava" msgid "Hoava"
msgstr "" msgstr "Hoava"
#. name for hob #. name for hob
msgid "Mari (Madang Province)" msgid "Mari (Madang Province)"
msgstr "" msgstr "Mari (Província de Madang)"
#. name for hoc #. name for hoc
msgid "Ho" msgid "Ho"
msgstr "" msgstr "Ho"
#. name for hod #. name for hod
msgid "Holma" msgid "Holma"
msgstr "" msgstr "Holma"
#. name for hoe #. name for hoe
msgid "Horom" msgid "Horom"
msgstr "" msgstr "Horom"
#. name for hoh #. name for hoh
msgid "Hobyót" msgid "Hobyót"
msgstr "" msgstr "Hobyot"
#. name for hoi #. name for hoi
msgid "Holikachuk" msgid "Holikachuk"
@ -9588,11 +9588,11 @@ msgstr "Holikachuk"
#. name for hoj #. name for hoj
msgid "Hadothi" msgid "Hadothi"
msgstr "Hadothi" msgstr "Harautí"
#. name for hol #. name for hol
msgid "Holu" msgid "Holu"
msgstr "Holu" msgstr "Holo"
#. name for hom #. name for hom
msgid "Homa" msgid "Homa"
@ -9628,11 +9628,11 @@ msgstr "Honi"
#. name for hoy #. name for hoy
msgid "Holiya" msgid "Holiya"
msgstr "" msgstr "Holiya"
#. name for hoz #. name for hoz
msgid "Hozo" msgid "Hozo"
msgstr "" msgstr "Hozo"
#. name for hpo #. name for hpo
msgid "Hpon" msgid "Hpon"
@ -9644,7 +9644,7 @@ msgstr "Hawaià Pidgin; llenguatge de signes"
#. name for hra #. name for hra
msgid "Hrangkhol" msgid "Hrangkhol"
msgstr "Hrangkhol" msgstr "Hrangkol"
#. name for hre #. name for hre
msgid "Hre" msgid "Hre"
@ -9668,7 +9668,7 @@ msgstr "Horuru"
#. name for hrt #. name for hrt
msgid "Hértevin" msgid "Hértevin"
msgstr "Hértevin" msgstr "Hertevin"
#. name for hru #. name for hru
msgid "Hruso" msgid "Hruso"
@ -9724,7 +9724,7 @@ msgstr "Hitu"
#. name for htx #. name for htx
msgid "Hittite; Middle" msgid "Hittite; Middle"
msgstr "Hittite; Middle" msgstr "Hittita; mitjà"
#. name for hub #. name for hub
msgid "Huambisa" msgid "Huambisa"
@ -9732,7 +9732,7 @@ msgstr "Huambisa"
#. name for huc #. name for huc
msgid "=/Hua" msgid "=/Hua"
msgstr "" msgstr "Hua"
#. name for hud #. name for hud
msgid "Huaulu" msgid "Huaulu"
@ -9740,7 +9740,7 @@ msgstr "Huaulu"
#. name for hue #. name for hue
msgid "Huave; San Francisco Del Mar" msgid "Huave; San Francisco Del Mar"
msgstr "Huave; San Francisco Del Mar" msgstr "Huave; San Francisco"
#. name for huf #. name for huf
msgid "Humene" msgid "Humene"
@ -9756,7 +9756,7 @@ msgstr "Huilliche"
#. name for hui #. name for hui
msgid "Huli" msgid "Huli"
msgstr "Huli" msgstr "Hulí"
#. name for huj #. name for huj
msgid "Miao; Northern Guiyang" msgid "Miao; Northern Guiyang"
@ -9808,7 +9808,7 @@ msgstr "Huitoto; Murui"
#. name for huv #. name for huv
msgid "Huave; San Mateo Del Mar" msgid "Huave; San Mateo Del Mar"
msgstr "Huave; San Mateo Del Mar" msgstr "Huave; San Mateo"
#. name for huw #. name for huw
msgid "Hukumina" msgid "Hukumina"
@ -9820,35 +9820,35 @@ msgstr "Huitoto; Nüpode"
#. name for huy #. name for huy
msgid "Hulaulá" msgid "Hulaulá"
msgstr "" msgstr "Arameu; Hulaula"
#. name for huz #. name for huz
msgid "Hunzib" msgid "Hunzib"
msgstr "" msgstr "Hunzib"
#. name for hvc #. name for hvc
msgid "Haitian Vodoun Culture Language" msgid "Haitian Vodoun Culture Language"
msgstr "" msgstr "Haitià Vodoun"
#. name for hve #. name for hve
msgid "Huave; San Dionisio Del Mar" msgid "Huave; San Dionisio Del Mar"
msgstr "" msgstr "Huave; San Dionisio"
#. name for hvk #. name for hvk
msgid "Haveke" msgid "Haveke"
msgstr "" msgstr "Haveke"
#. name for hvn #. name for hvn
msgid "Sabu" msgid "Sabu"
msgstr "" msgstr "Sabu"
#. name for hvv #. name for hvv
msgid "Huave; Santa María Del Mar" msgid "Huave; Santa María Del Mar"
msgstr "" msgstr "Huave; Santa Maria"
#. name for hwa #. name for hwa
msgid "Wané" msgid "Wané"
msgstr "" msgstr "Wané"
#. name for hwc #. name for hwc
msgid "Creole English; Hawai'i" msgid "Creole English; Hawai'i"
@ -9856,11 +9856,11 @@ msgstr "Anglès crioll; Hawaii"
#. name for hwo #. name for hwo
msgid "Hwana" msgid "Hwana"
msgstr "" msgstr "Hwana"
#. name for hya #. name for hya
msgid "Hya" msgid "Hya"
msgstr "" msgstr "Hya"
#. name for hye #. name for hye
msgid "Armenian" msgid "Armenian"
@ -9868,71 +9868,71 @@ msgstr "armeni"
#. name for iai #. name for iai
msgid "Iaai" msgid "Iaai"
msgstr "" msgstr "Iaai"
#. name for ian #. name for ian
msgid "Iatmul" msgid "Iatmul"
msgstr "" msgstr "Iatmulès"
#. name for iap #. name for iap
msgid "Iapama" msgid "Iapama"
msgstr "" msgstr "Iapama"
#. name for iar #. name for iar
msgid "Purari" msgid "Purari"
msgstr "" msgstr "Purari"
#. name for iba #. name for iba
msgid "Iban" msgid "Iban"
msgstr "" msgstr "Iban"
#. name for ibb #. name for ibb
msgid "Ibibio" msgid "Ibibio"
msgstr "" msgstr "Ibibio"
#. name for ibd #. name for ibd
msgid "Iwaidja" msgid "Iwaidja"
msgstr "" msgstr "Iwaidja"
#. name for ibe #. name for ibe
msgid "Akpes" msgid "Akpes"
msgstr "" msgstr "Akpes"
#. name for ibg #. name for ibg
msgid "Ibanag" msgid "Ibanag"
msgstr "" msgstr "Ibanag"
#. name for ibi #. name for ibi
msgid "Ibilo" msgid "Ibilo"
msgstr "" msgstr "Ibilo"
#. name for ibl #. name for ibl
msgid "Ibaloi" msgid "Ibaloi"
msgstr "" msgstr "Ibaloi"
#. name for ibm #. name for ibm
msgid "Agoi" msgid "Agoi"
msgstr "" msgstr "Agoi"
#. name for ibn #. name for ibn
msgid "Ibino" msgid "Ibino"
msgstr "" msgstr "Ibino"
#. name for ibo #. name for ibo
msgid "Igbo" msgid "Igbo"
msgstr "" msgstr "Ibo"
#. name for ibr #. name for ibr
msgid "Ibuoro" msgid "Ibuoro"
msgstr "" msgstr "Ibuoro"
#. name for ibu #. name for ibu
msgid "Ibu" msgid "Ibu"
msgstr "" msgstr "Ibu"
#. name for iby #. name for iby
msgid "Ibani" msgid "Ibani"
msgstr "" msgstr "Ibani"
#. name for ica #. name for ica
msgid "Ede Ica" msgid "Ede Ica"

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@ __license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' __copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
__appname__ = u'calibre' __appname__ = u'calibre'
numeric_version = (0, 8, 49) numeric_version = (0, 8, 50)
__version__ = u'.'.join(map(unicode, numeric_version)) __version__ = u'.'.join(map(unicode, numeric_version))
__author__ = u"Kovid Goyal <kovid@kovidgoyal.net>" __author__ = u"Kovid Goyal <kovid@kovidgoyal.net>"

View File

@ -445,7 +445,7 @@ class LRFMetadataWriter(MetadataWriterPlugin):
class MOBIMetadataWriter(MetadataWriterPlugin): class MOBIMetadataWriter(MetadataWriterPlugin):
name = 'Set MOBI metadata' name = 'Set MOBI metadata'
file_types = set(['mobi', 'prc', 'azw', 'azw4']) file_types = set(['mobi', 'prc', 'azw', 'azw3', 'azw4'])
description = _('Set metadata in %s files')%'MOBI' description = _('Set metadata in %s files')%'MOBI'
author = 'Marshall T. Vandegrift' author = 'Marshall T. Vandegrift'
@ -539,7 +539,8 @@ from calibre.ebooks.conversion.plugins.epub_output import EPUBOutput
from calibre.ebooks.conversion.plugins.fb2_output import FB2Output from calibre.ebooks.conversion.plugins.fb2_output import FB2Output
from calibre.ebooks.conversion.plugins.lit_output import LITOutput from calibre.ebooks.conversion.plugins.lit_output import LITOutput
from calibre.ebooks.conversion.plugins.lrf_output import LRFOutput from calibre.ebooks.conversion.plugins.lrf_output import LRFOutput
from calibre.ebooks.conversion.plugins.mobi_output import MOBIOutput from calibre.ebooks.conversion.plugins.mobi_output import (MOBIOutput,
AZW3Output)
from calibre.ebooks.conversion.plugins.oeb_output import OEBOutput from calibre.ebooks.conversion.plugins.oeb_output import OEBOutput
from calibre.ebooks.conversion.plugins.pdb_output import PDBOutput from calibre.ebooks.conversion.plugins.pdb_output import PDBOutput
from calibre.ebooks.conversion.plugins.pdf_output import PDFOutput from calibre.ebooks.conversion.plugins.pdf_output import PDFOutput
@ -580,7 +581,7 @@ plugins += [
FB2Output, FB2Output,
LITOutput, LITOutput,
LRFOutput, LRFOutput,
MOBIOutput, MOBIOutput, AZW3Output,
OEBOutput, OEBOutput,
PDBOutput, PDBOutput,
PDFOutput, PDFOutput,
@ -1253,6 +1254,15 @@ class StoreBeWriteStore(StoreBase):
headquarters = 'US' headquarters = 'US'
formats = ['EPUB', 'MOBI', 'PDF'] formats = ['EPUB', 'MOBI', 'PDF']
class StoreBiblioStore(StoreBase):
name = u'Библио.бг'
author = 'Alex Stanev'
description = u'Електронна книжарница за книги и списания във формати ePUB и PDF. Част от заглавията са с активна DRM защита.'
actual_plugin = 'calibre.gui2.store.stores.biblio_plugin:BiblioStore'
headquarters = 'BG'
formats = ['EPUB, PDF']
class StoreBookotekaStore(StoreBase): class StoreBookotekaStore(StoreBase):
name = 'Bookoteka' name = 'Bookoteka'
author = u'Tomasz Długosz' author = u'Tomasz Długosz'
@ -1538,7 +1548,7 @@ class StoreWaterstonesUKStore(StoreBase):
headquarters = 'UK' headquarters = 'UK'
formats = ['EPUB', 'PDF'] formats = ['EPUB', 'PDF']
affiliate = True affiliate = False
class StoreWeightlessBooksStore(StoreBase): class StoreWeightlessBooksStore(StoreBase):
name = 'Weightless Books' name = 'Weightless Books'
@ -1596,6 +1606,7 @@ plugins += [
StoreBNStore, StoreBNStore,
StoreBeamEBooksDEStore, StoreBeamEBooksDEStore,
StoreBeWriteStore, StoreBeWriteStore,
StoreBiblioStore,
StoreBookotekaStore, StoreBookotekaStore,
StoreChitankaStore, StoreChitankaStore,
StoreDieselEbooksStore, StoreDieselEbooksStore,

View File

@ -295,3 +295,15 @@ class OutputFormatPlugin(Plugin):
return self.oeb.metadata.publication_type and \ return self.oeb.metadata.publication_type and \
unicode(self.oeb.metadata.publication_type[0]).startswith('periodical:') unicode(self.oeb.metadata.publication_type[0]).startswith('periodical:')
def specialize_css_for_output(self, log, opts, item, stylizer):
'''
Can be used to make changes to the css during the CSS flattening
process.
:param item: The item (HTML file) being processed
:param stylizer: A Stylizer object containing the flattened styles for
item. You can get the style for any element by stylizer.style(element).
'''
pass

View File

@ -54,6 +54,13 @@ Run an embedded python interpreter.
parser.add_option('-m', '--inspect-mobi', action='store_true', parser.add_option('-m', '--inspect-mobi', action='store_true',
default=False, default=False,
help='Inspect the MOBI file(s) at the specified path(s)') help='Inspect the MOBI file(s) at the specified path(s)')
parser.add_option('--tweak-book', default=None,
help='Tweak the book (exports the book as a collection of HTML '
'files and metadata, which you can edit using standard HTML '
'editing tools, and then rebuilds the file from the edited HTML. '
'Makes no additional changes to the HTML, unlike a full calibre '
'conversion).')
parser.add_option('--test-build', help='Test binary modules in build', parser.add_option('--test-build', help='Test binary modules in build',
action='store_true', default=False) action='store_true', default=False)
@ -213,7 +220,7 @@ def main(args=sys.argv):
from calibre.utils.pyconsole.main import main from calibre.utils.pyconsole.main import main
main() main()
elif opts.command: elif opts.command:
sys.argv = args[:1] sys.argv = args
exec opts.command exec opts.command
elif opts.debug_device_driver: elif opts.debug_device_driver:
debug_device_driver() debug_device_driver()
@ -239,7 +246,9 @@ def main(args=sys.argv):
prints('Inspecting:', path) prints('Inspecting:', path)
inspect_mobi(path) inspect_mobi(path)
print print
elif opts.tweak_book:
from calibre.ebooks.tweak import tweak
tweak(opts.tweak_book)
elif opts.test_build: elif opts.test_build:
from calibre.test_build import test from calibre.test_build import test
test() test()

View File

@ -42,7 +42,7 @@ class ANDROID(USBMS):
0xcac : HTC_BCDS, 0xcac : HTC_BCDS,
0xccf : HTC_BCDS, 0xccf : HTC_BCDS,
0x2910 : HTC_BCDS, 0x2910 : HTC_BCDS,
0xff9 : [0x9999], 0xff9 : HTC_BCDS + [0x9999],
}, },
# Eken # Eken

View File

@ -155,7 +155,11 @@ class CHMReader(CHMFile):
self.hhc_path = f self.hhc_path = f
break break
if self.hhc_path not in files and files: if self.hhc_path not in files and files:
self.hhc_path = files[0] for f in files:
if f.partition('.')[-1].lower() in {'html', 'htm', 'xhtm',
'xhtml'}:
self.hhc_path = f
break
if self.hhc_path == '.hhc' and self.hhc_path not in files: if self.hhc_path == '.hhc' and self.hhc_path not in files:
from calibre import walk from calibre import walk
@ -165,6 +169,9 @@ class CHMReader(CHMFile):
self.hhc_path = os.path.relpath(x, output_dir) self.hhc_path = os.path.relpath(x, output_dir)
break break
if self.hhc_path not in files and files:
self.hhc_path = files[0]
def _reformat(self, data, htmlpath): def _reformat(self, data, htmlpath):
if self.input_encoding: if self.input_encoding:
data = data.decode(self.input_encoding) data = data.decode(self.input_encoding)
@ -241,7 +248,10 @@ class CHMReader(CHMFile):
except: except:
pass pass
# do not prettify, it would reformat the <pre> tags! # do not prettify, it would reformat the <pre> tags!
return str(soup) try:
return str(soup)
except RuntimeError:
return data
def Contents(self): def Contents(self):
if self._contents is not None: if self._contents is not None:

View File

@ -65,6 +65,7 @@ class EPUBInput(InputFormatPlugin):
return False return False
def rationalize_cover(self, opf, log): def rationalize_cover(self, opf, log):
removed = None
from lxml import etree from lxml import etree
guide_cover, guide_elem = None, None guide_cover, guide_elem = None, None
for guide_elem in opf.iterguide(): for guide_elem in opf.iterguide():
@ -91,6 +92,7 @@ class EPUBInput(InputFormatPlugin):
# specially # specially
if not self.for_viewer: if not self.for_viewer:
spine[0].getparent().remove(spine[0]) spine[0].getparent().remove(spine[0])
removed = guide_cover
guide_elem.set('href', 'calibre_raster_cover.jpg') guide_elem.set('href', 'calibre_raster_cover.jpg')
from calibre.ebooks.oeb.base import OPF from calibre.ebooks.oeb.base import OPF
t = etree.SubElement(elem[0].getparent(), OPF('item'), t = etree.SubElement(elem[0].getparent(), OPF('item'),
@ -109,6 +111,7 @@ class EPUBInput(InputFormatPlugin):
if renderer is not None: if renderer is not None:
open('calibre_raster_cover.jpg', 'wb').write( open('calibre_raster_cover.jpg', 'wb').write(
renderer) renderer)
return removed
def find_opf(self): def find_opf(self):
from lxml import etree from lxml import etree
@ -170,7 +173,7 @@ class EPUBInput(InputFormatPlugin):
for elem in opf.iterguide(): for elem in opf.iterguide():
elem.set('href', delta+elem.get('href')) elem.set('href', delta+elem.get('href'))
self.rationalize_cover(opf, log) self.removed_cover = self.rationalize_cover(opf, log)
self.optimize_opf_parsing = opf self.optimize_opf_parsing = opf
for x in opf.itermanifest(): for x in opf.itermanifest():
@ -198,3 +201,17 @@ class EPUBInput(InputFormatPlugin):
nopf.write(opf.render()) nopf.write(opf.render())
return os.path.abspath(u'content.opf') return os.path.abspath(u'content.opf')
def postprocess_book(self, oeb, opts, log):
rc = getattr(self, 'removed_cover', None)
if rc:
cover_toc_item = None
for item in oeb.toc.iterdescendants():
if item.href == rc:
cover_toc_item = item
break
spine = {x.href for x in oeb.spine}
if (cover_toc_item is not None and cover_toc_item not in spine):
oeb.toc.item_that_refers_to_cover = cover_toc_item

View File

@ -312,13 +312,9 @@ class EPUBOutput(OutputFormatPlugin):
Perform various markup transforms to get the output to render correctly Perform various markup transforms to get the output to render correctly
in the quirky ADE. in the quirky ADE.
''' '''
from calibre.ebooks.oeb.base import XPath, XHTML, OEB_STYLES, barename, urlunquote from calibre.ebooks.oeb.base import XPath, XHTML, barename, urlunquote
stylesheet = None stylesheet = self.oeb.manifest.main_stylesheet
for item in self.oeb.manifest:
if item.media_type.lower() in OEB_STYLES:
stylesheet = item
break
# ADE cries big wet tears when it encounters an invalid fragment # ADE cries big wet tears when it encounters an invalid fragment
# identifier in the NCX toc. # identifier in the NCX toc.

View File

@ -5,13 +5,13 @@ __copyright__ = '2008, Anatoly Shipitsin <norguhtar at gmail.com>'
Convert .fb2 files to .lrf Convert .fb2 files to .lrf
""" """
import os, re import os, re
from base64 import b64decode
from calibre.customize.conversion import InputFormatPlugin, OptionRecommendation from calibre.customize.conversion import InputFormatPlugin, OptionRecommendation
from calibre import guess_type from calibre import guess_type
FB2NS = 'http://www.gribuser.ru/xml/fictionbook/2.0' FB2NS = 'http://www.gribuser.ru/xml/fictionbook/2.0'
class FB2Input(InputFormatPlugin): class FB2Input(InputFormatPlugin):
name = 'FB2 Input' name = 'FB2 Input'
@ -41,6 +41,7 @@ class FB2Input(InputFormatPlugin):
from calibre.ebooks.oeb.base import XLINK_NS, XHTML_NS, RECOVER_PARSER from calibre.ebooks.oeb.base import XLINK_NS, XHTML_NS, RECOVER_PARSER
from calibre.ebooks.chardet import xml_to_unicode from calibre.ebooks.chardet import xml_to_unicode
NAMESPACES = {'f':FB2NS, 'l':XLINK_NS} NAMESPACES = {'f':FB2NS, 'l':XLINK_NS}
self.log = log
log.debug('Parsing XML...') log.debug('Parsing XML...')
raw = stream.read().replace('\0', '') raw = stream.read().replace('\0', '')
raw = xml_to_unicode(raw, strip_encoding_pats=True, raw = xml_to_unicode(raw, strip_encoding_pats=True,
@ -123,6 +124,7 @@ class FB2Input(InputFormatPlugin):
return os.path.join(os.getcwdu(), u'metadata.opf') return os.path.join(os.getcwdu(), u'metadata.opf')
def extract_embedded_content(self, doc): def extract_embedded_content(self, doc):
from calibre.ebooks.fb2 import base64_decode
self.binary_map = {} self.binary_map = {}
for elem in doc.xpath('./*'): for elem in doc.xpath('./*'):
if elem.text and 'binary' in elem.tag and elem.attrib.has_key('id'): if elem.text and 'binary' in elem.tag and elem.attrib.has_key('id'):
@ -130,8 +132,17 @@ class FB2Input(InputFormatPlugin):
fname = elem.attrib['id'] fname = elem.attrib['id']
ext = ct.rpartition('/')[-1].lower() ext = ct.rpartition('/')[-1].lower()
if ext in ('png', 'jpeg', 'jpg'): if ext in ('png', 'jpeg', 'jpg'):
fname += '.' + ext if fname.lower().rpartition('.')[-1] not in {'jpg', 'jpeg',
'png'}:
fname += '.' + ext
self.binary_map[elem.get('id')] = fname self.binary_map[elem.get('id')] = fname
data = b64decode(elem.text.strip()) raw = elem.text.strip()
open(fname, 'wb').write(data) try:
data = base64_decode(raw)
except TypeError:
self.log.exception('Binary data with id=%s is corrupted, ignoring'%(
elem.get('id')))
else:
with open(fname, 'wb') as f:
f.write(data)

View File

@ -6,8 +6,32 @@ __license__ = 'GPL v3'
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>' __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
from calibre.customize.conversion import OutputFormatPlugin from calibre.customize.conversion import (OutputFormatPlugin,
from calibre.customize.conversion import OptionRecommendation OptionRecommendation)
def remove_html_cover(oeb, log):
from calibre.ebooks.oeb.base import OEB_DOCS
if not oeb.metadata.cover \
or 'cover' not in oeb.guide:
return
href = oeb.guide['cover'].href
del oeb.guide['cover']
item = oeb.manifest.hrefs[href]
if item.spine_position is not None:
log.warn('Found an HTML cover: ', item.href, 'removing it.',
'If you find some content missing from the output MOBI, it '
'is because you misidentified the HTML cover in the input '
'document')
oeb.spine.remove(item)
if item.media_type in OEB_DOCS:
oeb.manifest.remove(item)
def extract_mobi(output_path, opts):
if opts.extract_to is not None:
from calibre.ebooks.mobi.debug.main import inspect_mobi
ddir = opts.extract_to
inspect_mobi(output_path, ddir=ddir)
class MOBIOutput(OutputFormatPlugin): class MOBIOutput(OutputFormatPlugin):
@ -140,25 +164,6 @@ class MOBIOutput(OutputFormatPlugin):
# Fix up the periodical href to point to first section href # Fix up the periodical href to point to first section href
toc.nodes[0].href = toc.nodes[0].nodes[0].href toc.nodes[0].href = toc.nodes[0].nodes[0].href
def remove_html_cover(self):
from calibre.ebooks.oeb.base import OEB_DOCS
oeb = self.oeb
if not oeb.metadata.cover \
or 'cover' not in oeb.guide:
return
href = oeb.guide['cover'].href
del oeb.guide['cover']
item = oeb.manifest.hrefs[href]
if item.spine_position is not None:
self.log.warn('Found an HTML cover: ', item.href, 'removing it.',
'If you find some content missing from the output MOBI, it '
'is because you misidentified the HTML cover in the input '
'document')
oeb.spine.remove(item)
if item.media_type in OEB_DOCS:
self.oeb.manifest.remove(item)
def convert(self, oeb, output_path, input_plugin, opts, log): def convert(self, oeb, output_path, input_plugin, opts, log):
from calibre.utils.config import tweaks from calibre.utils.config import tweaks
from calibre.ebooks.mobi.writer2.resources import Resources from calibre.ebooks.mobi.writer2.resources import Resources
@ -169,7 +174,7 @@ class MOBIOutput(OutputFormatPlugin):
mobi_type = 'old' # Amazon does not support KF8 periodicals mobi_type = 'old' # Amazon does not support KF8 periodicals
create_kf8 = mobi_type in ('new', 'both') create_kf8 = mobi_type in ('new', 'both')
self.remove_html_cover() remove_html_cover(self.oeb, self.log)
resources = Resources(oeb, opts, self.is_periodical, resources = Resources(oeb, opts, self.is_periodical,
add_fonts=create_kf8) add_fonts=create_kf8)
self.check_for_periodical() self.check_for_periodical()
@ -185,7 +190,7 @@ class MOBIOutput(OutputFormatPlugin):
) if create_kf8 else None ) if create_kf8 else None
if mobi_type == 'new': if mobi_type == 'new':
kf8.write(output_path) kf8.write(output_path)
self.extract_mobi(output_path, opts) extract_mobi(output_path, opts)
return return
self.log('Creating MOBI 6 output') self.log('Creating MOBI 6 output')
@ -225,11 +230,77 @@ class MOBIOutput(OutputFormatPlugin):
writer = MobiWriter(opts, resources, kf8, writer = MobiWriter(opts, resources, kf8,
write_page_breaks_after_item=write_page_breaks_after_item) write_page_breaks_after_item=write_page_breaks_after_item)
writer(oeb, output_path) writer(oeb, output_path)
self.extract_mobi(output_path, opts) extract_mobi(output_path, opts)
def specialize_css_for_output(self, log, opts, item, stylizer):
from calibre.ebooks.mobi.writer8.cleanup import CSSCleanup
CSSCleanup(log, opts)(item, stylizer)
class AZW3Output(OutputFormatPlugin):
name = 'AZW3 Output'
author = 'Kovid Goyal'
file_type = 'azw3'
options = set([
OptionRecommendation(name='prefer_author_sort',
recommended_value=False, level=OptionRecommendation.LOW,
help=_('When present, use author sort field as author.')
),
OptionRecommendation(name='no_inline_toc',
recommended_value=False, level=OptionRecommendation.LOW,
help=_('Don\'t add Table of Contents to the book. Useful if '
'the book has its own table of contents.')),
OptionRecommendation(name='toc_title', recommended_value=None,
help=_('Title for any generated in-line table of contents.')
),
OptionRecommendation(name='dont_compress',
recommended_value=False, level=OptionRecommendation.LOW,
help=_('Disable compression of the file contents.')
),
OptionRecommendation(name='mobi_toc_at_start',
recommended_value=False,
help=_('When adding the Table of Contents to the book, add it at the start of the '
'book instead of the end. Not recommended.')
),
OptionRecommendation(name='extract_to', recommended_value=None,
help=_('Extract the contents of the MOBI file to the'
' specified directory. If the directory already '
'exists, it will be deleted.')
),
OptionRecommendation(name='share_not_sync', recommended_value=False,
help=_('Enable sharing of book content via Facebook etc. '
' on the Kindle. WARNING: Using this feature means that '
' the book will not auto sync its last read position '
' on multiple devices. Complain to Amazon.')
),
])
def convert(self, oeb, output_path, input_plugin, opts, log):
from calibre.ebooks.mobi.writer2.resources import Resources
from calibre.ebooks.mobi.writer8.main import create_kf8_book
self.oeb, self.opts, self.log = oeb, opts, log
opts.mobi_periodical = self.is_periodical
passthrough = getattr(opts, 'mobi_passthrough', False)
resources = Resources(self.oeb, self.opts, self.is_periodical,
add_fonts=True, process_images=False)
if not passthrough:
remove_html_cover(self.oeb, self.log)
# Split on pagebreaks so that the resulting KF8 works better with
# calibre's viewer, which does not support CSS page breaks
from calibre.ebooks.oeb.transforms.split import Split
Split()(self.oeb, self.opts)
kf8 = create_kf8_book(self.oeb, self.opts, resources, for_joint=False)
kf8.write(output_path)
extract_mobi(output_path, opts)
def specialize_css_for_output(self, log, opts, item, stylizer):
from calibre.ebooks.mobi.writer8.cleanup import CSSCleanup
CSSCleanup(log, opts)(item, stylizer)
def extract_mobi(self, output_path, opts):
if opts.extract_to is not None:
from calibre.ebooks.mobi.debug.main import inspect_mobi
ddir = opts.extract_to
inspect_mobi(output_path, ddir=ddir)

View File

@ -99,12 +99,8 @@ class PDFOutput(OutputFormatPlugin):
# Remove page-break-before on <body> element as it causes # Remove page-break-before on <body> element as it causes
# blank pages in PDF Output # blank pages in PDF Output
from calibre.ebooks.oeb.base import OEB_STYLES, XPath from calibre.ebooks.oeb.base import XPath
stylesheet = None stylesheet = self.oeb.manifest.main_stylesheet
for item in self.oeb.manifest:
if item.media_type.lower() in OEB_STYLES:
stylesheet = item
break
if stylesheet is not None: if stylesheet is not None:
from cssutils.css import CSSRule from cssutils.css import CSSRule
classes = set(['.calibre']) classes = set(['.calibre'])

View File

@ -4,6 +4,7 @@ __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import os, re, sys, shutil, pprint import os, re, sys, shutil, pprint
from functools import partial
from calibre.customize.conversion import OptionRecommendation, DummyReporter from calibre.customize.conversion import OptionRecommendation, DummyReporter
from calibre.customize.ui import input_profiles, output_profiles, \ from calibre.customize.ui import input_profiles, output_profiles, \
@ -1010,6 +1011,13 @@ OptionRecommendation(name='search_replace',
pr(0.35) pr(0.35)
self.flush() self.flush()
if self.output_plugin.file_type != 'epub':
# Remove the toc reference to the html cover, if any, except for
# epub, as the epub output plugin will do the right thing with it.
item = getattr(self.oeb.toc, 'item_that_refers_to_cover', None)
if item is not None and item.count() == 0:
self.oeb.toc.remove(item)
from calibre.ebooks.oeb.transforms.flatcss import CSSFlattener from calibre.ebooks.oeb.transforms.flatcss import CSSFlattener
fbase = self.opts.base_font_size fbase = self.opts.base_font_size
if fbase < 1e-4: if fbase < 1e-4:
@ -1061,7 +1069,9 @@ OptionRecommendation(name='search_replace',
untable=self.output_plugin.file_type in ('mobi','lit'), untable=self.output_plugin.file_type in ('mobi','lit'),
unfloat=self.output_plugin.file_type in ('mobi', 'lit'), unfloat=self.output_plugin.file_type in ('mobi', 'lit'),
page_break_on_body=self.output_plugin.file_type in ('mobi', page_break_on_body=self.output_plugin.file_type in ('mobi',
'lit')) 'lit'),
specializer=partial(self.output_plugin.specialize_css_for_output,
self.log, self.opts))
flattener(self.oeb, self.opts) flattener(self.oeb, self.opts)
self.opts.insert_blank_line = oibl self.opts.insert_blank_line = oibl

View File

@ -538,7 +538,7 @@ class HTMLPreProcessor(object):
search_replace = getattr(self.extra_opts, 'search_replace', None) search_replace = getattr(self.extra_opts, 'search_replace', None)
if search_replace: if search_replace:
search_replace = json.loads(search_replace) search_replace = json.loads(search_replace)
for search_pattern, replace_txt in search_replace: for search_pattern, replace_txt in reversed(search_replace):
do_search_replace(search_pattern, replace_txt) do_search_replace(search_pattern, replace_txt)
end_rules = [] end_rules = []

View File

@ -179,7 +179,11 @@ class HeuristicProcessor(object):
for match in re.finditer(pat, search_text): for match in re.finditer(pat, search_text):
ital_string = str(match.group('words')) ital_string = str(match.group('words'))
#self.log.debug("italicising "+str(match.group(0))+" with <i>"+ital_string+"</i>") #self.log.debug("italicising "+str(match.group(0))+" with <i>"+ital_string+"</i>")
html = re.sub(re.escape(str(match.group(0))), '<i>%s</i>' % ital_string, html) try:
html = re.sub(re.escape(str(match.group(0))), '<i>%s</i>' % ital_string, html)
except OverflowError:
# match.group(0) was too large to be compiled into a regex
continue
return html return html

View File

@ -0,0 +1,52 @@
#!/usr/bin/env python
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import (unicode_literals, division, absolute_import,
print_function)
__license__ = 'GPL v3'
__copyright__ = '2012, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en'
def base64_decode(raw):
from io import BytesIO
from base64 import b64decode
# First try the python implementation as it is faster
try:
return b64decode(raw)
except TypeError:
pass
# Try a more robust version (adapted from FBReader sources)
A, Z, a, z, zero, nine, plus, slash, equal = bytearray(b'AZaz09+/=')
raw = bytearray(raw)
out = BytesIO()
pos = 0
while pos < len(raw):
tot = 0
i = 0
while i < 4 and pos < len(raw):
byt = raw[pos]
pos += 1
num = 0
if A <= byt <= Z:
num = byt - A
elif a <= byt <= z:
num = byt - a + 26
elif zero <= byt <= nine:
num = byt - zero + 52
else:
num = {plus:62, slash:63, equal:64}.get(byt, None)
if num is None:
# Ignore this byte
continue
tot += num << (6 * (3 - i))
i += 1
triple = bytearray(3)
for j in (2, 1, 0):
triple[j] = tot & 0xff
tot >>= 8
out.write(bytes(triple))
return out.getvalue()

View File

@ -18,6 +18,7 @@ from lxml import etree
from calibre import prepare_string_for_xml from calibre import prepare_string_for_xml
from calibre.constants import __appname__, __version__ from calibre.constants import __appname__, __version__
from calibre.utils.magick import Image from calibre.utils.magick import Image
from calibre.utils.localization import lang_as_iso639_1
class FB2MLizer(object): class FB2MLizer(object):
''' '''
@ -103,7 +104,10 @@ class FB2MLizer(object):
metadata['version'] = __version__ metadata['version'] = __version__
metadata['date'] = '%i.%i.%i' % (datetime.now().day, datetime.now().month, datetime.now().year) metadata['date'] = '%i.%i.%i' % (datetime.now().day, datetime.now().month, datetime.now().year)
if self.oeb_book.metadata.language: if self.oeb_book.metadata.language:
metadata['lang'] = self.oeb_book.metadata.language[0].value lc = lang_as_iso639_1(self.oeb_book.metadata.language[0].value)
if not lc:
lc = self.oeb_book.metadata.language[0].value
metadata['lang'] = lc or 'en'
else: else:
metadata['lang'] = u'en' metadata['lang'] = u'en'
metadata['id'] = None metadata['id'] = None

View File

@ -647,14 +647,10 @@ class Metadata(object):
return (unicode(cmeta['name']+'_index'), '', '', cmeta) return (unicode(cmeta['name']+'_index'), '', '', cmeta)
if key in self.custom_field_keys(): if key in self.custom_field_keys():
res = self.get(key, None) res = self.get(key, None) # get evaluates all necessary composites
cmeta = self.get_user_metadata(key, make_copy=False) cmeta = self.get_user_metadata(key, make_copy=False)
name = unicode(cmeta['name']) name = unicode(cmeta['name'])
if cmeta['datatype'] != 'composite' and (res is None or res == ''): if res is None or res == '': # can't check "not res" because of numeric fields
return (name, res, None, None)
orig_res = res
cmeta = self.get_user_metadata(key, make_copy=False)
if res is None or res == '':
return (name, res, None, None) return (name, res, None, None)
orig_res = res orig_res = res
datatype = cmeta['datatype'] datatype = cmeta['datatype']

View File

@ -8,7 +8,6 @@ __copyright__ = '2011, Roman Mukhin <ramses_ru at hotmail.com>, '\
import os import os
import datetime import datetime
from functools import partial from functools import partial
from base64 import b64decode
from lxml import etree from lxml import etree
from calibre.utils.date import parse_date from calibre.utils.date import parse_date
from calibre import guess_type, guess_all_extensions, prints, force_unicode from calibre import guess_type, guess_all_extensions, prints, force_unicode
@ -143,6 +142,7 @@ def _parse_cover(root, mi):
pass pass
def _parse_cover_data(root, imgid, mi): def _parse_cover_data(root, imgid, mi):
from calibre.ebooks.fb2 import base64_decode
elm_binary = XPath('//fb2:binary[@id="%s"]'%imgid)(root) elm_binary = XPath('//fb2:binary[@id="%s"]'%imgid)(root)
if elm_binary: if elm_binary:
mimetype = elm_binary[0].get('content-type', 'image/jpeg') mimetype = elm_binary[0].get('content-type', 'image/jpeg')
@ -156,7 +156,8 @@ def _parse_cover_data(root, imgid, mi):
if mime_extensions: if mime_extensions:
pic_data = elm_binary[0].text pic_data = elm_binary[0].text
if pic_data: if pic_data:
mi.cover_data = (mime_extensions[0][1:], b64decode(pic_data)) mi.cover_data = (mime_extensions[0][1:],
base64_decode(pic_data.strip()))
else: else:
prints("WARNING: Unsupported coverpage mime-type '%s' (id=#%s)" % (mimetype, imgid) ) prints("WARNING: Unsupported coverpage mime-type '%s' (id=#%s)" % (mimetype, imgid) )

View File

@ -549,6 +549,9 @@ class TextRecord(object): # {{{
raw = '%s : %r\n\n'%(k, v) raw = '%s : %r\n\n'%(k, v)
f.write(raw.encode('utf-8')) f.write(raw.encode('utf-8'))
def __len__(self):
return len(self.raw)
# }}} # }}}

View File

@ -158,9 +158,12 @@ class NCXIndex(Index):
self.records = [] self.records = []
if self.table is not None: if self.table is not None:
NCXEntry = namedtuple('NCXEntry', 'index start length depth parent '
'first_child last_child title pos_fid')
for num, x in enumerate(self.table.iteritems()): for num, x in enumerate(self.table.iteritems()):
text, tag_map = x text, tag_map = x
entry = default_entry.copy() entry = e = default_entry.copy()
entry['name'] = text entry['name'] = text
entry['num'] = num entry['num'] = num
@ -179,7 +182,17 @@ class NCXIndex(Index):
if tag == which: if tag == which:
entry[name] = self.cncx.get(fieldvalue, entry[name] = self.cncx.get(fieldvalue,
default_entry[name]) default_entry[name])
def refindx(e, name):
ans = e[name]
if ans < 0:
ans = None
return ans
entry = NCXEntry(start=e['pos'], index=e['num'],
length=e['len'], depth=e['hlvl'], parent=refindx(e,
'parent'), first_child=refindx(e, 'child1'),
last_child=refindx(e, 'childn'), title=e['text'],
pos_fid=e['pos_fid'])
self.records.append(entry) self.records.append(entry)

View File

@ -2,19 +2,20 @@
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai # vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import (unicode_literals, division, absolute_import, from __future__ import (unicode_literals, division, absolute_import,
print_function) print_function)
from future_builtins import map
__license__ = 'GPL v3' __license__ = 'GPL v3'
__copyright__ = '2012, Kovid Goyal <kovid@kovidgoyal.net>' __copyright__ = '2012, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import sys, os, imghdr, struct import sys, os, imghdr, struct, textwrap
from itertools import izip from itertools import izip
from calibre import CurrentDir from calibre import CurrentDir
from calibre.ebooks.mobi.debug.headers import TextRecord from calibre.ebooks.mobi.debug.headers import TextRecord
from calibre.ebooks.mobi.debug.index import (SKELIndex, SECTIndex, NCXIndex, from calibre.ebooks.mobi.debug.index import (SKELIndex, SECTIndex, NCXIndex,
GuideIndex) GuideIndex)
from calibre.ebooks.mobi.utils import read_font_record, decode_tbs from calibre.ebooks.mobi.utils import read_font_record, decode_tbs, RECORD_SIZE
from calibre.ebooks.mobi.debug import format_bytes from calibre.ebooks.mobi.debug import format_bytes
from calibre.ebooks.mobi.reader.headers import NULL_INDEX from calibre.ebooks.mobi.reader.headers import NULL_INDEX
@ -140,9 +141,10 @@ class MOBIFile(object):
self.files.append(File(skel, skeleton, ftext, first_aid, sections)) self.files.append(File(skel, skeleton, ftext, first_aid, sections))
def dump_flows(self, ddir): def dump_flows(self, ddir):
if self.fdst is None: boundaries = [(0, len(self.raw_text))]
raise ValueError('This MOBI file has no FDST record') if self.fdst is not None:
for i, x in enumerate(self.fdst.sections): boundaries = self.fdst.sections
for i, x in enumerate(boundaries):
start, end = x start, end = x
raw = self.raw_text[start:end] raw = self.raw_text[start:end]
with open(os.path.join(ddir, 'flow%04d.txt'%i), 'wb') as f: with open(os.path.join(ddir, 'flow%04d.txt'%i), 'wb') as f:
@ -185,42 +187,61 @@ class MOBIFile(object):
payload)) payload))
def read_tbs(self): def read_tbs(self):
from calibre.ebooks.mobi.writer8.tbs import (Entry, from calibre.ebooks.mobi.writer8.tbs import (Entry, DOC,
collect_indexing_data) collect_indexing_data, encode_strands_as_sequences,
sequences_to_bytes)
entry_map = [] entry_map = []
for index in self.ncx_index: for index in self.ncx_index:
enders = [e['pos'] for e in self.ncx_index if e['pos'] > vals = list(index)[:-1] + [None, None, None, None]
index['pos'] and entry_map.append(Entry(*vals))
e['hlvl'] <= index['hlvl']]
end = min(enders+[len(self.raw_text)])
entry_map.append(Entry(index=index['num'], title=index['text'],
depth=index['hlvl'],
parent=index['parent'] if index['parent'] > -1 else None,
first_child=index['child1'] if index['child1'] > -1 else None,
last_child=index['childn'] if index['childn'] > -1 else None,
start=index['pos'], length=end-index['pos']))
indexing_data = collect_indexing_data(entry_map, indexing_data = collect_indexing_data(entry_map, list(map(len,
len(self.text_records)) self.text_records)))
self.indexing_data = [] self.indexing_data = [DOC + '\n' +textwrap.dedent('''\
for i, data in enumerate(indexing_data): Index Entry lines are of the form:
depth:index_number [action] parent (index_num-parent) Geometry
Where Geometry is the start and end of the index entry w.r.t
the start of the text record.
''')]
for i, strands in enumerate(indexing_data):
rec = self.text_records[i] rec = self.text_records[i]
tbs_bytes = rec.trailing_data.get('indexing', b'') tbs_bytes = rec.trailing_data.get('indexing', b'')
desc = ['Record #%d'%i] desc = ['Record #%d'%i]
for x in ('starts', 'completes', 'ends', 'spans'): for s, strand in enumerate(strands):
points = ['\t%d at depth: %d'%(e.index, e.depth) for e in desc.append('Strand %d'%s)
getattr(data, x)] for entries in strand.itervalues():
if points: for e in entries:
desc.append(x+':') desc.append(
desc.extend(points) ' %s%d [%-9s] parent: %s (%d) Geometry: (%d, %d)'%(
e.depth * (' ') + '- ', e.index, e.action, e.parent,
e.index-(e.parent or 0), e.start-i*RECORD_SIZE,
e.start+e.length-i*RECORD_SIZE))
desc.append('TBS Bytes: ' + format_bytes(tbs_bytes)) desc.append('TBS Bytes: ' + format_bytes(tbs_bytes))
val, extra, consumed = decode_tbs(tbs_bytes, flag_size=3) flag_sz = 3
extra = {bin(k):v for k, v in extra.iteritems()} sequences = []
desc.append('First sequence: %r %r'%(val, extra)) otbs = tbs_bytes
byts = tbs_bytes[consumed:] while tbs_bytes:
if byts: try:
desc.append('Remaining bytes: %s'%format_bytes(byts)) val, extra, consumed = decode_tbs(tbs_bytes, flag_size=flag_sz)
except:
break
flag_sz = 4
tbs_bytes = tbs_bytes[consumed:]
extra = {bin(k):v for k, v in extra.iteritems()}
sequences.append((val, extra))
for j, seq in enumerate(sequences):
desc.append('Sequence #%d: %r %r'%(j, seq[0], seq[1]))
if tbs_bytes:
desc.append('Remaining bytes: %s'%format_bytes(tbs_bytes))
calculated_sequences = encode_strands_as_sequences(strands)
calculated_bytes = sequences_to_bytes(calculated_sequences)
if calculated_bytes != otbs:
print ('WARNING: TBS mismatch for record %d'%i)
desc.append('WARNING: TBS mismatch!')
desc.append('Calculated sequences: %r'%calculated_sequences)
desc.append('') desc.append('')
self.indexing_data.append('\n'.join(desc)) self.indexing_data.append('\n'.join(desc))
@ -233,8 +254,7 @@ def inspect_mobi(mobi_file, ddir):
with open(alltext, 'wb') as of: with open(alltext, 'wb') as of:
of.write(f.raw_text) of.write(f.raw_text)
for x in ('text_records', 'images', 'fonts', 'binary', 'files', 'flows', for x in ('text_records', 'images', 'fonts', 'binary', 'files', 'flows'):
'tbs'):
os.mkdir(os.path.join(ddir, x)) os.mkdir(os.path.join(ddir, x))
for rec in f.text_records: for rec in f.text_records:
@ -260,7 +280,7 @@ def inspect_mobi(mobi_file, ddir):
with open(os.path.join(ddir, 'guide.record'), 'wb') as fo: with open(os.path.join(ddir, 'guide.record'), 'wb') as fo:
fo.write(str(f.guide_index).encode('utf-8')) fo.write(str(f.guide_index).encode('utf-8'))
with open(os.path.join(ddir, 'tbs', 'all.txt'), 'wb') as fo: with open(os.path.join(ddir, 'tbs.txt'), 'wb') as fo:
fo.write(('\n'.join(f.indexing_data)).encode('utf-8')) fo.write(('\n'.join(f.indexing_data)).encode('utf-8'))
for part in f.files: for part in f.files:

View File

@ -46,7 +46,10 @@ class EXTHHeader(object): # {{{
self.thumbnail_offset, = struct.unpack('>L', content) self.thumbnail_offset, = struct.unpack('>L', content)
elif idx == 501: elif idx == 501:
# cdetype # cdetype
pass if content == b'EBSP':
if not self.mi.tags:
self.mi.tags = []
self.mi.tags.append(_('Sample Book'))
elif idx == 502: elif idx == 502:
# last update time # last update time
pass pass
@ -231,6 +234,22 @@ class MetadataHeader(BookHeader):
else: else:
self.exth = None self.exth = None
@property
def kf8_type(self):
if (self.mobi_version == 8 and getattr(self, 'skelidx', NULL_INDEX) !=
NULL_INDEX):
return u'standalone'
kf8_header_index = getattr(self.exth, 'kf8_header', None)
if kf8_header_index is None:
return None
try:
if self.section_data(kf8_header_index-1) == b'BOUNDARY':
return u'joint'
except:
pass
return None
def identity(self): def identity(self):
self.stream.seek(60) self.stream.seek(60)
ident = self.stream.read(8).upper() ident = self.stream.read(8).upper()

View File

@ -0,0 +1,91 @@
#!/usr/bin/env python
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import (unicode_literals, division, absolute_import,
print_function)
__license__ = 'GPL v3'
__copyright__ = '2012, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en'
import os, glob
from calibre import CurrentDir
from calibre.ebooks.mobi import MobiError
from calibre.ebooks.mobi.reader.mobi6 import MobiReader
from calibre.ebooks.mobi.reader.headers import MetadataHeader
from calibre.utils.logging import default_log
from calibre.ebooks import DRMError
from calibre.ebooks.mobi.reader.mobi8 import Mobi8Reader
from calibre.ebooks.conversion.plumber import Plumber, create_oebbook
from calibre.customize.ui import (plugin_for_input_format,
plugin_for_output_format)
from calibre.utils.ipc.simple_worker import fork_job
class BadFormat(ValueError):
pass
def do_explode(path, dest):
with open(path, 'rb') as stream:
mr = MobiReader(stream, default_log, None, None)
with CurrentDir(dest):
mr = Mobi8Reader(mr, default_log)
opf = os.path.abspath(mr())
try:
os.remove('debug-raw.html')
except:
pass
return opf
def explode(path, dest, question=lambda x:True):
with open(path, 'rb') as stream:
raw = stream.read(3)
stream.seek(0)
if raw == b'TPZ':
raise BadFormat(_('This is not a MOBI file. It is a Topaz file.'))
try:
header = MetadataHeader(stream, default_log)
except MobiError:
raise BadFormat(_('This is not a MOBI file.'))
if header.encryption_type != 0:
raise DRMError(_('This file is locked with DRM. It cannot be tweaked.'))
kf8_type = header.kf8_type
if kf8_type is None:
raise BadFormat(_('This MOBI file does not contain a KF8 format '
'book. KF8 is the new format from Amazon. calibre can '
'only tweak MOBI files that contain KF8 books. Older '
'MOBI files without KF8 are not tweakable.'))
if kf8_type == 'joint':
if not question(_('This MOBI file contains both KF8 and '
'older Mobi6 data. Tweaking it will remove the Mobi6 data, which '
'means the file will not be usable on older Kindles. Are you '
'sure?')):
return None
return fork_job('calibre.ebooks.mobi.tweak', 'do_explode', args=(path,
dest), no_output=True)['result']
def do_rebuild(opf, dest_path):
plumber = Plumber(opf, dest_path, default_log)
plumber.setup_options()
inp = plugin_for_input_format('azw3')
outp = plugin_for_output_format('azw3')
plumber.opts.mobi_passthrough = True
oeb = create_oebbook(default_log, opf, plumber.opts)
outp.convert(oeb, dest_path, inp, plumber.opts, default_log)
def rebuild(src_dir, dest_path):
opf = glob.glob(os.path.join(src_dir, '*.opf'))
if not opf:
raise ValueError('No OPF file found in %s'%src_dir)
opf = opf[0]
fork_job('calibre.ebooks.mobi.tweak', 'do_rebuild', args=(opf, dest_path),
no_output=True)

View File

@ -25,6 +25,15 @@ from calibre.ebooks.mobi.writer2.indexer import Indexer
WRITE_UNCROSSABLE_BREAKS = False WRITE_UNCROSSABLE_BREAKS = False
NULL_INDEX = 0xffffffff NULL_INDEX = 0xffffffff
FLIS = (b'FLIS\0\0\0\x08\0\x41\0\0\0\0\0\0\xff\xff\xff\xff\0\x01\0\x03\0\0\0\x03\0\0\0\x01'+
b'\xff'*4)
def fcis(text_length):
fcis = b'FCIS\x00\x00\x00\x14\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00'
fcis += pack(b'>I', text_length)
fcis += b'\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x08\x00\x01\x00\x01\x00\x00\x00\x00'
return fcis
class MobiWriter(object): class MobiWriter(object):
def __init__(self, opts, resources, kf8, write_page_breaks_after_item=True): def __init__(self, opts, resources, kf8, write_page_breaks_after_item=True):
@ -208,14 +217,9 @@ class MobiWriter(object):
# FCIS/FLIS (Seems to serve no purpose) # FCIS/FLIS (Seems to serve no purpose)
flis_number = len(self.records) flis_number = len(self.records)
self.records.append( self.records.append(FLIS)
b'FLIS\0\0\0\x08\0\x41\0\0\0\0\0\0\xff\xff\xff\xff\0\x01\0\x03\0\0\0\x03\0\0\0\x01'+
b'\xff'*4)
fcis = b'FCIS\x00\x00\x00\x14\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00'
fcis += pack(b'>I', self.text_length)
fcis += b'\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x08\x00\x01\x00\x01\x00\x00\x00\x00'
fcis_number = len(self.records) fcis_number = len(self.records)
self.records.append(fcis) self.records.append(fcis(self.text_length))
# EOF record # EOF record
self.records.append(b'\xE9\x8E\x0D\x0A') self.records.append(b'\xE9\x8E\x0D\x0A')
@ -379,6 +383,12 @@ class MobiWriter(object):
self.resources.serialize(self.records, used_images) self.resources.serialize(self.records, used_images)
resource_record_count = len(self.records) - old resource_record_count = len(self.records) - old
# FCIS/FLIS (Seems to serve no purpose)
flis_number = len(self.records)
self.records.append(FLIS)
fcis_number = len(self.records)
self.records.append(fcis(self.text_length))
# Insert KF8 records # Insert KF8 records
self.records.append(b'BOUNDARY') self.records.append(b'BOUNDARY')
kf8_header_index = len(self.records) kf8_header_index = len(self.records)
@ -398,6 +408,8 @@ class MobiWriter(object):
header_fields['exth_flags'] = 0b100001010000 # Kinglegen uses this header_fields['exth_flags'] = 0b100001010000 # Kinglegen uses this
header_fields['fdst_record'] = NULL_INDEX header_fields['fdst_record'] = NULL_INDEX
header_fields['fdst_count'] = 1 # Why not 0? Kindlegen uses 1 header_fields['fdst_count'] = 1 # Why not 0? Kindlegen uses 1
header_fields['flis_record'] = flis_number
header_fields['fcis_record'] = fcis_number
extra_data_flags = 0b1 # Has multibyte overlap bytes extra_data_flags = 0b1 # Has multibyte overlap bytes
if self.primary_index_record_idx is not None: if self.primary_index_record_idx is not None:
extra_data_flags |= 0b10 extra_data_flags |= 0b10

View File

@ -19,9 +19,11 @@ PLACEHOLDER_GIF = b'GIF89a\x01\x00\x01\x00\x80\x00\x00\x00\x00\x00\xff\xff\xff!\
class Resources(object): class Resources(object):
def __init__(self, oeb, opts, is_periodical, add_fonts=False): def __init__(self, oeb, opts, is_periodical, add_fonts=False,
process_images=True):
self.oeb, self.log, self.opts = oeb, oeb.log, opts self.oeb, self.log, self.opts = oeb, oeb.log, opts
self.is_periodical = is_periodical self.is_periodical = is_periodical
self.process_images = process_images
self.item_map = {} self.item_map = {}
self.records = [] self.records = []
@ -34,6 +36,8 @@ class Resources(object):
self.add_resources(add_fonts) self.add_resources(add_fonts)
def process_image(self, data): def process_image(self, data):
if not self.process_images:
return data
return (mobify_image(data) if self.opts.mobi_keep_original_images else return (mobify_image(data) if self.opts.mobi_keep_original_images else
rescale_image(data)) rescale_image(data))

View File

@ -0,0 +1,25 @@
#!/usr/bin/env python
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import (unicode_literals, division, absolute_import,
print_function)
__license__ = 'GPL v3'
__copyright__ = '2012, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en'
from calibre.ebooks.oeb.base import XPath
class CSSCleanup(object):
def __init__(self, log, opts):
self.log, self.opts = log, opts
def __call__(self, item, stylizer):
if not hasattr(item.data, 'xpath'): return
# The Kindle touch displays all black pages if the height is set on
# body
for body in XPath('//h:body')(item.data):
style = stylizer.style(body)
style.drop('height')

View File

@ -264,12 +264,14 @@ class KF8Writer(object):
text = BytesIO(text) text = BytesIO(text)
nrecords = 0 nrecords = 0
records_size = 0 records_size = 0
self.uncompressed_record_lengths = []
if self.compress: if self.compress:
self.oeb.logger.info('\tCompressing markup...') self.oeb.logger.info('\tCompressing markup...')
while text.tell() < self.text_length: while text.tell() < self.text_length:
data, overlap = create_text_record(text) data, overlap = create_text_record(text)
self.uncompressed_record_lengths.append(len(data))
if self.compress: if self.compress:
data = compress_doc(data) data = compress_doc(data)
@ -372,7 +374,7 @@ class KF8Writer(object):
entry['length'] = get_next_start(entry) - entry['offset'] entry['length'] = get_next_start(entry) - entry['offset']
self.has_tbs = apply_trailing_byte_sequences(entries, self.records, self.has_tbs = apply_trailing_byte_sequences(entries, self.records,
self.last_text_record_idx+1) self.uncompressed_record_lengths)
self.ncx_records = NCXIndex(entries)() self.ncx_records = NCXIndex(entries)()
def create_guide(self): def create_guide(self):

View File

@ -18,6 +18,14 @@ from calibre.ebooks.mobi.writer8.exth import build_exth
from calibre.utils.filenames import ascii_filename from calibre.utils.filenames import ascii_filename
NULL_INDEX = 0xffffffff NULL_INDEX = 0xffffffff
FLIS = b'FLIS\0\0\0\x08\0\x41\0\0\0\0\0\0\xff\xff\xff\xff\0\x01\0\x03\0\0\0\x03\0\0\0\x01'+ b'\xff'*4
def fcis(text_length):
fcis = b'FCIS\x00\x00\x00\x14\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\x00'
fcis += pack(b'>L', text_length)
fcis += b'\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00'
fcis += b'\x28\x00\x00\x00\x08\x00\x01\x00\x01\x00\x00\x00\x00'
return fcis
class MOBIHeader(Header): # {{{ class MOBIHeader(Header): # {{{
''' '''
@ -115,7 +123,10 @@ class MOBIHeader(Header): # {{{
exth_flags = DYN exth_flags = DYN
# 132: Unknown # 132: Unknown
unknown = zeroes(36) unknown = zeroes(32)
# 164: Unknown
unknown_index = NULL
# 168: DRM # 168: DRM
drm_offset = NULL drm_offset = NULL
@ -130,13 +141,13 @@ class MOBIHeader(Header): # {{{
fdst_record = DYN fdst_record = DYN
fdst_count = DYN fdst_count = DYN
# 200: FCI # 200: FCIS
fcis_record = NULL fcis_record = DYN
fcis_count fcis_count = 1
# 208: FLIS # 208: FLIS
flis_record = NULL flis_record = DYN
flis_count flis_count = 1
# 216: Unknown # 216: Unknown
unknown3 = zeroes(8) unknown3 = zeroes(8)
@ -193,7 +204,7 @@ HEADER_FIELDS = {'compression', 'text_length', 'last_text_record', 'book_type',
'first_resource_record', 'exth_flags', 'fdst_record', 'first_resource_record', 'exth_flags', 'fdst_record',
'fdst_count', 'ncx_index', 'chunk_index', 'skel_index', 'fdst_count', 'ncx_index', 'chunk_index', 'skel_index',
'guide_index', 'exth', 'full_title', 'extra_data_flags', 'guide_index', 'exth', 'full_title', 'extra_data_flags',
'uid'} 'flis_record', 'fcis_record', 'uid'}
class KF8Book(object): class KF8Book(object):
@ -241,6 +252,12 @@ class KF8Book(object):
self.fdst_record = len(self.records) self.fdst_record = len(self.records)
self.records.extend(writer.fdst_records) self.records.extend(writer.fdst_records)
# FLIS/FCIS
self.flis_record = len(self.records)
self.records.append(FLIS)
self.fcis_record = len(self.records)
self.records.append(fcis(self.text_length))
# EOF # EOF
self.records.append(b'\xe9\x8e\r\n') # EOF record self.records.append(b'\xe9\x8e\r\n') # EOF record

View File

@ -13,7 +13,7 @@ from functools import partial
from lxml import etree from lxml import etree
from calibre.ebooks.oeb.base import XHTML_NS from calibre.ebooks.oeb.base import XHTML_NS, extract
from calibre.constants import ispy3 from calibre.constants import ispy3
from calibre.ebooks.mobi.utils import to_base from calibre.ebooks.mobi.utils import to_base
@ -224,14 +224,24 @@ class Chunker(object):
nroot.text = root.text nroot.text = root.text
nroot.tail = '\n' nroot.tail = '\n'
for tag in root.iterdescendants(etree.Element): # Remove Comments and ProcessingInstructions as kindlegen seems to
# We are ignoring all non tag entities in the tree # remove them as well
# like comments and processing instructions, as they make the for tag in root.iterdescendants():
# chunking code even harder, for minimal gain. if tag.tag in {etree.Comment, etree.ProcessingInstruction}:
elem = nroot.makeelement(tag.tag.rpartition('}')[-1], extract(tag)
attrib={k.rpartition('}')[-1]:v for k, v in
tag.attrib.iteritems()}) for tag in root.iterdescendants():
elem.text, elem.tail = tag.text, tag.tail if tag.tag == etree.Entity:
elem = etree.Entity(tag.name)
else:
tn = tag.tag
if tn is not None:
tn = tn.rpartition('}')[-1]
elem = nroot.makeelement(tn,
attrib={k.rpartition('}')[-1]:v for k, v in
tag.attrib.iteritems()})
elem.text = tag.text
elem.tail = tag.tail
parent = node_from_path(nroot, path_to_node(tag.getparent())) parent = node_from_path(nroot, path_to_node(tag.getparent()))
parent.append(elem) parent.append(elem)
@ -251,6 +261,11 @@ class Chunker(object):
# Now loop over children # Now loop over children
for child in list(tag): for child in list(tag):
raw = tostring(child, with_tail=False) raw = tostring(child, with_tail=False)
if child.tag == etree.Entity:
chunks.append(raw)
if child.tail:
chunks.extend(self.chunk_up_text(child.tail, aid))
continue
raw = close_self_closing_tags(raw) raw = close_self_closing_tags(raw)
if len(raw) > CHUNK_SIZE and child.get('aid', None): if len(raw) > CHUNK_SIZE and child.get('aid', None):
self.step_into_tag(child, chunks) self.step_into_tag(child, chunks)

View File

@ -7,103 +7,181 @@ __license__ = 'GPL v3'
__copyright__ = '2012, Kovid Goyal <kovid@kovidgoyal.net>' __copyright__ = '2012, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
from collections import namedtuple DOC = '''
from functools import partial Trailing Byte Sequences contain information about which index entries touch a
particular text record. Every text records has a set of trailing byte
sequences. In order to figure out the sequence for a given text record, you
have to first calculate all the indices that start, end, span and anre
contained within that text record. Then arrange the indices into 'strands',
where each strand is a hierarchical progression from the top level index down.
For the exact algorithm, see separate_strands(). The strands are then encoded
into 'sequences', see encode_strands_as_sequences() and finally the sequences
are turned into bytes.
'''
from collections import namedtuple, OrderedDict
from operator import attrgetter
from calibre.ebooks.mobi.utils import (RECORD_SIZE, encode_trailing_data, from calibre.ebooks.mobi.utils import (encode_trailing_data,
encode_tbs) encode_tbs)
Entry = namedtuple('IndexEntry', 'index start length depth parent ' Entry = namedtuple('IndexEntry', 'index start length depth parent '
'first_child last_child title') 'first_child last_child title action start_offset length_offset '
Data = namedtuple('Data', 'starts ends completes spans') 'text_record_length')
def collect_indexing_data(entries, number_of_text_records): def fill_entry(entry, start_offset, text_record_length):
length_offset = start_offset + entry.length
if start_offset < 0:
action = 'spans' if length_offset > text_record_length else 'ends'
else:
action = 'starts' if length_offset > text_record_length else 'completes'
return Entry(*(entry[:-4] + (action, start_offset, length_offset,
text_record_length)))
def populate_strand(parent, entries):
ans = [parent]
children = [c for c in entries if c.parent == parent.index]
if children:
# Add first child to this strand, and recurse downwards
child = children[0]
entries.remove(child)
ans += populate_strand(child, entries)
else:
# Add any entries at the same depth that form a contiguous set of
# indices and belong to the same parent (these can all be
# represented as a single sequence with the 0b100 flag)
current_index = parent.index
siblings = []
for entry in list(entries):
if (entry.depth == parent.depth and entry.parent == parent.parent
and entry.index == current_index+1):
current_index += 1
entries.remove(entry)
children = [c for c in entries if c.parent == entry.index]
if children:
siblings += populate_strand(entry, entries)
break # Cannot add more siblings, as we have added children
else:
siblings.append(entry)
ans += siblings
return ans
def separate_strands(entries):
ans = []
while entries:
top, entries = entries[0], entries[1:]
strand = populate_strand(top, entries)
layers = OrderedDict()
for entry in strand:
if entry.depth not in layers:
layers[entry.depth] = []
layers[entry.depth].append(entry)
ans.append(layers)
return ans
def collect_indexing_data(entries, text_record_lengths):
''' For every text record calculate which index entries start, end, span or ''' For every text record calculate which index entries start, end, span or
are contained within that record.''' are contained within that record. Arrange these entries in 'strands'. '''
data = [] data = []
for i in xrange(number_of_text_records): entries = sorted(entries, key=attrgetter('start'))
record_start, next_record_start = i*RECORD_SIZE, (i+1)*RECORD_SIZE record_start = 0
datum = Data([], [], [], []) for rec_length in text_record_lengths:
data.append(datum) next_record_start = record_start + rec_length
local_entries = []
for entry in entries: for entry in entries:
end = entry.start + entry.length - 1 if entry.start >= next_record_start:
if (entry.start >= next_record_start or end < record_start): # No more entries overlap this record
# This entry does not have any overlap with this record break
if entry.start + entry.length <= record_start:
# This entry does not touch this record
continue continue
if (entry.start < record_start and end >= next_record_start): local_entries.append(fill_entry(entry, entry.start - record_start,
# This entry spans this record rec_length))
datum.spans.append(entry)
continue
if (entry.start >= record_start and end < next_record_start):
# This entry is contained in this record
datum.completes.append(entry)
if (entry.start >= record_start and end >= next_record_start):
# This entry starts in this record
datum.starts.append(entry)
continue
if (entry.start < record_start and end < next_record_start):
# This entry ends in this record
datum.ends.append(entry)
for x in datum: strands = separate_strands(local_entries)
# Should be unnecessary as entries are already in this order, but data.append(strands)
# best to be safe. record_start += rec_length
x.sort(key=lambda x:x.depth)
return data return data
def generate_tbs_for_flat_index(indexing_data): def encode_strands_as_sequences(strands, tbs_type=8):
''' Encode the list of strands for a single text record into a list of
sequences, ready to be converted into TBS bytes. '''
ans = [] ans = []
record_type = 8 # 8 for KF8 0 for MOBI 6 last_index = None
enc = partial(encode_tbs, flag_size=3) max_length_offset = 0
for datum in indexing_data: first_entry = None
tbs = b'' for strand in strands:
extra = {0b010 : record_type} for entries in strand.itervalues():
if not (datum.starts or datum.ends or datum.completes or datum.spans): for entry in entries:
# No index entry touches this record if first_entry is None:
pass first_entry = entry
elif datum.spans: if entry.length_offset > max_length_offset:
extra[0b001] = 0 max_length_offset = entry.length_offset
tbs = enc(datum.spans[0].index, extra)
else: for strand in strands:
starts, ends, completes = datum[:3] strand_seqs = []
if (not completes and len(starts) + len(ends) == 1): for depth, entries in strand.iteritems():
# Either has the first or the last index, and no other indices. extra = {}
node = (starts+ends)[0] if entries[-1].action == 'spans':
tbs = enc(node.index, extra) extra[0b1] = 0
else: elif False and (
# This record contains the end of an index and entries[-1].length_offset < entries[-1].text_record_length and
# some complete index entries. Or it contains some complete entries[-1].action == 'completes' and
# entries and a start. Or it contains an end, a start and entries[-1].length_offset != max_length_offset):
# optionally some completes. In every case, we encode the first # I can't figure out exactly when kindlegen decides to insert
# entry to touch this record and the number of entries # this, so disable it for now.
# that touch this record. extra[0b1] = entries[-1].length_offset
nodes = starts + completes + ends
nodes.sort(key=lambda x:x.index) if entries[0] is first_entry:
extra[0b100] = len(nodes) extra[0b10] = tbs_type
tbs = enc(nodes[0].index, extra)
ans.append(tbs) if len(entries) > 1:
extra[0b100] = len(entries)
index = entries[0].index - (entries[0].parent or 0)
if ans and not strand_seqs:
# We are in the second or later strands, so we need to use a
# special flag and index value. The index value if the entry
# index - the index of the last entry in the previous strand.
extra[0b1000] = True
index = last_index - entries[0].index
last_index = entries[-1].index
strand_seqs.append((index, extra))
# Handle the case of consecutive action == 'spans' entries. In this
# case, the 0b1 = 0 flag should be present only in the last consecutive
# spans entry.
for i, seq in enumerate(strand_seqs):
if i + 1 < len(strand_seqs):
if 0b1 in seq[1] and 0b1 in strand_seqs[i+1][1]:
del seq[1][0b1]
ans.extend(strand_seqs)
return ans return ans
def apply_trailing_byte_sequences(index_table, records, number_of_text_records): def sequences_to_bytes(sequences):
ans = []
flag_size = 3
for val, extra in sequences:
ans.append(encode_tbs(val, extra, flag_size))
flag_size = 4 # only the first seuqence has flag size 3 as all
# subsequent sequences could need the 0b1000 flag
return b''.join(ans)
def apply_trailing_byte_sequences(index_table, records, text_record_lengths):
entries = tuple(Entry(r['index'], r['offset'], r['length'], r['depth'], entries = tuple(Entry(r['index'], r['offset'], r['length'], r['depth'],
r.get('parent', None), r.get('first_child', None), r.get('last_child', r.get('parent', None), r.get('first_child', None), r.get('last_child',
None), r['label']) for r in index_table) None), r['label'], None, None, None, None) for r in index_table)
indexing_data = collect_indexing_data(entries, number_of_text_records) indexing_data = collect_indexing_data(entries, text_record_lengths)
max_depth = max(e['depth'] for e in index_table) for i, strands in enumerate(indexing_data):
if max_depth > 0: sequences = encode_strands_as_sequences(strands)
# TODO: Implement for hierarchical ToCs tbs_bytes = sequences_to_bytes(sequences)
tbs = []
else:
tbs = generate_tbs_for_flat_index(indexing_data)
if not tbs:
return False
for i, tbs_bytes in enumerate(tbs):
records[i+1] += encode_trailing_data(tbs_bytes) records[i+1] += encode_trailing_data(tbs_bytes)
return True return True

View File

@ -1142,6 +1142,19 @@ class Manifest(object):
element(elem, OPF('item'), attrib=attrib) element(elem, OPF('item'), attrib=attrib)
return elem return elem
@dynamic_property
def main_stylesheet(self):
def fget(self):
ans = getattr(self, '_main_stylesheet', None)
if ans is None:
for item in self:
if item.media_type.lower() in OEB_STYLES:
ans = item
break
return ans
def fset(self, item):
self._main_stylesheet = item
return property(fget=fget, fset=fset)
class Spine(object): class Spine(object):
"""Collection of manifest items composing an OEB data model book's main """Collection of manifest items composing an OEB data model book's main

View File

@ -256,7 +256,7 @@ class OEBReader(object):
media_type = elem.get('media-type', None) media_type = elem.get('media-type', None)
if media_type is None: if media_type is None:
media_type = elem.get('mediatype', None) media_type = elem.get('mediatype', None)
if media_type is None or media_type == 'text/xml': if not media_type or media_type == 'text/xml':
guessed = guess_type(href)[0] guessed = guess_type(href)[0]
media_type = guessed or media_type or BINARY_MIME media_type = guessed or media_type or BINARY_MIME
if hasattr(media_type, 'lower'): if hasattr(media_type, 'lower'):

View File

@ -494,6 +494,9 @@ class Style(object):
def set(self, prop, val): def set(self, prop, val):
self._style[prop] = val self._style[prop] = val
def drop(self, prop):
self._style.pop(prop, None)
def _update_cssdict(self, cssdict): def _update_cssdict(self, cssdict):
self._style.update(cssdict) self._style.update(cssdict)

View File

@ -167,5 +167,9 @@ class CoverManager(object):
self.oeb.guide.refs['cover'].href = item.href self.oeb.guide.refs['cover'].href = item.href
if 'titlepage' in self.oeb.guide.refs: if 'titlepage' in self.oeb.guide.refs:
self.oeb.guide.refs['titlepage'].href = item.href self.oeb.guide.refs['titlepage'].href = item.href
titem = getattr(self.oeb.toc, 'item_that_refers_to_cover', None)
if titem is not None:
titem.href = item.href

View File

@ -102,12 +102,13 @@ def FontMapper(sbase=None, dbase=None, dkey=None):
class CSSFlattener(object): class CSSFlattener(object):
def __init__(self, fbase=None, fkey=None, lineh=None, unfloat=False, def __init__(self, fbase=None, fkey=None, lineh=None, unfloat=False,
untable=False, page_break_on_body=False): untable=False, page_break_on_body=False, specializer=None):
self.fbase = fbase self.fbase = fbase
self.fkey = fkey self.fkey = fkey
self.lineh = lineh self.lineh = lineh
self.unfloat = unfloat self.unfloat = unfloat
self.untable = untable self.untable = untable
self.specializer = specializer
self.page_break_on_body = page_break_on_body self.page_break_on_body = page_break_on_body
@classmethod @classmethod
@ -377,7 +378,7 @@ class CSSFlattener(object):
for child in node: for child in node:
self.flatten_node(child, stylizer, names, styles, psize, item_id, left) self.flatten_node(child, stylizer, names, styles, psize, item_id, left)
def flatten_head(self, item, stylizer, href): def flatten_head(self, item, href, global_href):
html = item.data html = item.data
head = html.find(XHTML('head')) head = html.find(XHTML('head'))
for node in head: for node in head:
@ -389,40 +390,64 @@ class CSSFlattener(object):
and node.get('type', CSS_MIME) in OEB_STYLES: and node.get('type', CSS_MIME) in OEB_STYLES:
head.remove(node) head.remove(node)
href = item.relhref(href) href = item.relhref(href)
etree.SubElement(head, XHTML('link'), l = etree.SubElement(head, XHTML('link'),
rel='stylesheet', type=CSS_MIME, href=href) rel='stylesheet', type=CSS_MIME, href=href)
stylizer.page_rule['margin-top'] = '%fpt'%\ l.tail='\n'
float(self.context.margin_top) href = item.relhref(global_href)
stylizer.page_rule['margin-bottom'] = '%fpt'%\ l = etree.SubElement(head, XHTML('link'),
float(self.context.margin_bottom) rel='stylesheet', type=CSS_MIME, href=href)
l.tail = '\n'
items = stylizer.page_rule.items()
items.sort()
css = '; '.join("%s: %s" % (key, val) for key, val in items)
style = etree.SubElement(head, XHTML('style'), type=CSS_MIME)
style.text = "\n\t\t@page { %s; }" % css
rules = [r.cssText for r in stylizer.font_face_rules]
raw = '\n\n'.join(rules)
# Make URLs referring to fonts relative to this item
sheet = cssutils.parseString(raw, validate=False)
cssutils.replaceUrls(sheet, item.relhref, ignoreImportRules=True)
style.text += '\n' + sheet.cssText
def replace_css(self, css): def replace_css(self, css):
manifest = self.oeb.manifest manifest = self.oeb.manifest
id, href = manifest.generate('css', 'stylesheet.css')
for item in manifest.values(): for item in manifest.values():
if item.media_type in OEB_STYLES: if item.media_type in OEB_STYLES:
manifest.remove(item) manifest.remove(item)
item = manifest.add(id, href, CSS_MIME, data=css) id, href = manifest.generate('css', 'stylesheet.css')
item = manifest.add(id, href, CSS_MIME, data=cssutils.parseString(css,
validate=False))
self.oeb.manifest.main_stylesheet = item
return href return href
def collect_global_css(self):
global_css = defaultdict(list)
for item in self.oeb.spine:
stylizer = self.stylizers[item]
stylizer.page_rule['margin-top'] = '%gpt'%\
float(self.context.margin_top)
stylizer.page_rule['margin-bottom'] = '%gpt'%\
float(self.context.margin_bottom)
items = stylizer.page_rule.items()
items.sort()
css = ';\n'.join("%s: %s" % (key, val) for key, val in items)
css = '@page {\n%s\n}\n'%css
rules = [r.cssText for r in stylizer.font_face_rules]
raw = '\n\n'.join(rules)
css += '\n\n' + raw
global_css[css].append(item)
gc_map = {}
manifest = self.oeb.manifest
for css in global_css:
id_, href = manifest.generate('page_css', 'page_styles.css')
manifest.add(id_, href, CSS_MIME, data=cssutils.parseString(css,
validate=False))
gc_map[css] = href
ans = {}
for css, items in global_css.iteritems():
for item in items:
ans[item] = gc_map[css]
return ans
def flatten_spine(self): def flatten_spine(self):
names = defaultdict(int) names = defaultdict(int)
styles = {} styles = {}
for item in self.oeb.spine: for item in self.oeb.spine:
html = item.data html = item.data
stylizer = self.stylizers[item] stylizer = self.stylizers[item]
if self.specializer is not None:
self.specializer(item, stylizer)
body = html.find(XHTML('body')) body = html.find(XHTML('body'))
fsize = self.context.dest.fbase fsize = self.context.dest.fbase
self.flatten_node(body, stylizer, names, styles, fsize, item.id) self.flatten_node(body, stylizer, names, styles, fsize, item.id)
@ -430,7 +455,8 @@ class CSSFlattener(object):
items.sort() items.sort()
css = ''.join(".%s {\n%s;\n}\n\n" % (key, val) for key, val in items) css = ''.join(".%s {\n%s;\n}\n\n" % (key, val) for key, val in items)
href = self.replace_css(css) href = self.replace_css(css)
global_css = self.collect_global_css()
for item in self.oeb.spine: for item in self.oeb.spine:
stylizer = self.stylizers[item] stylizer = self.stylizers[item]
self.flatten_head(item, stylizer, href) self.flatten_head(item, href, global_css[item])

View File

@ -9,7 +9,7 @@ __docformat__ = 'restructuredtext en'
from collections import Counter from collections import Counter
from calibre.ebooks.oeb.base import OEB_STYLES, barename, XPath from calibre.ebooks.oeb.base import barename, XPath
class RemoveAdobeMargins(object): class RemoveAdobeMargins(object):
''' '''
@ -51,10 +51,7 @@ class RemoveFakeMargins(object):
self.stats = {} self.stats = {}
self.selector_map = {} self.selector_map = {}
for item in self.oeb.manifest: stylesheet = self.oeb.manifest.main_stylesheet
if item.media_type.lower() in OEB_STYLES:
stylesheet = item
break
if stylesheet is None: if stylesheet is None:
return return

View File

@ -50,6 +50,7 @@ class Split(object):
def __call__(self, oeb, opts): def __call__(self, oeb, opts):
self.oeb = oeb self.oeb = oeb
self.log = oeb.log self.log = oeb.log
self.log('Splitting markup on page breaks and flow limits, if any...')
self.opts = opts self.opts = opts
self.map = {} self.map = {}
for item in list(self.oeb.manifest.items): for item in list(self.oeb.manifest.items):

148
src/calibre/ebooks/tweak.py Normal file
View File

@ -0,0 +1,148 @@
#!/usr/bin/env python
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import (unicode_literals, division, absolute_import,
print_function)
__license__ = 'GPL v3'
__copyright__ = '2012, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en'
import sys, os, shlex, subprocess, shutil
from calibre import prints, as_unicode, walk
from calibre.constants import iswindows, __appname__
from calibre.ptempfile import TemporaryDirectory, TemporaryFile
from calibre.libunzip import extract as zipextract
from calibre.utils.zipfile import ZipFile, ZIP_DEFLATED, ZIP_STORED
from calibre.utils.ipc.simple_worker import WorkerError
class Error(ValueError):
pass
def ask_cli_question(msg):
prints(msg, end=' [y/N]: ')
sys.stdout.flush()
if iswindows:
import msvcrt
ans = msvcrt.getch()
else:
import tty, termios
old_settings = termios.tcgetattr(sys.stdin.fileno())
try:
tty.setraw(sys.stdin.fileno())
try:
ans = sys.stdin.read(1)
except KeyboardInterrupt:
ans = b''
finally:
termios.tcsetattr(sys.stdin.fileno(), termios.TCSADRAIN, old_settings)
print()
return ans == b'y'
def mobi_exploder(path, tdir, question=lambda x:True):
from calibre.ebooks.mobi.tweak import explode, BadFormat
try:
return explode(path, tdir, question=question)
except BadFormat as e:
raise Error(as_unicode(e))
def zip_exploder(path, tdir, question=lambda x:True):
zipextract(path, tdir)
for f in walk(tdir):
if f.lower().endswith('.opf'):
return f
raise Error('Invalid book: Could not find .opf')
def zip_rebuilder(tdir, path):
with ZipFile(path, 'w', compression=ZIP_DEFLATED) as zf:
# Write mimetype
mt = os.path.join(tdir, 'mimetype')
if os.path.exists(mt):
zf.write(mt, 'mimetype', compress_type=ZIP_STORED)
# Write everything else
exclude_files = {'.DS_Store', 'mimetype', 'iTunesMetadata.plist'}
for root, dirs, files in os.walk(tdir):
for fn in files:
if fn in exclude_files:
continue
absfn = os.path.join(root, fn)
zfn = os.path.relpath(absfn, tdir).replace(os.sep, '/')
zf.write(absfn, zfn)
def get_tools(fmt):
fmt = fmt.lower()
if fmt in {'mobi', 'azw', 'azw3'}:
from calibre.ebooks.mobi.tweak import rebuild
ans = mobi_exploder, rebuild
elif fmt in {'epub', 'htmlz'}:
ans = zip_exploder, zip_rebuilder
else:
ans = None, None
return ans
def tweak(ebook_file):
''' Command line interface to the Tweak Book tool '''
fmt = ebook_file.rpartition('.')[-1].lower()
exploder, rebuilder = get_tools(fmt)
if exploder is None:
prints('Cannot tweak %s files. Supported formats are: EPUB, HTMLZ, AZW3, MOBI'
, file=sys.stderr)
raise SystemExit(1)
with TemporaryDirectory('_tweak_'+
os.path.basename(ebook_file).rpartition('.')[0]) as tdir:
try:
opf = exploder(ebook_file, tdir, question=ask_cli_question)
except WorkerError as e:
prints('Failed to unpack', ebook_file)
prints(e.orig_tb)
raise SystemExit(1)
except Error as e:
prints(as_unicode(e), file=sys.stderr)
raise SystemExit(1)
if opf is None:
# The question was answered with No
return
ed = os.environ.get('EDITOR', 'dummy')
cmd = shlex.split(ed)
isvim = bool([x for x in cmd[0].split('/') if x.endswith('vim')])
proceed = False
prints('Book extracted to', tdir)
if not isvim:
prints('Make your tweaks and once you are done,', __appname__,
'will rebuild', ebook_file, 'from', tdir)
print()
proceed = ask_cli_question('Rebuild ' + ebook_file + '?')
else:
base = os.path.basename(ebook_file)
with TemporaryFile(base+'.zip') as zipf:
with ZipFile(zipf, 'w') as zf:
zf.add_dir(tdir)
try:
subprocess.check_call(cmd + [zipf])
except:
prints(ed, 'failed, aborting...')
raise SystemExit(1)
with ZipFile(zipf, 'r') as zf:
shutil.rmtree(tdir)
os.mkdir(tdir)
zf.extractall(path=tdir)
proceed = True
if proceed:
prints('Rebuilding', ebook_file, 'please wait ...')
try:
rebuilder(tdir, ebook_file)
except WorkerError as e:
prints('Failed to rebuild', ebook_file)
prints(e.orig_tb)
raise SystemExit(1)
prints(ebook_file, 'successfully tweaked')

View File

@ -5,70 +5,307 @@ __license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>' __copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import os import os, weakref, shutil
from calibre.gui2 import error_dialog from PyQt4.Qt import (QDialog, QVBoxLayout, QHBoxLayout, QRadioButton, QFrame,
QPushButton, QLabel, QGroupBox, QGridLayout, QIcon, QSize, QTimer)
from calibre import as_unicode
from calibre.constants import isosx
from calibre.gui2 import error_dialog, question_dialog, open_local_file
from calibre.gui2.actions import InterfaceAction from calibre.gui2.actions import InterfaceAction
from calibre.gui2.dialogs.tweak_epub import TweakEpub from calibre.ptempfile import (PersistentTemporaryDirectory,
from calibre.utils.config import tweaks PersistentTemporaryFile)
from calibre.utils.config import prefs
class TweakBook(QDialog):
def __init__(self, parent, book_id, fmts, db):
QDialog.__init__(self, parent)
self.book_id, self.fmts, self.db_ref = book_id, fmts, weakref.ref(db)
self._exploded = None
self._cleanup_dirs = []
self._cleanup_files = []
self.setup_ui()
self.setWindowTitle(_('Tweak Book') + ' - ' + db.title(book_id,
index_is_id=True))
button = self.fmt_choice_buttons[0]
of = prefs['output_format'].upper()
for x in self.fmt_choice_buttons:
if unicode(x.text()) == of:
button = x
break
button.setChecked(True)
self.init_state()
for button in self.fmt_choice_buttons:
button.toggled.connect(self.init_state)
def init_state(self, *args):
self._exploded = None
self.preview_button.setEnabled(False)
self.rebuild_button.setEnabled(False)
self.explode_button.setEnabled(True)
def setup_ui(self): # {{{
self._g = g = QHBoxLayout(self)
self.setLayout(g)
self._l = l = QVBoxLayout()
g.addLayout(l)
fmts = sorted(x.upper() for x in self.fmts)
self.fmt_choice_box = QGroupBox(_('Choose the format to tweak:'), self)
self._fl = fl = QHBoxLayout()
self.fmt_choice_box.setLayout(self._fl)
self.fmt_choice_buttons = [QRadioButton(x, self) for x in fmts]
for x in self.fmt_choice_buttons:
fl.addWidget(x, stretch=10 if x is self.fmt_choice_buttons[-1] else
0)
l.addWidget(self.fmt_choice_box)
self.fmt_choice_box.setVisible(len(fmts) > 1)
self.help_label = QLabel(_('''\
<h2>About Tweak Book</h2>
<p>Tweak Book allows you to fine tune the appearance of an ebook by
making small changes to its internals. In order to use Tweak Book,
you need to know a little bit about HTML and CSS, technologies that
are used in ebooks. Follow the steps:</p>
<br>
<ol>
<li>Click "Explode Book": This will "explode" the book into its
individual internal components.<br></li>
<li>Right click on any individual file and select "Open with..." to
edit it in your favorite text editor.<br></li>
<li>When you are done Tweaking: <b>close the file browser window
and the editor windows you used to make your tweaks</b>. Then click
the "Rebuild Book" button, to update the book in your calibre
library.</li>
</ol>'''))
self.help_label.setWordWrap(True)
self._fr = QFrame()
self._fr.setFrameShape(QFrame.VLine)
g.addWidget(self._fr)
g.addWidget(self.help_label)
self._b = b = QGridLayout()
left, top, right, bottom = b.getContentsMargins()
top += top
b.setContentsMargins(left, top, right, bottom)
l.addLayout(b, stretch=10)
self.explode_button = QPushButton(QIcon(I('wizard.png')), _('&Explode Book'))
self.preview_button = QPushButton(QIcon(I('view.png')), _('&Preview Book'))
self.cancel_button = QPushButton(QIcon(I('window-close.png')), _('&Cancel'))
self.rebuild_button = QPushButton(QIcon(I('exec.png')), _('&Rebuild Book'))
self.explode_button.setToolTip(
_('Explode the book to edit its components'))
self.preview_button.setToolTip(
_('Preview the result of your tweaks'))
self.cancel_button.setToolTip(
_('Abort without saving any changes'))
self.rebuild_button.setToolTip(
_('Save your changes and update the book in the calibre library'))
a = b.addWidget
a(self.explode_button, 0, 0, 1, 1)
a(self.preview_button, 0, 1, 1, 1)
a(self.cancel_button, 1, 0, 1, 1)
a(self.rebuild_button, 1, 1, 1, 1)
for x in ('explode', 'preview', 'cancel', 'rebuild'):
getattr(self, x+'_button').clicked.connect(getattr(self, x))
self.msg = QLabel('dummy', self)
self.msg.setVisible(False)
self.msg.setStyleSheet('''
QLabel {
text-align: center;
background-color: white;
color: black;
border-width: 1px;
border-style: solid;
border-radius: 20px;
font-size: x-large;
font-weight: bold;
}
''')
self.resize(self.sizeHint() + QSize(40, 10))
# }}}
def show_msg(self, msg):
self.msg.setText(msg)
self.msg.resize(self.size() - QSize(50, 25))
self.msg.move((self.width() - self.msg.width())//2,
(self.height() - self.msg.height())//2)
self.msg.setVisible(True)
def hide_msg(self):
self.msg.setVisible(False)
def explode(self):
self.show_msg(_('Exploding, please wait...'))
QTimer.singleShot(5, self.do_explode)
def ask_question(self, msg):
return question_dialog(self, _('Are you sure?'), msg)
def do_explode(self):
from calibre.ebooks.tweak import get_tools, Error, WorkerError
tdir = PersistentTemporaryDirectory('_tweak_explode')
self._cleanup_dirs.append(tdir)
det_msg = None
try:
src = self.db.format(self.book_id, self.current_format,
index_is_id=True, as_path=True)
self._cleanup_files.append(src)
exploder = get_tools(self.current_format)[0]
opf = exploder(src, tdir, question=self.ask_question)
except WorkerError as e:
det_msg = e.orig_tb
except Error as e:
return error_dialog(self, _('Failed to unpack'),
(_('Could not explode the %s file.')%self.current_format) + ' '
+ as_unicode(e), show=True)
except:
import traceback
det_msg = traceback.format_exc()
finally:
self.hide_msg()
if det_msg is not None:
return error_dialog(self, _('Failed to unpack'),
_('Could not explode the %s file. Click "Show Details" for '
'more information.')%self.current_format, det_msg=det_msg,
show=True)
if opf is None:
# The question was answered with No
return
self._exploded = tdir
self.explode_button.setEnabled(False)
self.preview_button.setEnabled(True)
self.rebuild_button.setEnabled(True)
open_local_file(tdir)
def rebuild_it(self):
from calibre.ebooks.tweak import get_tools, WorkerError
src_dir = self._exploded
det_msg = None
of = PersistentTemporaryFile('_tweak_rebuild.'+self.current_format.lower())
of.close()
of = of.name
self._cleanup_files.append(of)
try:
rebuilder = get_tools(self.current_format)[1]
rebuilder(src_dir, of)
except WorkerError as e:
det_msg = e.orig_tb
except:
import traceback
det_msg = traceback.format_exc()
finally:
self.hide_msg()
if det_msg is not None:
error_dialog(self, _('Failed to rebuild file'),
_('Failed to rebuild %s. For more information, click '
'"Show details".')%self.current_format,
det_msg=det_msg, show=True)
return None
return of
def preview(self):
self.show_msg(_('Rebuilding, please wait...'))
QTimer.singleShot(5, self.do_preview)
def do_preview(self):
rebuilt = self.rebuild_it()
if rebuilt is not None:
self.parent().iactions['View']._view_file(rebuilt)
def rebuild(self):
self.show_msg(_('Rebuilding, please wait...'))
QTimer.singleShot(5, self.do_rebuild)
def do_rebuild(self):
rebuilt = self.rebuild_it()
if rebuilt is not None:
fmt = os.path.splitext(rebuilt)[1][1:].upper()
with open(rebuilt, 'rb') as f:
self.db.add_format(self.book_id, fmt, f, index_is_id=True)
self.accept()
def cancel(self):
self.reject()
def cleanup(self):
if isosx and self._exploded:
try:
import appscript
self.finder = appscript.app('Finder')
self.finder.Finder_windows[os.path.basename(self._exploded)].close()
except:
pass
for f in self._cleanup_files:
try:
os.remove(f)
except:
pass
for d in self._cleanup_dirs:
try:
shutil.rmtree(d)
except:
pass
@property
def db(self):
return self.db_ref()
@property
def current_format(self):
for b in self.fmt_choice_buttons:
if b.isChecked():
return unicode(b.text())
class TweakEpubAction(InterfaceAction): class TweakEpubAction(InterfaceAction):
name = 'Tweak ePub' name = 'Tweak ePub'
action_spec = (_('Tweak Book'), 'trim.png', action_spec = (_('Tweak Book'), 'trim.png',
_('Make small changes to ePub or HTMLZ format books'), _('Make small changes to ePub, HTMLZ or AZW3 format books'),
_('T')) _('T'))
dont_add_to = frozenset(['context-menu-device']) dont_add_to = frozenset(['context-menu-device'])
action_type = 'current' action_type = 'current'
def genesis(self): def genesis(self):
self.qaction.triggered.connect(self.edit_epub_in_situ) self.qaction.triggered.connect(self.tweak_book)
def edit_epub_in_situ(self, *args): def tweak_book(self):
row = self.gui.library_view.currentIndex() row = self.gui.library_view.currentIndex()
if not row.isValid(): if not row.isValid():
return error_dialog(self.gui, _('Cannot tweak Book'), return error_dialog(self.gui, _('Cannot tweak Book'),
_('No book selected'), show=True) _('No book selected'), show=True)
book_id = self.gui.library_view.model().id(row) book_id = self.gui.library_view.model().id(row)
db = self.gui.library_view.model().db
# Confirm 'EPUB' in formats fmts = db.formats(book_id, index_is_id=True) or ''
try: fmts = [x.lower().strip() for x in fmts.split(',')]
path_to_epub = self.gui.library_view.model().db.format( tweakable_fmts = set(fmts).intersection({'epub', 'htmlz', 'azw3',
book_id, 'EPUB', index_is_id=True, as_path=True) 'mobi', 'azw'})
except: if not tweakable_fmts:
path_to_epub = None return error_dialog(self.gui, _('Cannot Tweak Book'),
_('The book must be in ePub, HTMLZ or AZW3 formats to tweak.'
# Confirm 'HTMLZ' in formats '\n\nFirst convert the book to one of these formats.'),
try:
path_to_htmlz = self.gui.library_view.model().db.format(
book_id, 'HTMLZ', index_is_id=True, as_path=True)
except:
path_to_htmlz = None
if not path_to_epub and not path_to_htmlz:
return error_dialog(self.gui, _('Cannot tweak Book'),
_('The book must be in ePub or HTMLZ format to tweak.'
'\n\nFirst convert the book to ePub or HTMLZ.'),
show=True) show=True)
dlg = TweakBook(self.gui, book_id, tweakable_fmts, db)
# Launch modal dialog waiting for user to tweak or cancel dlg.exec_()
if tweaks['tweak_book_prefer'] == 'htmlz':
path_to_book = path_to_htmlz or path_to_epub
else:
path_to_book = path_to_epub or path_to_htmlz
dlg = TweakEpub(self.gui, path_to_book)
if dlg.exec_() == dlg.Accepted:
self.update_db(book_id, dlg._output)
dlg.cleanup() dlg.cleanup()
os.remove(path_to_book)
def update_db(self, book_id, rebuilt):
'''
Update the calibre db with the tweaked epub
'''
fmt = os.path.splitext(rebuilt)[1][1:].upper()
self.gui.library_view.model().db.add_format(book_id, fmt,
open(rebuilt, 'rb'), index_is_id=True)

View File

@ -334,7 +334,7 @@ class CoverView(QWidget): # {{{
self.pixmap = pmap self.pixmap = pmap
self.do_layout() self.do_layout()
self.update() self.update()
self.update_tooltip() self.update_tooltip(getattr(self.parent(), 'current_path', ''))
if not config['disable_animations']: if not config['disable_animations']:
self.animation.start() self.animation.start()
id_ = self.data.get('id', None) id_ = self.data.get('id', None)

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,33 @@
#!/usr/bin/env python
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import with_statement
__license__ = 'GPL v3'
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en'
from calibre.gui2.convert.azw3_output_ui import Ui_Form
from calibre.gui2.convert import Widget
font_family_model = None
class PluginWidget(Widget, Ui_Form):
TITLE = _('AZW3 Output')
HELP = _('Options specific to')+' AZW3 '+_('output')
COMMIT_NAME = 'azw3_output'
ICON = I('mimetypes/mobi.png')
def __init__(self, parent, get_option, get_help, db=None, book_id=None):
Widget.__init__(self, parent,
['prefer_author_sort', 'toc_title',
'mobi_toc_at_start',
'dont_compress', 'no_inline_toc', 'share_not_sync',
]
)
self.db, self.book_id = db, book_id
self.initialize_options(get_option, get_help, db, book_id)

View File

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>724</width>
<height>342</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="6" column="0">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="3" column="0" colspan="2">
<widget class="QCheckBox" name="opt_prefer_author_sort">
<property name="text">
<string>Use author &amp;sort for author</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>&amp;Title for Table of Contents:</string>
</property>
<property name="buddy">
<cstring>opt_toc_title</cstring>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QCheckBox" name="opt_share_not_sync">
<property name="text">
<string>Enable sharing of book content via Facebook, etc. WARNING: Disables last read syncing</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="opt_no_inline_toc">
<property name="text">
<string>Do not add Table of Contents to book</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="opt_mobi_toc_at_start">
<property name="text">
<string>Put generated Table of Contents at &amp;start of book instead of end</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="opt_toc_title"/>
</item>
<item row="4" column="0">
<widget class="QCheckBox" name="opt_dont_compress">
<property name="text">
<string>Disable compression of the file contents</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -50,8 +50,8 @@ class SearchAndReplaceWidget(Widget, Ui_Form):
proto.setFlags(Qt.ItemFlags(Qt.ItemIsSelectable + Qt.ItemIsEnabled)) proto.setFlags(Qt.ItemFlags(Qt.ItemIsSelectable + Qt.ItemIsEnabled))
self.search_replace.setItemPrototype(proto) self.search_replace.setItemPrototype(proto)
self.search_replace.setColumnCount(2) self.search_replace.setColumnCount(2)
self.search_replace.setColumnWidth(0, 300) self.search_replace.setColumnWidth(0, 320)
self.search_replace.setColumnWidth(1, 300) self.search_replace.setColumnWidth(1, 320)
self.search_replace.setHorizontalHeaderLabels([ self.search_replace.setHorizontalHeaderLabels([
_('Search Regular Expression'), _('Replacement Text')]) _('Search Regular Expression'), _('Replacement Text')])
@ -60,6 +60,8 @@ class SearchAndReplaceWidget(Widget, Ui_Form):
self.sr_remove.clicked.connect(self.sr_remove_clicked) self.sr_remove.clicked.connect(self.sr_remove_clicked)
self.sr_load.clicked.connect(self.sr_load_clicked) self.sr_load.clicked.connect(self.sr_load_clicked)
self.sr_save.clicked.connect(self.sr_save_clicked) self.sr_save.clicked.connect(self.sr_save_clicked)
self.sr_up.clicked.connect(self.sr_up_clicked)
self.sr_down.clicked.connect(self.sr_down_clicked)
self.search_replace.currentCellChanged.connect(self.sr_currentCellChanged) self.search_replace.currentCellChanged.connect(self.sr_currentCellChanged)
self.initialize_options(get_option, get_help, db, book_id) self.initialize_options(get_option, get_help, db, book_id)
@ -91,7 +93,7 @@ class SearchAndReplaceWidget(Widget, Ui_Form):
row = self.search_replace.currentRow() row = self.search_replace.currentRow()
if row >= 0: if row >= 0:
self.search_replace.removeRow(row) self.search_replace.removeRow(row)
self.search_replace.setCurrentCell(row-1, 0) self.search_replace.setCurrentCell(row if row < self.search_replace.rowCount() else row-1, 0)
self.sr_search.clear() self.sr_search.clear()
self.sr_replace.clear() self.sr_replace.clear()
@ -106,6 +108,7 @@ class SearchAndReplaceWidget(Widget, Ui_Form):
try: try:
self.set_value(self.opt_search_replace, self.set_value(self.opt_search_replace,
read_sr_patterns(files[0])) read_sr_patterns(files[0]))
self.search_replace.setCurrentCell(0, 0)
except Exception as e: except Exception as e:
error_dialog(self, _('Failed to read'), error_dialog(self, _('Failed to read'),
_('Failed to load patterns from %s, click Show details' _('Failed to load patterns from %s, click Show details'
@ -123,15 +126,40 @@ class SearchAndReplaceWidget(Widget, Ui_Form):
for search, replace in self.get_definitions(): for search, replace in self.get_definitions():
f.write(search + u'\n' + replace + u'\n\n') f.write(search + u'\n' + replace + u'\n\n')
def sr_up_clicked(self):
self.cell_rearrange(-1)
def sr_down_clicked(self):
self.cell_rearrange(1)
def cell_rearrange(self, i):
row = self.search_replace.currentRow()
for col in xrange(0, self.search_replace.columnCount()):
item1 = self.search_replace.item(row, col)
item2 = self.search_replace.item(row+i, col)
value = item1.text();
item1.setText(item2.text())
item2.setText(value)
self.search_replace.setCurrentCell(row+i, 0)
def sr_currentCellChanged(self, row, column, previousRow, previousColumn) : def sr_currentCellChanged(self, row, column, previousRow, previousColumn) :
if row >= 0: if row >= 0:
self.sr_change.setEnabled(True) self.sr_change.setEnabled(True)
self.sr_remove.setEnabled(True) self.sr_remove.setEnabled(True)
self.sr_save.setEnabled(True)
self.sr_search.set_regex(self.search_replace.item(row, 0).text()) self.sr_search.set_regex(self.search_replace.item(row, 0).text())
self.sr_replace.setText(self.search_replace.item(row, 1).text()) self.sr_replace.setText(self.search_replace.item(row, 1).text())
# set the up/down buttons
self.sr_up.setEnabled(row > 0)
self.sr_down.setEnabled(row < self.search_replace.rowCount()-1)
else: else:
self.sr_change.setEnabled(False) self.sr_change.setEnabled(False)
self.sr_remove.setEnabled(False) self.sr_remove.setEnabled(False)
self.sr_save.setEnabled(False)
self.sr_down.setEnabled(False)
self.sr_up.setEnabled(False)
def break_cycles(self): def break_cycles(self):
Widget.break_cycles(self) Widget.break_cycles(self)

View File

@ -78,7 +78,7 @@
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item row="2" column="0">
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="buttonsLayout">
<property name="spacing"> <property name="spacing">
<number>-1</number> <number>-1</number>
</property> </property>
@ -146,25 +146,94 @@
</item> </item>
<item> <item>
<widget class="QPushButton" name="sr_save"> <widget class="QPushButton" name="sr_save">
<property name="toolTip"> <property name="enabled">
<string>Save this list of expressions so that you can re-use it easily</string> <bool>false</bool>
</property> </property>
<property name="text"> <property name="toolTip">
<string>&amp;Save</string> <string>Save this list of expressions so that you can re-use it easily</string>
</property> </property>
<property name="text">
<string>&amp;Save</string>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>
</item> </item>
<item row="3" column="0"> <item row="3" column="0">
<widget class="QTableWidget" name="search_replace"> <layout class="QHBoxLayout" name="searchReplaceLayout">
<property name="selectionMode"> <property name="spacing">
<enum>QAbstractItemView::SingleSelection</enum> <number>-1</number>
</property> </property>
<property name="selectionBehavior"> <property name="leftMargin">
<enum>QAbstractItemView::SelectRows</enum> <number>0</number>
</property> </property>
</widget> <item>
<widget class="QTableWidget" name="search_replace">
<property name="selectionMode">
<enum>QAbstractItemView::SingleSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="positionLayout">
<item>
<widget class="QPushButton" name="sr_up">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Ignored">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>32</width>
<height>16777215</height>
</size>
</property>
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Move expression up.</string>
</property>
<property name="icon">
<iconset>
<normaloff>:/images/arrow-up.png</normaloff>:/images/arrow-up.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="sr_down">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Ignored">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>32</width>
<height>16777215</height>
</size>
</property>
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Move expression down.</string>
</property>
<property name="icon">
<iconset>
<normaloff>:/images/arrow-down.png</normaloff>:/images/arrow-down.png</iconset>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item> </item>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label"> <widget class="QLabel" name="label">
@ -189,6 +258,8 @@
<container>1</container> <container>1</container>
</customwidget> </customwidget>
</customwidgets> </customwidgets>
<resources/> <resources>
<include location="../../../../resources/images.qrc"/>
</resources>
<connections/> <connections/>
</ui> </ui>

View File

@ -316,10 +316,7 @@ class CoverFlowMixin(object):
index = m.index(row, 0) index = m.index(row, 0)
if self.library_view.currentIndex().row() != row and index.isValid(): if self.library_view.currentIndex().row() != row and index.isValid():
self.cover_flow_sync_flag = False self.cover_flow_sync_flag = False
self.library_view.scroll_to_row(index.row()) self.library_view.select_rows([row], using_ids=False)
sm = self.library_view.selectionModel()
sm.select(index, sm.ClearAndSelect|sm.Rows)
self.library_view.setCurrentIndex(index)
except: except:
import traceback import traceback
traceback.print_exc() traceback.print_exc()

View File

@ -417,6 +417,8 @@ class MetadataBulkDialog(ResizableDialog, Ui_MetadataBulkDialog):
self.writable_fields.sort() self.writable_fields.sort()
self.search_field.setMaxVisibleItems(25) self.search_field.setMaxVisibleItems(25)
self.destination_field.setMaxVisibleItems(25) self.destination_field.setMaxVisibleItems(25)
self.testgrid.setColumnStretch(1, 1)
self.testgrid.setColumnStretch(2, 1)
offset = 10 offset = 10
self.s_r_number_of_books = min(10, len(self.ids)) self.s_r_number_of_books = min(10, len(self.ids))
for i in range(1,self.s_r_number_of_books+1): for i in range(1,self.s_r_number_of_books+1):

View File

@ -1,130 +0,0 @@
#!/usr/bin/env python
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import with_statement
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en'
import os, shutil
from itertools import repeat, izip
from calibre.utils.zipfile import ZipFile, ZIP_DEFLATED, ZIP_STORED
from PyQt4.Qt import QDialog
from calibre.constants import isosx
from calibre.gui2 import open_local_file, error_dialog
from calibre.gui2.dialogs.tweak_epub_ui import Ui_Dialog
from calibre.libunzip import extract as zipextract
from calibre.ptempfile import (PersistentTemporaryDirectory,
PersistentTemporaryFile)
class TweakEpub(QDialog, Ui_Dialog):
'''
Display controls for tweaking ePubs
'''
def __init__(self, parent, epub):
QDialog.__init__(self, parent)
self._epub = epub
self._exploded = None
self._output = None
self.ishtmlz = epub.lower().endswith('.htmlz')
self.rebuilt_name = 'rebuilt.' + ('htmlz' if self.ishtmlz else 'epub')
# Run the dialog setup generated from tweak_epub.ui
self.setupUi(self)
for x, props in [(self, ['windowTitle']), (self.label, ['text'])]+\
list(izip([self.cancel_button, self.explode_button,
self.rebuild_button, self.preview_button],
repeat(['text', 'statusTip', 'toolTip']))):
for prop in props:
val = unicode(getattr(x, prop)())
val = val.format('HTMLZ' if self.ishtmlz else 'ePub')
prop = 'set' + prop[0].upper() + prop[1:]
getattr(x, prop)(val)
self.cancel_button.clicked.connect(self.reject)
self.explode_button.clicked.connect(self.explode)
self.rebuild_button.clicked.connect(self.rebuild)
self.preview_button.clicked.connect(self.preview)
# Position update dialog overlaying top left of app window
parent_loc = parent.pos()
self.move(parent_loc.x(),parent_loc.y())
self.gui = parent
self._preview_files = []
def cleanup(self):
if isosx:
try:
import appscript
self.finder = appscript.app('Finder')
self.finder.Finder_windows[os.path.basename(self._exploded)].close()
except:
# appscript fails to load on 10.4
pass
# Delete directory containing exploded ePub
if self._exploded is not None:
shutil.rmtree(self._exploded, ignore_errors=True)
for x in self._preview_files:
try:
os.remove(x)
except:
pass
def display_exploded(self):
'''
Generic subprocess launch of native file browser
User can use right-click to 'Open with ...'
'''
open_local_file(self._exploded)
def explode(self, *args):
if self._exploded is None:
self._exploded = PersistentTemporaryDirectory("_exploded", prefix='')
zipextract(self._epub, self._exploded)
self.display_exploded()
self.rebuild_button.setEnabled(True)
self.explode_button.setEnabled(False)
def do_rebuild(self, src):
with ZipFile(src, 'w', compression=ZIP_DEFLATED) as zf:
# Write mimetype
mt = os.path.join(self._exploded, 'mimetype')
if os.path.exists(mt):
zf.write(mt, 'mimetype', compress_type=ZIP_STORED)
# Write everything else
exclude_files = ['.DS_Store','mimetype','iTunesMetadata.plist',self.rebuilt_name]
for root, dirs, files in os.walk(self._exploded):
for fn in files:
if fn in exclude_files:
continue
absfn = os.path.join(root, fn)
zfn = os.path.relpath(absfn,
self._exploded).replace(os.sep, '/')
zf.write(absfn, zfn)
def preview(self):
if not self._exploded:
msg = _('You must first explode the %s before previewing.')
msg = msg%('HTMLZ' if self.ishtmlz else 'ePub')
return error_dialog(self, _('Cannot preview'), msg, show=True)
tf = PersistentTemporaryFile('.htmlz' if self.ishtmlz else '.epub')
tf.close()
self._preview_files.append(tf.name)
self.do_rebuild(tf.name)
self.gui.iactions['View']._view_file(tf.name)
def rebuild(self, *args):
self._output = os.path.join(self._exploded, self.rebuilt_name)
self.do_rebuild(self._output)
return QDialog.accept(self)

View File

@ -1,107 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="windowModality">
<enum>Qt::NonModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>382</width>
<height>265</height>
</rect>
</property>
<property name="windowTitle">
<string>Tweak {0}</string>
</property>
<property name="sizeGripEnabled">
<bool>false</bool>
</property>
<property name="modal">
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="label">
<property name="text">
<string>&lt;p&gt;Explode the {0} to display contents in a file browser window. To tweak individual files, right-click, then 'Open with...' your editor of choice. When tweaks are complete, close the file browser window &lt;b&gt;and the editor windows you used to edit files in the ePub&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Rebuild the ePub, updating your calibre library.&lt;/p&gt;</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="explode_button">
<property name="toolTip">
<string>Display contents of exploded {0}</string>
</property>
<property name="statusTip">
<string>Display contents of exploded {0}</string>
</property>
<property name="text">
<string>&amp;Explode {0}</string>
</property>
<property name="icon">
<iconset resource="../../../../resources/images.qrc">
<normaloff>:/images/wizard.png</normaloff>:/images/wizard.png</iconset>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QPushButton" name="cancel_button">
<property name="toolTip">
<string>Discard changes</string>
</property>
<property name="statusTip">
<string>Discard changes</string>
</property>
<property name="text">
<string>&amp;Cancel</string>
</property>
<property name="icon">
<iconset resource="../../../../resources/images.qrc">
<normaloff>:/images/window-close.png</normaloff>:/images/window-close.png</iconset>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QPushButton" name="rebuild_button">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Rebuild {0} from exploded contents</string>
</property>
<property name="statusTip">
<string>Rebuild {0} from exploded contents</string>
</property>
<property name="text">
<string>&amp;Rebuild {0}</string>
</property>
<property name="icon">
<iconset resource="../../../../resources/images.qrc">
<normaloff>:/images/exec.png</normaloff>:/images/exec.png</iconset>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="preview_button">
<property name="text">
<string>&amp;Preview {0}</string>
</property>
<property name="icon">
<iconset resource="../../../../resources/images.qrc">
<normaloff>:/images/view.png</normaloff>:/images/view.png</iconset>
</property>
</widget>
</item>
</layout>
</widget>
<resources>
<include location="../../../../resources/images.qrc"/>
</resources>
<connections/>
</ui>

View File

@ -332,7 +332,7 @@ class Preferences(QMainWindow):
' Please restart calibre as soon as possible.') ' Please restart calibre as soon as possible.')
if rc: if rc:
msg = _('The changes you have made require calibre be ' msg = _('The changes you have made require calibre be '
'restarted immediately. You will not be allowed ' 'restarted immediately. You will not be allowed to '
'set any more preferences, until you restart.') 'set any more preferences, until you restart.')

View File

@ -68,9 +68,9 @@ class AmazonDEKindleStore(StorePlugin):
cover_url = ''.join(data.xpath(cover_xpath)) cover_url = ''.join(data.xpath(cover_xpath))
title = ''.join(data.xpath('.//a[@class="title"]/text()')) title = ''.join(data.xpath('.//a[@class="title"]/text()'))
price = ''.join(data.xpath('.//span[@class="price"]/text()')) price = ''.join(data.xpath('.//div[@class="newPrice"]/span[contains(@class, "price")]/text()'))
author = ''.join(data.xpath('.//div[@class="title"]/span[@class="ptBrand"]/text()')) author = ''.join(data.xpath('.//h3[@class="title"]/span[@class="ptBrand"]/text()'))
if author.startswith('von '): if author.startswith('von '):
author = author[4:] author = author[4:]

View File

@ -64,8 +64,8 @@ class AmazonESKindleStore(StorePlugin):
cover_url = ''.join(data.xpath(cover_xpath)) cover_url = ''.join(data.xpath(cover_xpath))
title = ''.join(data.xpath('.//a[@class="title"]/text()')) title = ''.join(data.xpath('.//a[@class="title"]/text()'))
price = ''.join(data.xpath('.//span[@class="price"]/text()')) price = ''.join(data.xpath('.//div[@class="newPrice"]/span[contains(@class, "price")]/text()'))
author = unicode(''.join(data.xpath('.//div[@class="title"]/span[@class="ptBrand"]/text()'))) author = unicode(''.join(data.xpath('.//h3[@class="title"]/span[@class="ptBrand"]/text()')))
if author.startswith('de '): if author.startswith('de '):
author = author[3:] author = author[3:]

View File

@ -65,8 +65,8 @@ class AmazonFRKindleStore(StorePlugin):
cover_url = ''.join(data.xpath(cover_xpath)) cover_url = ''.join(data.xpath(cover_xpath))
title = ''.join(data.xpath('.//a[@class="title"]/text()')) title = ''.join(data.xpath('.//a[@class="title"]/text()'))
price = ''.join(data.xpath('.//span[@class="price"]/text()')) price = ''.join(data.xpath('.//div[@class="newPrice"]/span[contains(@class, "price")]/text()'))
author = unicode(''.join(data.xpath('.//div[@class="title"]/span[@class="ptBrand"]/text()'))) author = unicode(''.join(data.xpath('.//h3[@class="title"]/span[@class="ptBrand"]/text()')))
if author.startswith('de '): if author.startswith('de '):
author = author[3:] author = author[3:]

View File

@ -64,8 +64,8 @@ class AmazonITKindleStore(StorePlugin):
cover_url = ''.join(data.xpath(cover_xpath)) cover_url = ''.join(data.xpath(cover_xpath))
title = ''.join(data.xpath('.//a[@class="title"]/text()')) title = ''.join(data.xpath('.//a[@class="title"]/text()'))
price = ''.join(data.xpath('.//span[@class="price"]/text()')) price = ''.join(data.xpath('.//div[@class="newPrice"]/span[contains(@class, "price")]/text()'))
author = unicode(''.join(data.xpath('.//div[@class="title"]/span[@class="ptBrand"]/text()'))) author = unicode(''.join(data.xpath('.//h3[@class="title"]/span[@class="ptBrand"]/text()')))
if author.startswith('di '): if author.startswith('di '):
author = author[3:] author = author[3:]

View File

@ -147,7 +147,7 @@ class AmazonKindleStore(StorePlugin):
asin_xpath = './/div[@class="image"]/a[1]' asin_xpath = './/div[@class="image"]/a[1]'
cover_xpath = './/img[@class="productImage"]/@src' cover_xpath = './/img[@class="productImage"]/@src'
title_xpath = './/a[@class="title"]/text()' title_xpath = './/a[@class="title"]/text()'
price_xpath = './/span[@class="price"]/text()' price_xpath = './/span[contains(@class, "price")]/text()'
# Old style list. Search "martin" # Old style list. Search "martin"
else: else:
data_xpath = '//div[contains(@class, "result")]' data_xpath = '//div[contains(@class, "result")]'

View File

@ -64,9 +64,9 @@ class AmazonUKKindleStore(StorePlugin):
cover_url = ''.join(data.xpath(cover_xpath)) cover_url = ''.join(data.xpath(cover_xpath))
title = ''.join(data.xpath('.//a[@class="title"]/text()')) title = ''.join(data.xpath('.//a[@class="title"]/text()'))
price = ''.join(data.xpath('.//span[@class="price"]/text()')) price = ''.join(data.xpath('.//div[@class="newPrice"]/span[contains(@class, "price")]/text()'))
author = ''.join(data.xpath('.//div[@class="title"]/span[@class="ptBrand"]/text()')) author = ''.join(data.xpath('.//h3[@class="title"]/span[@class="ptBrand"]/text()'))
if author.startswith('by '): if author.startswith('by '):
author = author[3:] author = author[3:]

View File

@ -0,0 +1,54 @@
# -*- coding: utf-8 -*-
from __future__ import (unicode_literals, division, absolute_import, print_function)
__license__ = 'GPL 3'
__copyright__ = '2012, Alex Stanev <alex@stanev.org>'
__docformat__ = 'restructuredtext en'
import re
from calibre.gui2.store.basic_config import BasicStoreConfig
from calibre.gui2.store.opensearch_store import OpenSearchOPDSStore
from calibre.gui2.store.search_result import SearchResult
class BiblioStore(BasicStoreConfig, OpenSearchOPDSStore):
open_search_url = 'http://biblio.bg/feed.opds.php'
web_url = 'http://biblio.bg/'
def search(self, query, max_results=10, timeout=60):
# check for cyrillic symbols before performing search
uquery = unicode(query.strip(), 'utf-8')
reObj = re.search(u'^[а-яА-Я\\d\\s]{3,}$', uquery)
if not reObj:
return
for s in OpenSearchOPDSStore.search(self, query, max_results, timeout):
yield s
def get_details(self, search_result, timeout):
# get format and DRM status
from calibre import browser
from contextlib import closing
from lxml import html
br = browser()
with closing(br.open(search_result.detail_item, timeout=timeout)) as nf:
idata = html.fromstring(nf.read())
search_result.formats = ''
if idata.xpath('.//span[@class="format epub"]'):
search_result.formats = 'EPUB'
if idata.xpath('.//span[@class="format pdf"]'):
if search_result.formats == '':
search_result.formats = 'PDF'
else:
search_result.formats.join(', PDF')
if idata.xpath('.//span[@class="format nodrm-icon"]'):
search_result.drm = SearchResult.DRM_UNLOCKED
else:
search_result.drm = SearchResult.DRM_LOCKED
return True

View File

@ -7,6 +7,7 @@ __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import random import random
import urllib
from contextlib import closing from contextlib import closing
from lxml import html from lxml import html
@ -28,23 +29,27 @@ class BNStore(BasicStoreConfig, StorePlugin):
if random.randint(1, 10) in (1, 2, 3): if random.randint(1, 10) in (1, 2, 3):
pub_id = '0dsO3kDu/AU' pub_id = '0dsO3kDu/AU'
base_url = 'http://click.linksynergy.com/fs-bin/click?id=%s&subid=&offerid=229293.1&type=10&tmpid=8433&RD_PARM1=' % pub_id murl = 'http://click.linksynergy.com/fs-bin/click?id=%s&offerid=239662.13&type=3&subid=0' % pub_id
url = base_url + 'http%253A%252F%252Fwww.barnesandnoble.com%252F'
if detail_item: if detail_item:
detail_item = base_url + detail_item purl = 'http://click.linksynergy.com/fs-bin/click?id=%s&subid=&offerid=239662.%s&type=2&subid=0' % (pub_id, detail_item)
url = purl
else:
purl = None
url = murl
#print(url)
if external or self.config.get('open_external', False): if external or self.config.get('open_external', False):
open_url(QUrl(url_slash_cleaner(detail_item if detail_item else url))) open_url(QUrl(url_slash_cleaner(url)))
else: else:
d = WebStoreDialog(self.gui, url, parent, detail_item) d = WebStoreDialog(self.gui, murl, parent, purl)
d.setWindowTitle(self.name) d.setWindowTitle(self.name)
d.set_tags(self.config.get('tags', '')) d.set_tags(self.config.get('tags', ''))
d.exec_() d.exec_()
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
query = query.replace(' ', '-') url = 'http://www.barnesandnoble.com/s/%s?keyword=%s&store=ebook' % (query.replace(' ', '-'), urllib.quote_plus(query))
url = 'http://www.barnesandnoble.com/s/%s?store=nookstore' % query
br = browser() br = browser()
@ -55,9 +60,10 @@ class BNStore(BasicStoreConfig, StorePlugin):
if counter <= 0: if counter <= 0:
break break
id = ''.join(data.xpath('.//a[contains(@class, "thumb")]/@href')) id = ''.join(data.xpath('.//div[contains(@class, "display-tile-item")]/@data-bn-ean'))
if not id: if not id:
continue continue
cover_url = ''.join(data.xpath('.//img[contains(@class, "product-image")]/@src')) cover_url = ''.join(data.xpath('.//img[contains(@class, "product-image")]/@src'))
title = ''.join(data.xpath('.//a[@class="title"]//text()')) title = ''.join(data.xpath('.//a[@class="title"]//text()'))

View File

@ -64,11 +64,7 @@ class EbookscomStore(BasicStoreConfig, StorePlugin):
continue continue
id = mo.group() id = mo.group()
cover_url = '' cover_url = ''.join(data.xpath('.//div[@class="img"]//img/@src'))
cover_load = ''.join(data.xpath('.//div[@class="img"]//img/@onload'))
mo = re.search('(?<=\').+?(?=\')', cover_load)
if mo:
cover_url = mo.group();
title = '' title = ''
author = '' author = ''

View File

@ -42,6 +42,7 @@ class EBookShoppeUKStore(BasicStoreConfig, StorePlugin):
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
url = 'http://www.ebookshoppe.com/search.php?search_query=' + urllib2.quote(query) url = 'http://www.ebookshoppe.com/search.php?search_query=' + urllib2.quote(query)
br = browser() br = browser()
br.addheaders = [("Referer", "http://www.ebookshoppe.com/")]
counter = max_results counter = max_results
with closing(br.open(url, timeout=timeout)) as f: with closing(br.open(url, timeout=timeout)) as f:

View File

@ -25,16 +25,15 @@ class FoylesUKStore(BasicStoreConfig, StorePlugin):
def open(self, parent=None, detail_item=None, external=False): def open(self, parent=None, detail_item=None, external=False):
url = 'http://www.awin1.com/awclick.php?mid=1414&id=120917' url = 'http://www.awin1.com/awclick.php?mid=1414&id=120917'
detail_url = 'http://www.awin1.com/cread.php?awinmid=1414&awinaffid=120917&clickref=&p=' detail_url = 'http://www.awin1.com/cread.php?awinmid=1414&awinaffid=120917&clickref=&p='
url_redirect = 'http://www.foyles.co.uk'
if external or self.config.get('open_external', False): if external or self.config.get('open_external', False):
if detail_item: if detail_item:
url = detail_url + url_redirect + detail_item url = detail_url + detail_item
open_url(QUrl(url_slash_cleaner(url))) open_url(QUrl(url_slash_cleaner(url)))
else: else:
detail_url = None detail_url = None
if detail_item: if detail_item:
detail_url = url + url_redirect + detail_item detail_url = url + detail_item
d = WebStoreDialog(self.gui, url, parent, detail_url) d = WebStoreDialog(self.gui, url, parent, detail_url)
d.setWindowTitle(self.name) d.setWindowTitle(self.name)
d.set_tags(self.config.get('tags', '')) d.set_tags(self.config.get('tags', ''))

View File

@ -59,7 +59,7 @@ class LibreDEStore(BasicStoreConfig, StorePlugin):
id = ''.join(details.xpath('./div[@class="text"]/a/@name')).strip() id = ''.join(details.xpath('./div[@class="text"]/a/@name')).strip()
if not id: if not id:
continue continue
cover_url = ''.join(details.xpath('./div[@class="bild"]/a/img/@src')) cover_url = ''.join(details.xpath('.//div[@class="coverImg"]/a/img/@src'))
title = ''.join(details.xpath('./div[@class="text"]/span[@class="titel"]/a/text()')).strip() title = ''.join(details.xpath('./div[@class="text"]/span[@class="titel"]/a/text()')).strip()
author = ''.join(details.xpath('./div[@class="text"]/span[@class="author"]/text()')).strip() author = ''.join(details.xpath('./div[@class="text"]/span[@class="author"]/text()')).strip()
pdf = details.xpath( pdf = details.xpath(
@ -68,7 +68,8 @@ class LibreDEStore(BasicStoreConfig, StorePlugin):
'boolean(.//span[@class="format" and contains(text(), "epub")]/text())') 'boolean(.//span[@class="format" and contains(text(), "epub")]/text())')
mobi = details.xpath( mobi = details.xpath(
'boolean(.//span[@class="format" and contains(text(), "mobipocket")]/text())') 'boolean(.//span[@class="format" and contains(text(), "mobipocket")]/text())')
price = (''.join(data.xpath('.//span[@class="preis"]/text()'))).replace('*', '') price = ''.join(data.xpath('.//span[@class="preis"]/text()')).replace('*', '').strip()
counter -= 1 counter -= 1
s = SearchResult() s = SearchResult()

View File

@ -41,7 +41,7 @@ class WHSmithUKStore(BasicStoreConfig, StorePlugin):
def search(self, query, max_results=10, timeout=60): def search(self, query, max_results=10, timeout=60):
url = ('http://www.whsmith.co.uk/CatalogAndSearch/SearchWithinCategory.aspx' url = ('http://www.whsmith.co.uk/CatalogAndSearch/SearchWithinCategory.aspx'
'?cat=\Books\eb_eBooks&gq=' + urllib2.quote(query)) '?cat=\eb_eBooks&gq=' + urllib2.quote(query))
br = browser() br = browser()

View File

@ -617,6 +617,31 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, EmailMixin, # {{{
d.show() d.show()
self._modeless_dialogs.append(d) self._modeless_dialogs.append(d)
return return
if 'calibre.ebooks.oeb.transforms.split.SplitError' in job.details:
title = job.description.split(':')[-1].partition('(')[-1][:-1]
msg = _('<p><b>Failed to convert: %s')%title
msg += '<p>'+_('''
Many older ebook reader devices are incapable of displaying
EPUB files that have internal components over a certain size.
Therefore, when converting to EPUB, calibre automatically tries
to split up the EPUB into smaller sized pieces. For some
files that are large undifferentiated blocks of text, this
splitting fails.
<p>You can <b>work around the problem</b> by either increasing the
maximum split size under EPUB Output in the conversion dialog,
or by turning on Heuristic Processing, also in the conversion
dialog. Note that if you make the maximum split size too large,
your ebook reader may have trouble with the EPUB.
''')
if not minz:
d = error_dialog(self, _('Conversion Failed'), msg,
det_msg=job.details)
d.setModal(False)
d.show()
self._modeless_dialogs.append(d)
return
if 'calibre.web.feeds.input.RecipeDisabled' in job.details: if 'calibre.web.feeds.input.RecipeDisabled' in job.details:
if not minz: if not minz:
msg = job.details msg = job.details

View File

@ -6,7 +6,7 @@ __license__ = 'GPL v3'
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>' __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import os, traceback, cStringIO, re import os, traceback, cStringIO, re, shutil
from calibre.constants import DEBUG from calibre.constants import DEBUG
from calibre.utils.config import Config, StringConfig, tweaks from calibre.utils.config import Config, StringConfig, tweaks
@ -19,6 +19,7 @@ from calibre.ebooks.metadata import fmt_sidx
from calibre.ebooks.metadata import title_sort from calibre.ebooks.metadata import title_sort
from calibre.utils.date import parse_date, as_local_time from calibre.utils.date import parse_date, as_local_time
from calibre import strftime, prints, sanitize_file_name_unicode from calibre import strftime, prints, sanitize_file_name_unicode
from calibre.ptempfile import SpooledTemporaryFile
plugboard_any_device_value = 'any device' plugboard_any_device_value = 'any device'
plugboard_any_format_value = 'any format' plugboard_any_format_value = 'any format'
@ -339,19 +340,16 @@ def do_save_book_to_disk(id_, mi, cover, plugboards,
for fmt in formats: for fmt in formats:
global plugboard_save_to_disk_value, plugboard_any_format_value global plugboard_save_to_disk_value, plugboard_any_format_value
cpb = find_plugboard(plugboard_save_to_disk_value, fmt, plugboards) cpb = find_plugboard(plugboard_save_to_disk_value, fmt, plugboards)
# Leave this here for a while, in case problems arise.
if cpb is not None:
prints('Save-to-disk using plugboard:', fmt, cpb)
fp = format_map.get(fmt, None) fp = format_map.get(fmt, None)
if fp is None: if fp is None:
continue continue
stream = SpooledTemporaryFile(20*1024*1024, '_save_to_disk.'+(fmt or
'tmp'))
with open(fp, 'rb') as f: with open(fp, 'rb') as f:
data = f.read() shutil.copyfileobj(f, stream)
stream.seek(0)
written = True written = True
if opts.update_metadata: if opts.update_metadata:
stream = cStringIO.StringIO()
stream.write(data)
stream.seek(0)
try: try:
if cpb: if cpb:
newmi = mi.deepcopy_metadata() newmi = mi.deepcopy_metadata()
@ -365,10 +363,9 @@ def do_save_book_to_disk(id_, mi, cover, plugboards,
if DEBUG: if DEBUG:
traceback.print_exc() traceback.print_exc()
stream.seek(0) stream.seek(0)
data = stream.read()
fmt_path = base_path+'.'+str(fmt) fmt_path = base_path+'.'+str(fmt)
with open(fmt_path, 'wb') as f: with open(fmt_path, 'wb') as f:
f.write(data) shutil.copyfileobj(stream, f)
return not written, id_, mi.title return not written, id_, mi.title

View File

@ -22,7 +22,7 @@ It can convert every input format in the following list, to every output format.
*Input Formats:* CBZ, CBR, CBC, CHM, DJVU, EPUB, FB2, HTML, HTMLZ, LIT, LRF, MOBI, ODT, PDF, PRC, PDB, PML, RB, RTF, SNB, TCR, TXT, TXTZ *Input Formats:* CBZ, CBR, CBC, CHM, DJVU, EPUB, FB2, HTML, HTMLZ, LIT, LRF, MOBI, ODT, PDF, PRC, PDB, PML, RB, RTF, SNB, TCR, TXT, TXTZ
*Output Formats:* EPUB, FB2, OEB, LIT, LRF, MOBI, HTMLZ, PDB, PML, RB, PDF, RTF, SNB, TCR, TXT, TXTZ *Output Formats:* AZW3, EPUB, FB2, OEB, LIT, LRF, MOBI, HTMLZ, PDB, PML, RB, PDF, RTF, SNB, TCR, TXT, TXTZ
.. note :: .. note ::
@ -35,7 +35,7 @@ It can convert every input format in the following list, to every output format.
What are the best source formats to convert? What are the best source formats to convert?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In order of decreasing preference: LIT, MOBI, EPUB, FB2, HTML, PRC, RTF, PDB, TXT, PDF In order of decreasing preference: LIT, MOBI, AZW, EPUB, AZW3, FB2, HTML, PRC, RTF, PDB, TXT, PDF
I converted a PDF file, but the result has various problems? I converted a PDF file, but the result has various problems?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -245,7 +245,7 @@ The following functions are available in addition to those described in single-f
* ``current_library_name() -- `` return the last name on the path to the current calibre library. This function can be called in template program mode using the template ``{:'current_library_name()'}``. * ``current_library_name() -- `` return the last name on the path to the current calibre library. This function can be called in template program mode using the template ``{:'current_library_name()'}``.
* ``days_between(date1, date2)`` -- return the number of days between ``date1`` and ``date2``. The number is positive if ``date1`` is greater than ``date2``, otherwise negative. If either ``date1`` or ``date2`` are not dates, the function returns the empty string. * ``days_between(date1, date2)`` -- return the number of days between ``date1`` and ``date2``. The number is positive if ``date1`` is greater than ``date2``, otherwise negative. If either ``date1`` or ``date2`` are not dates, the function returns the empty string.
* ``divide(x, y)`` -- returns x / y. Throws an exception if either x or y are not numbers. * ``divide(x, y)`` -- returns x / y. Throws an exception if either x or y are not numbers.
* ``eval(string)`` -- evaluates the string as a program, passing the local variables (those ``assign`` ed to). This permits using the template processor to construct complex results from local variables. * ``eval(string)`` -- evaluates the string as a program, passing the local variables (those ``assign`` ed to). This permits using the template processor to construct complex results from local variables. Because the `{` and `}` characters are special, you must use `[[` for the `{` character and `]]` for the '}' character; they are converted automatically. Note also that prefixes and suffixes (the "|prefix|suffix" syntax) cannot be used in the argument to this function when using template program mode.
* ``field(name)`` -- returns the metadata field named by ``name``. * ``field(name)`` -- returns the metadata field named by ``name``.
* ``first_non_empty(value, value, ...)`` -- returns the first value that is not empty. If all values are empty, then the empty value is returned. You can have as many values as you want. * ``first_non_empty(value, value, ...)`` -- returns the first value that is not empty. If all values are empty, then the empty value is returned. You can have as many values as you want.
* ``format_date(x, date_format)`` -- format_date(val, format_string) -- format the value, which must be a date field, using the format_string, returning a string. The formatting codes are:: * ``format_date(x, date_format)`` -- format_date(val, format_string) -- format the value, which must be a date field, using the format_string, returning a string. The formatting codes are::
@ -306,7 +306,7 @@ The following functions are available in addition to those described in single-f
* ``substr(str, start, end)`` -- returns the ``start``'th through the ``end``'th characters of ``str``. The first character in ``str`` is the zero'th character. If end is negative, then it indicates that many characters counting from the right. If end is zero, then it indicates the last character. For example, ``substr('12345', 1, 0)`` returns ``'2345'``, and ``substr('12345', 1, -1)`` returns ``'234'``. * ``substr(str, start, end)`` -- returns the ``start``'th through the ``end``'th characters of ``str``. The first character in ``str`` is the zero'th character. If end is negative, then it indicates that many characters counting from the right. If end is zero, then it indicates the last character. For example, ``substr('12345', 1, 0)`` returns ``'2345'``, and ``substr('12345', 1, -1)`` returns ``'234'``.
* ``subtract(x, y)`` -- returns x - y. Throws an exception if either x or y are not numbers. * ``subtract(x, y)`` -- returns x - y. Throws an exception if either x or y are not numbers.
* ``today()`` -- return a date string for today. This value is designed for use in format_date or days_between, but can be manipulated like any other string. The date is in ISO format. * ``today()`` -- return a date string for today. This value is designed for use in format_date or days_between, but can be manipulated like any other string. The date is in ISO format.
* ``template(x)`` -- evaluates x as a template. The evaluation is done in its own context, meaning that variables are not shared between the caller and the template evaluation. Because the `{` and `}` characters are special, you must use `[[` for the `{` character and `]]` for the '}' character; they are converted automatically. For example, ``template('[[title_sort]]') will evaluate the template ``{title_sort}`` and return its value. * ``template(x)`` -- evaluates x as a template. The evaluation is done in its own context, meaning that variables are not shared between the caller and the template evaluation. Because the `{` and `}` characters are special, you must use `[[` for the `{` character and `]]` for the '}' character; they are converted automatically. For example, ``template('[[title_sort]]') will evaluate the template ``{title_sort}`` and return its value. Note also that prefixes and suffixes (the "|prefix|suffix" syntax) cannot be used in the argument to this function when using template program mode.
.. _template_functions_reference: .. _template_functions_reference:

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: calibre\n" "Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-04-20 09:28+0000\n" "POT-Creation-Date: 2012-04-27 05:30+0000\n"
"PO-Revision-Date: 2012-04-22 20:27+0000\n" "PO-Revision-Date: 2012-04-22 20:27+0000\n"
"Last-Translator: Gideon Wentink <Unknown>\n" "Last-Translator: Gideon Wentink <Unknown>\n"
"Language-Team: Afrikaans <af@li.org>\n" "Language-Team: Afrikaans <af@li.org>\n"
@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Launchpad-Export-Date: 2012-04-23 04:43+0000\n" "X-Launchpad-Export-Date: 2012-04-28 04:36+0000\n"
"X-Generator: Launchpad (build 15135)\n" "X-Generator: Launchpad (build 15149)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing" msgid "Does absolutely nothing"
@ -26,8 +26,8 @@ msgstr "Doen absolute niks"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106 #: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109 #: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120 #: /home/kovid/work/calibre/src/calibre/db/cache.py:120
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:319 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:321
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:320 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:322
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@ -107,11 +107,13 @@ msgstr "Doen absolute niks"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:497 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:318
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:397
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:850 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:838
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360
@ -144,15 +146,15 @@ msgstr "Doen absolute niks"
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425
#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:397
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:402 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:400
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:602 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:603
#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:128
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:151 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:157
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56
@ -172,7 +174,7 @@ msgstr "Doen absolute niks"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:388
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204
@ -946,21 +948,21 @@ msgstr "Kaart B"
msgid "Debug log" msgid "Debug log"
msgstr "Ontfoutlogboek" msgstr "Ontfoutlogboek"
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:17 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:19
msgid "Communicate with Android phones." msgid "Communicate with Android phones."
msgstr "Kommunikeer met Android-fone" msgstr "Kommunikeer met Android-fone"
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:168 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:170
msgid "" msgid ""
"Comma separated list of directories to send e-books to on the device. The " "Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used" "first one that exists will be used"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:259 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:261
msgid "Communicate with S60 phones." msgid "Communicate with S60 phones."
msgstr "Kommunikeer met S60-fone" msgstr "Kommunikeer met S60-fone"
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:278 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:280
msgid "Communicate with WebOS tablets." msgid "Communicate with WebOS tablets."
msgstr "Kommunikeer met WebOS-tablette." msgstr "Kommunikeer met WebOS-tablette."
@ -1091,7 +1093,7 @@ msgstr ""
"Klik Toon Detail vir n lys." "Klik Toon Detail vir n lys."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726 #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:102 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:103
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568
@ -3127,7 +3129,7 @@ msgid "Set the publication date."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539
msgid "Set the book timestamp (used by the date column in calibre)." msgid "Set the book timestamp (no longer used anywhere)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543
@ -3596,7 +3598,7 @@ msgid "Producer"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:934
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245
msgid "Comments" msgid "Comments"
@ -3753,8 +3755,8 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1246
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:946
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover" msgid "Cover"
msgstr "" msgstr ""
@ -3872,74 +3874,75 @@ msgstr ""
msgid "This is an Amazon Topaz book. It cannot be processed." msgid "This is an Amazon Topaz book. It cannot be processed."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:498 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:464
msgid "No details available" msgid "No details available"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
msgid "Title Page" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1248
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199
msgid "Table of Contents" msgid "Table of Contents"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1247
msgid "Title Page"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1249
msgid "Index" msgid "Index"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1250
msgid "Glossary" msgid "Glossary"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1263 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1251
msgid "Acknowledgements" msgid "Acknowledgements"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1264 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1252
msgid "Bibliography" msgid "Bibliography"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1265 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1253
msgid "Colophon" msgid "Colophon"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1266 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1254
msgid "Copyright" msgid "Copyright"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1267 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1255
msgid "Dedication" msgid "Dedication"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1268 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1256
msgid "Epigraph" msgid "Epigraph"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1269 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1257
msgid "Foreword" msgid "Foreword"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1270 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258
msgid "List of Illustrations" msgid "List of Illustrations"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1271 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259
msgid "List of Tables" msgid "List of Tables"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1272 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
msgid "Notes" msgid "Notes"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1273 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261
msgid "Preface" msgid "Preface"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1274 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262
msgid "Main Text" msgid "Main Text"
msgstr "" msgstr ""
@ -4450,9 +4453,9 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:178
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:242
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91
msgid "No books selected" msgid "No books selected"
msgstr "" msgstr ""
@ -4880,7 +4883,7 @@ msgid "Create a catalog of the books in your calibre library"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:612 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:614
msgid "Cannot convert" msgid "Cannot convert"
msgstr "" msgstr ""
@ -5250,20 +5253,20 @@ msgid ""
"details\" to see which books." "details\" to see which books."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
msgid "Download complete" msgid "Download complete"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880
msgid "Download log" msgid "Download log"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:149 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:147
msgid "Some books changed" msgid "Some books changed"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:148
msgid "" msgid ""
"The metadata for some books in your library has changed since you started " "The metadata for some books in your library has changed since you started "
"the download. If you proceed, some of those changes may be overwritten. " "the download. If you proceed, some of those changes may be overwritten. "
@ -5271,27 +5274,27 @@ msgid ""
"proceed?" "proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:179 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:177
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:243 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:241
msgid "Cannot edit metadata" msgid "Cannot edit metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:278
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:283 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281
msgid "Cannot merge books" msgid "Cannot merge books"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:284 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:282
msgid "At least two books must be selected for merging" msgid "At least two books must be selected for merging"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:287 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:285
msgid "" msgid ""
"You are about to merge more than 5 books. Are you <b>sure</b> you want to " "You are about to merge more than 5 books. Are you <b>sure</b> you want to "
"proceed?" "proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:294
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be added to the " "Book formats and metadata from the selected books will be added to the "
@ -5300,7 +5303,7 @@ msgid ""
"changed.<br><br>Please confirm you want to proceed." "changed.<br><br>Please confirm you want to proceed."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:306
#, python-format #, python-format
msgid "" msgid ""
"Book formats from the selected books will be merged into the <b>first " "Book formats from the selected books will be merged into the <b>first "
@ -5313,7 +5316,7 @@ msgid ""
"calibre library.<br><br> Are you <b>sure</b> you want to proceed?" "calibre library.<br><br> Are you <b>sure</b> you want to proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:324 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:322
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be merged into the " "Book formats and metadata from the selected books will be merged into the "
@ -5325,15 +5328,15 @@ msgid ""
"Are you <b>sure</b> you want to proceed?" "Are you <b>sure</b> you want to proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:499 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:497
msgid "Applying changed metadata" msgid "Applying changed metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:586
msgid "Some failures" msgid "Some failures"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:589 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:587
msgid "" msgid ""
"Failed to apply updated metadata for some books in your library. Click " "Failed to apply updated metadata for some books in your library. Click "
"\"Show Details\" to see details." "\"Show Details\" to see details."
@ -6028,17 +6031,17 @@ msgstr ""
msgid "Remove Cover" msgid "Remove Cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:358 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359
msgid "Double-click to open Book Details window" msgid "Double-click to open Book Details window"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295
msgid "Path" msgid "Path"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:361
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109
#, python-format #, python-format
msgid "Cover size: %(width)d x %(height)d" msgid "Cover size: %(width)d x %(height)d"
@ -7106,33 +7109,44 @@ msgid ""
"possible." "possible."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:101
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:186
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916
msgid "Choose cover for " msgid "Choose cover for "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:193
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924
msgid "Cannot read" msgid "Cannot read"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:194
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925
msgid "You do not have permission to read the file: " msgid "You do not have permission to read the file: "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:202
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:209
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933
msgid "Error reading file" msgid "Error reading file"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934
msgid "<p>There was an error reading from file: <br /><b>" msgid "<p>There was an error reading from file: <br /><b>"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:210
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944
msgid " is not a valid picture" msgid " is not a valid picture"
msgstr "" msgstr ""
@ -7555,7 +7569,7 @@ msgid "&Remove"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119
msgid "Load a listof expression from a previously saved file" msgid "Load a list of expressions from a previously saved file"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120
@ -7563,7 +7577,7 @@ msgid "&Load"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121
msgid "Save this list of expression so that you can re-use it easily" msgid "Save this list of expressions so that you can re-use it easily"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122
@ -8902,7 +8916,7 @@ msgid "Author names cannot contain & characters."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:138 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137
msgid "Manage authors" msgid "Manage authors"
msgstr "" msgstr ""
@ -8990,27 +9004,32 @@ msgid "&Hide all jobs"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:296
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:51
msgid "&Copy to clipboard" msgid "&Copy to clipboard"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:292 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:299
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:54
msgid "Show &details" msgid "Show &details"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:293 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:300
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:55
msgid "Hide &details" msgid "Hide &details"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:304
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:59
msgid "Show detailed information about this error" msgid "Show detailed information about this error"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:318 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:325
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:78
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588
msgid "Copied" msgid "Copied"
msgstr "" msgstr ""
@ -9021,10 +9040,11 @@ msgstr ""
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48
msgid "View log" msgid "View log"
msgstr "" msgstr ""
@ -9037,7 +9057,7 @@ msgid "Standard metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:906 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:915
msgid "Custom metadata" msgid "Custom metadata"
msgstr "" msgstr ""
@ -9218,7 +9238,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:191
msgid "Open Tag Editor" msgid "Open Tag Editor"
msgstr "" msgstr ""
@ -9362,13 +9382,13 @@ msgid "Set from &ebook file(s)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:545 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:554
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:711 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:720
msgid "&Basic metadata" msgid "&Basic metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:552 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:561
msgid "&Custom metadata" msgid "&Custom metadata"
msgstr "" msgstr ""
@ -11437,7 +11457,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:439
msgid "Permission denied" msgid "Permission denied"
msgstr "" msgstr ""
@ -11671,7 +11691,7 @@ msgid "Bad database location %r. calibre will now quit."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:515 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:517
msgid "Corrupted database" msgid "Corrupted database"
msgstr "" msgstr ""
@ -11748,7 +11768,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:441 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440
#, python-format #, python-format
msgid "Could not open %s. Is it being used by another program?" msgid "Could not open %s. Is it being used by another program?"
msgstr "" msgstr ""
@ -11900,15 +11920,6 @@ msgstr ""
msgid "Could not change cover as the image is invalid." msgid "Could not change cover as the image is invalid."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142
msgid "Tags changed" msgid "Tags changed"
msgstr "" msgstr ""
@ -12047,11 +12058,11 @@ msgstr ""
msgid "Downloaded metadata fields" msgid "Downloaded metadata fields"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:31
msgid "Edit Metadata" msgid "Edit Metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:66 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:65
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219
@ -12059,21 +12070,21 @@ msgstr ""
msgid "Next" msgid "Next"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:69
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393
msgid "Previous" msgid "Previous"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:118
msgid "" msgid ""
"Automatically create the title sort entry based on the current title entry.\n" "Automatically create the title sort entry based on the current title entry.\n"
"Using this button to create title sort will change title sort from red to " "Using this button to create title sort will change title sort from red to "
"green." "green."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:129
msgid "" msgid ""
"Automatically create the author sort entry based on the current author " "Automatically create the author sort entry based on the current author "
"entry. Using this button to create author sort will change author sort from " "entry. Using this button to create author sort will change author sort from "
@ -12081,111 +12092,111 @@ msgid ""
"Click and hold on the button to see it." "Click and hold on the button to see it."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:135
msgid "Set author sort from author" msgid "Set author sort from author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136
msgid "Set author from author sort" msgid "Set author from author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:140 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:139
msgid "Copy author to author sort" msgid "Copy author to author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:141
msgid "Copy author sort to author" msgid "Copy author sort to author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:152
msgid "Swap the author and title" msgid "Swap the author and title"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:158
msgid "" msgid ""
"Manage authors. Use to rename authors and correct individual author's sort " "Manage authors. Use to rename authors and correct individual author's sort "
"values" "values"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:165
msgid "Clear series" msgid "Clear series"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:201 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:200
msgid "Clear Ids" msgid "Clear Ids"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:205 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:204
msgid "" msgid ""
"Paste the contents of the clipboard into the identifiers box prefixed with " "Paste the contents of the clipboard into the identifiers box prefixed with "
"isbn:" "isbn:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:218 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:217
msgid "&Download metadata" msgid "&Download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:230 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:229
msgid "Configure download metadata" msgid "Configure download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:234 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:233
msgid "Change how calibre downloads metadata" msgid "Change how calibre downloads metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:295
#, python-format #, python-format
msgid " [%(num)d of %(tot)d]" msgid " [%(num)d of %(tot)d]"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:326
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:333
msgid "Could not read cover" msgid "Could not read cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:328 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327
#, python-format #, python-format
msgid "Could not read cover from %s format" msgid "Could not read cover from %s format"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334
#, python-format #, python-format
msgid "The cover in the %s format is invalid" msgid "The cover in the %s format is invalid"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:493 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:502
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:498 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:507
#, python-format #, python-format
msgid "Save changes and edit the metadata of %s" msgid "Save changes and edit the metadata of %s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:595 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:604
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:800 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:809
msgid "Change cover" msgid "Change cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:654 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:663
msgid "Co&mments" msgid "Co&mments"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:694 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:703
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:841 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:850
msgid "&Metadata" msgid "&Metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:699 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:708
msgid "&Cover and formats" msgid "&Cover and formats"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:769 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:778
msgid "C&ustom metadata" msgid "C&ustom metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:781 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:790
msgid "&Comments" msgid "&Comments"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:847 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:856
msgid "Basic metadata" msgid "Basic metadata"
msgstr "" msgstr ""
@ -14177,7 +14188,7 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:452 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:454
msgid "Failed to start content server" msgid "Failed to start content server"
msgstr "" msgstr ""
@ -15447,31 +15458,31 @@ msgid ""
"reconvert them?" "reconvert them?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205
msgid "&Donate to support calibre" msgid "&Donate to support calibre"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241
msgid "&Restore" msgid "&Restore"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246
msgid "&Eject connected device" msgid "&Eject connected device"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250
msgid "Quit calibre" msgid "Quit calibre"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263
msgid "Clear the current search" msgid "Clear the current search"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:363 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:365
msgid "Debug mode" msgid "Debug mode"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:364 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366
#, python-format #, python-format
msgid "" msgid ""
"You have started calibre in debug mode. After you quit calibre, the debug " "You have started calibre in debug mode. After you quit calibre, the debug "
@ -15479,11 +15490,11 @@ msgid ""
"automatically." "automatically."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:386
msgid "Failed to start Content Server" msgid "Failed to start Content Server"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:387
#, python-format #, python-format
msgid "" msgid ""
"Could not start the content server. Error:\n" "Could not start the content server. Error:\n"
@ -15491,7 +15502,7 @@ msgid ""
"%s" "%s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:516 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:518
#, python-format #, python-format
msgid "" msgid ""
"The library database at %s appears to be corrupted. Do you want calibre to " "The library database at %s appears to be corrupted. Do you want calibre to "
@ -15499,34 +15510,34 @@ msgid ""
"successful." "successful."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:600 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:602
msgid "Conversion Error" msgid "Conversion Error"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625
msgid "Recipe Disabled" msgid "Recipe Disabled"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:639 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:641
msgid "<b>Failed</b>" msgid "<b>Failed</b>"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:675
msgid "There are active jobs. Are you sure you want to quit?" msgid "There are active jobs. Are you sure you want to quit?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:676 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:678
msgid "" msgid ""
" is communicating with the device!<br>\n" " is communicating with the device!<br>\n"
" Quitting may cause corruption on the device.<br>\n" " Quitting may cause corruption on the device.<br>\n"
" Are you sure you want to quit?" " Are you sure you want to quit?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:680 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:682
msgid "Active jobs" msgid "Active jobs"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:749 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:751
msgid "" msgid ""
"will keep running in the system tray. To close it, choose <b>Quit</b> in the " "will keep running in the system tray. To close it, choose <b>Quit</b> in the "
"context menu of the system tray." "context menu of the system tray."

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: calibre\n" "Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-04-20 09:28+0000\n" "POT-Creation-Date: 2012-04-27 05:30+0000\n"
"PO-Revision-Date: 2011-12-09 11:30+0000\n" "PO-Revision-Date: 2011-12-09 11:30+0000\n"
"Last-Translator: عبدالله شلي (Abdellah Chelli) <sneetsher@gmail.com>\n" "Last-Translator: عبدالله شلي (Abdellah Chelli) <sneetsher@gmail.com>\n"
"Language-Team: Arabic <ar@li.org>\n" "Language-Team: Arabic <ar@li.org>\n"
@ -16,8 +16,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= " "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n" "3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
"X-Launchpad-Export-Date: 2012-04-21 04:42+0000\n" "X-Launchpad-Export-Date: 2012-04-28 04:36+0000\n"
"X-Generator: Launchpad (build 15120)\n" "X-Generator: Launchpad (build 15149)\n"
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:189
msgid "&Monospace family:" msgid "&Monospace family:"
@ -63,8 +63,8 @@ msgstr "لا يفعل شيءً"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106 #: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109 #: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120 #: /home/kovid/work/calibre/src/calibre/db/cache.py:120
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:319 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:321
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:320 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:322
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@ -144,11 +144,13 @@ msgstr "لا يفعل شيءً"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:497 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:318
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:397
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:850 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:838
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360
@ -181,15 +183,15 @@ msgstr "لا يفعل شيءً"
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425
#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:397
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:402 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:400
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:602 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:603
#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:128
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:151 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:157
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56
@ -209,7 +211,7 @@ msgstr "لا يفعل شيءً"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:388
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204
@ -1005,11 +1007,11 @@ msgstr "بلكبيبي"
msgid "Debug log" msgid "Debug log"
msgstr "تصحيح السجل" msgstr "تصحيح السجل"
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:17 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:19
msgid "Communicate with Android phones." msgid "Communicate with Android phones."
msgstr "التواصل مع هواتف أندرويد ." msgstr "التواصل مع هواتف أندرويد ."
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:168 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:170
msgid "" msgid ""
"Comma separated list of directories to send e-books to on the device. The " "Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used" "first one that exists will be used"
@ -1017,11 +1019,11 @@ msgstr ""
"مفصولة بفواصل قائمة الدلائل إلى إرسال البريد إلى الكتب على الجهاز. وسيتم " "مفصولة بفواصل قائمة الدلائل إلى إرسال البريد إلى الكتب على الجهاز. وسيتم "
"استخدام أول واحد موجود" "استخدام أول واحد موجود"
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:259 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:261
msgid "Communicate with S60 phones." msgid "Communicate with S60 phones."
msgstr "تواصل معا هواتف S60." msgstr "تواصل معا هواتف S60."
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:278 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:280
msgid "Communicate with WebOS tablets." msgid "Communicate with WebOS tablets."
msgstr "" msgstr ""
@ -1158,7 +1160,7 @@ msgstr ""
"انقر على \"إظهار التفاصيل\" للقائمة." "انقر على \"إظهار التفاصيل\" للقائمة."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726 #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:102 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:103
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568
@ -3311,9 +3313,8 @@ msgid "Set the publication date."
msgstr "مجموعة من تاريخ نشره." msgstr "مجموعة من تاريخ نشره."
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539
msgid "Set the book timestamp (used by the date column in calibre)." msgid "Set the book timestamp (no longer used anywhere)"
msgstr "" msgstr ""
"تعيين الطابع الزمني كتاب (المستخدمة من قبل التاريخ في العمود العيار)."
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543
msgid "" msgid ""
@ -3817,7 +3818,7 @@ msgid "Producer"
msgstr "المنتج" msgstr "المنتج"
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:934
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245
msgid "Comments" msgid "Comments"
@ -3987,8 +3988,8 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1246
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:946
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover" msgid "Cover"
msgstr "الغلاف" msgstr "الغلاف"
@ -4107,74 +4108,75 @@ msgstr ""
msgid "This is an Amazon Topaz book. It cannot be processed." msgid "This is an Amazon Topaz book. It cannot be processed."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:498 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:464
msgid "No details available" msgid "No details available"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
msgid "Title Page" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1248
msgstr "صقحة العنوان"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199
msgid "Table of Contents" msgid "Table of Contents"
msgstr "المحتويات" msgstr "المحتويات"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1247
msgid "Title Page"
msgstr "صقحة العنوان"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1249
msgid "Index" msgid "Index"
msgstr "الفهرس" msgstr "الفهرس"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1250
msgid "Glossary" msgid "Glossary"
msgstr "المسرد" msgstr "المسرد"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1263 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1251
msgid "Acknowledgements" msgid "Acknowledgements"
msgstr "شكر وتقدير" msgstr "شكر وتقدير"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1264 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1252
msgid "Bibliography" msgid "Bibliography"
msgstr "ببليوغرافيا" msgstr "ببليوغرافيا"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1265 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1253
msgid "Colophon" msgid "Colophon"
msgstr "بيانات الطبع" msgstr "بيانات الطبع"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1266 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1254
msgid "Copyright" msgid "Copyright"
msgstr "حقوق المؤلف" msgstr "حقوق المؤلف"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1267 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1255
msgid "Dedication" msgid "Dedication"
msgstr "الإهداء" msgstr "الإهداء"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1268 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1256
msgid "Epigraph" msgid "Epigraph"
msgstr "كتابة منقوشة" msgstr "كتابة منقوشة"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1269 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1257
msgid "Foreword" msgid "Foreword"
msgstr "افتتاحية" msgstr "افتتاحية"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1270 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258
msgid "List of Illustrations" msgid "List of Illustrations"
msgstr "قائمة الرسوم" msgstr "قائمة الرسوم"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1271 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259
msgid "List of Tables" msgid "List of Tables"
msgstr "قائمة الجداول" msgstr "قائمة الجداول"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1272 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
msgid "Notes" msgid "Notes"
msgstr "الملاحظات" msgstr "الملاحظات"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1273 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261
msgid "Preface" msgid "Preface"
msgstr "افتتاحية" msgstr "افتتاحية"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1274 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262
msgid "Main Text" msgid "Main Text"
msgstr "النصّ الرئيسي" msgstr "النصّ الرئيسي"
@ -4689,9 +4691,9 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:178
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:242
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91
msgid "No books selected" msgid "No books selected"
msgstr "لم تختر اي كتاب" msgstr "لم تختر اي كتاب"
@ -5122,7 +5124,7 @@ msgid "Create a catalog of the books in your calibre library"
msgstr "إنشاء فهرس الكتب في مكتبة العيار الخاص" msgstr "إنشاء فهرس الكتب في مكتبة العيار الخاص"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:612 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:614
msgid "Cannot convert" msgid "Cannot convert"
msgstr "لا يمكن تحويله" msgstr "لا يمكن تحويله"
@ -5495,20 +5497,20 @@ msgid ""
"details\" to see which books." "details\" to see which books."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
msgid "Download complete" msgid "Download complete"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880
msgid "Download log" msgid "Download log"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:149 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:147
msgid "Some books changed" msgid "Some books changed"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:148
msgid "" msgid ""
"The metadata for some books in your library has changed since you started " "The metadata for some books in your library has changed since you started "
"the download. If you proceed, some of those changes may be overwritten. " "the download. If you proceed, some of those changes may be overwritten. "
@ -5519,27 +5521,27 @@ msgstr ""
"قدما، قد يكون بعض هذه التغييرات يمكن الكتابة. انقر على زر \"عرض التفاصيل\" " "قدما، قد يكون بعض هذه التغييرات يمكن الكتابة. انقر على زر \"عرض التفاصيل\" "
"لرؤية قائمة من الكتب تغيرت. هل تريد المتابعة؟" "لرؤية قائمة من الكتب تغيرت. هل تريد المتابعة؟"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:179 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:177
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:243 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:241
msgid "Cannot edit metadata" msgid "Cannot edit metadata"
msgstr "لا يمكن تحرير الميتاداتا" msgstr "لا يمكن تحرير الميتاداتا"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:278
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:283 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281
msgid "Cannot merge books" msgid "Cannot merge books"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:284 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:282
msgid "At least two books must be selected for merging" msgid "At least two books must be selected for merging"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:287 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:285
msgid "" msgid ""
"You are about to merge more than 5 books. Are you <b>sure</b> you want to " "You are about to merge more than 5 books. Are you <b>sure</b> you want to "
"proceed?" "proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:294
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be added to the " "Book formats and metadata from the selected books will be added to the "
@ -5548,7 +5550,7 @@ msgid ""
"changed.<br><br>Please confirm you want to proceed." "changed.<br><br>Please confirm you want to proceed."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:306
#, python-format #, python-format
msgid "" msgid ""
"Book formats from the selected books will be merged into the <b>first " "Book formats from the selected books will be merged into the <b>first "
@ -5561,7 +5563,7 @@ msgid ""
"calibre library.<br><br> Are you <b>sure</b> you want to proceed?" "calibre library.<br><br> Are you <b>sure</b> you want to proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:324 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:322
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be merged into the " "Book formats and metadata from the selected books will be merged into the "
@ -5573,15 +5575,15 @@ msgid ""
"Are you <b>sure</b> you want to proceed?" "Are you <b>sure</b> you want to proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:499 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:497
msgid "Applying changed metadata" msgid "Applying changed metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:586
msgid "Some failures" msgid "Some failures"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:589 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:587
msgid "" msgid ""
"Failed to apply updated metadata for some books in your library. Click " "Failed to apply updated metadata for some books in your library. Click "
"\"Show Details\" to see details." "\"Show Details\" to see details."
@ -6278,17 +6280,17 @@ msgstr ""
msgid "Remove Cover" msgid "Remove Cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:358 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359
msgid "Double-click to open Book Details window" msgid "Double-click to open Book Details window"
msgstr "انقر نقرا مزدوجا لفتح نافذة تفاصيل الكتاب" msgstr "انقر نقرا مزدوجا لفتح نافذة تفاصيل الكتاب"
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295
msgid "Path" msgid "Path"
msgstr "المسار" msgstr "المسار"
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:361
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109
#, python-format #, python-format
msgid "Cover size: %(width)d x %(height)d" msgid "Cover size: %(width)d x %(height)d"
@ -7356,33 +7358,44 @@ msgid ""
"possible." "possible."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:101
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:186
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916
msgid "Choose cover for " msgid "Choose cover for "
msgstr "إختار الغلاف لـ " msgstr "إختار الغلاف لـ "
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:193
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924
msgid "Cannot read" msgid "Cannot read"
msgstr "لا يمكن القراءة" msgstr "لا يمكن القراءة"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:194
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925
msgid "You do not have permission to read the file: " msgid "You do not have permission to read the file: "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:202
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:209
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933
msgid "Error reading file" msgid "Error reading file"
msgstr "خطأ في قراءة الملف" msgstr "خطأ في قراءة الملف"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934
msgid "<p>There was an error reading from file: <br /><b>" msgid "<p>There was an error reading from file: <br /><b>"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:210
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944
msgid " is not a valid picture" msgid " is not a valid picture"
msgstr " ليست صورة صالحة" msgstr " ليست صورة صالحة"
@ -7807,7 +7820,7 @@ msgid "&Remove"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119
msgid "Load a listof expression from a previously saved file" msgid "Load a list of expressions from a previously saved file"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120
@ -7815,7 +7828,7 @@ msgid "&Load"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121
msgid "Save this list of expression so that you can re-use it easily" msgid "Save this list of expressions so that you can re-use it easily"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122
@ -9154,7 +9167,7 @@ msgid "Author names cannot contain & characters."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:138 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137
msgid "Manage authors" msgid "Manage authors"
msgstr "" msgstr ""
@ -9242,27 +9255,32 @@ msgid "&Hide all jobs"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:296
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:51
msgid "&Copy to clipboard" msgid "&Copy to clipboard"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:292 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:299
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:54
msgid "Show &details" msgid "Show &details"
msgstr "اظهار و تفاصيل" msgstr "اظهار و تفاصيل"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:293 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:300
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:55
msgid "Hide &details" msgid "Hide &details"
msgstr "إخفاء و تفاصيل" msgstr "إخفاء و تفاصيل"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:304
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:59
msgid "Show detailed information about this error" msgid "Show detailed information about this error"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:318 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:325
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:78
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588
msgid "Copied" msgid "Copied"
msgstr "" msgstr ""
@ -9273,10 +9291,11 @@ msgstr ""
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48
msgid "View log" msgid "View log"
msgstr "" msgstr ""
@ -9289,7 +9308,7 @@ msgid "Standard metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:906 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:915
msgid "Custom metadata" msgid "Custom metadata"
msgstr "" msgstr ""
@ -9470,7 +9489,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:191
msgid "Open Tag Editor" msgid "Open Tag Editor"
msgstr "فتح محرر الوسوم" msgstr "فتح محرر الوسوم"
@ -9614,13 +9633,13 @@ msgid "Set from &ebook file(s)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:545 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:554
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:711 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:720
msgid "&Basic metadata" msgid "&Basic metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:552 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:561
msgid "&Custom metadata" msgid "&Custom metadata"
msgstr "" msgstr ""
@ -11696,7 +11715,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:439
msgid "Permission denied" msgid "Permission denied"
msgstr "" msgstr ""
@ -11930,7 +11949,7 @@ msgid "Bad database location %r. calibre will now quit."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:515 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:517
msgid "Corrupted database" msgid "Corrupted database"
msgstr "تلف قاعدة البيانات" msgstr "تلف قاعدة البيانات"
@ -12007,7 +12026,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:441 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440
#, python-format #, python-format
msgid "Could not open %s. Is it being used by another program?" msgid "Could not open %s. Is it being used by another program?"
msgstr "" msgstr ""
@ -12159,15 +12178,6 @@ msgstr ""
msgid "Could not change cover as the image is invalid." msgid "Could not change cover as the image is invalid."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142
msgid "Tags changed" msgid "Tags changed"
msgstr "" msgstr ""
@ -12306,11 +12316,11 @@ msgstr ""
msgid "Downloaded metadata fields" msgid "Downloaded metadata fields"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:31
msgid "Edit Metadata" msgid "Edit Metadata"
msgstr "تحرير البيانات الوصفية" msgstr "تحرير البيانات الوصفية"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:66 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:65
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219
@ -12318,21 +12328,21 @@ msgstr "تحرير البيانات الوصفية"
msgid "Next" msgid "Next"
msgstr "التالي" msgstr "التالي"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:69
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393
msgid "Previous" msgid "Previous"
msgstr "السابق" msgstr "السابق"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:118
msgid "" msgid ""
"Automatically create the title sort entry based on the current title entry.\n" "Automatically create the title sort entry based on the current title entry.\n"
"Using this button to create title sort will change title sort from red to " "Using this button to create title sort will change title sort from red to "
"green." "green."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:129
msgid "" msgid ""
"Automatically create the author sort entry based on the current author " "Automatically create the author sort entry based on the current author "
"entry. Using this button to create author sort will change author sort from " "entry. Using this button to create author sort will change author sort from "
@ -12340,111 +12350,111 @@ msgid ""
"Click and hold on the button to see it." "Click and hold on the button to see it."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:135
msgid "Set author sort from author" msgid "Set author sort from author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136
msgid "Set author from author sort" msgid "Set author from author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:140 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:139
msgid "Copy author to author sort" msgid "Copy author to author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:141
msgid "Copy author sort to author" msgid "Copy author sort to author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:152
msgid "Swap the author and title" msgid "Swap the author and title"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:158
msgid "" msgid ""
"Manage authors. Use to rename authors and correct individual author's sort " "Manage authors. Use to rename authors and correct individual author's sort "
"values" "values"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:165
msgid "Clear series" msgid "Clear series"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:201 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:200
msgid "Clear Ids" msgid "Clear Ids"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:205 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:204
msgid "" msgid ""
"Paste the contents of the clipboard into the identifiers box prefixed with " "Paste the contents of the clipboard into the identifiers box prefixed with "
"isbn:" "isbn:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:218 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:217
msgid "&Download metadata" msgid "&Download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:230 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:229
msgid "Configure download metadata" msgid "Configure download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:234 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:233
msgid "Change how calibre downloads metadata" msgid "Change how calibre downloads metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:295
#, python-format #, python-format
msgid " [%(num)d of %(tot)d]" msgid " [%(num)d of %(tot)d]"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:326
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:333
msgid "Could not read cover" msgid "Could not read cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:328 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327
#, python-format #, python-format
msgid "Could not read cover from %s format" msgid "Could not read cover from %s format"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334
#, python-format #, python-format
msgid "The cover in the %s format is invalid" msgid "The cover in the %s format is invalid"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:493 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:502
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:498 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:507
#, python-format #, python-format
msgid "Save changes and edit the metadata of %s" msgid "Save changes and edit the metadata of %s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:595 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:604
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:800 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:809
msgid "Change cover" msgid "Change cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:654 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:663
msgid "Co&mments" msgid "Co&mments"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:694 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:703
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:841 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:850
msgid "&Metadata" msgid "&Metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:699 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:708
msgid "&Cover and formats" msgid "&Cover and formats"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:769 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:778
msgid "C&ustom metadata" msgid "C&ustom metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:781 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:790
msgid "&Comments" msgid "&Comments"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:847 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:856
msgid "Basic metadata" msgid "Basic metadata"
msgstr "" msgstr ""
@ -14456,7 +14466,7 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:452 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:454
msgid "Failed to start content server" msgid "Failed to start content server"
msgstr "فشل في تشغيل خادم المحتوى" msgstr "فشل في تشغيل خادم المحتوى"
@ -15727,31 +15737,31 @@ msgid ""
"reconvert them?" "reconvert them?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205
msgid "&Donate to support calibre" msgid "&Donate to support calibre"
msgstr "تبرع& لدعم كاليبر" msgstr "تبرع& لدعم كاليبر"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241
msgid "&Restore" msgid "&Restore"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246
msgid "&Eject connected device" msgid "&Eject connected device"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250
msgid "Quit calibre" msgid "Quit calibre"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263
msgid "Clear the current search" msgid "Clear the current search"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:363 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:365
msgid "Debug mode" msgid "Debug mode"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:364 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366
#, python-format #, python-format
msgid "" msgid ""
"You have started calibre in debug mode. After you quit calibre, the debug " "You have started calibre in debug mode. After you quit calibre, the debug "
@ -15759,11 +15769,11 @@ msgid ""
"automatically." "automatically."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:386
msgid "Failed to start Content Server" msgid "Failed to start Content Server"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:387
#, python-format #, python-format
msgid "" msgid ""
"Could not start the content server. Error:\n" "Could not start the content server. Error:\n"
@ -15771,7 +15781,7 @@ msgid ""
"%s" "%s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:516 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:518
#, python-format #, python-format
msgid "" msgid ""
"The library database at %s appears to be corrupted. Do you want calibre to " "The library database at %s appears to be corrupted. Do you want calibre to "
@ -15779,34 +15789,34 @@ msgid ""
"successful." "successful."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:600 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:602
msgid "Conversion Error" msgid "Conversion Error"
msgstr "خطأ في التحويل" msgstr "خطأ في التحويل"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625
msgid "Recipe Disabled" msgid "Recipe Disabled"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:639 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:641
msgid "<b>Failed</b>" msgid "<b>Failed</b>"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:675
msgid "There are active jobs. Are you sure you want to quit?" msgid "There are active jobs. Are you sure you want to quit?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:676 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:678
msgid "" msgid ""
" is communicating with the device!<br>\n" " is communicating with the device!<br>\n"
" Quitting may cause corruption on the device.<br>\n" " Quitting may cause corruption on the device.<br>\n"
" Are you sure you want to quit?" " Are you sure you want to quit?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:680 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:682
msgid "Active jobs" msgid "Active jobs"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:749 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:751
msgid "" msgid ""
"will keep running in the system tray. To close it, choose <b>Quit</b> in the " "will keep running in the system tray. To close it, choose <b>Quit</b> in the "
"context menu of the system tray." "context menu of the system tray."

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: calibre\n" "Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-04-20 09:28+0000\n" "POT-Creation-Date: 2012-04-27 05:30+0000\n"
"PO-Revision-Date: 2011-09-26 16:28+0000\n" "PO-Revision-Date: 2011-09-26 16:28+0000\n"
"Last-Translator: Xandru <xandru@softastur.org>\n" "Last-Translator: Xandru <xandru@softastur.org>\n"
"Language-Team: Asturian <ast@li.org>\n" "Language-Team: Asturian <ast@li.org>\n"
@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Launchpad-Export-Date: 2012-04-21 04:42+0000\n" "X-Launchpad-Export-Date: 2012-04-28 04:36+0000\n"
"X-Generator: Launchpad (build 15120)\n" "X-Generator: Launchpad (build 15149)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing" msgid "Does absolutely nothing"
@ -26,8 +26,8 @@ msgstr "Nun fai nada"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106 #: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109 #: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120 #: /home/kovid/work/calibre/src/calibre/db/cache.py:120
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:319 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:321
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:320 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:322
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@ -107,11 +107,13 @@ msgstr "Nun fai nada"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:497 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:318
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:397
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:850 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:838
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360
@ -144,15 +146,15 @@ msgstr "Nun fai nada"
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425
#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:397
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:402 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:400
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:602 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:603
#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:128
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:151 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:157
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56
@ -172,7 +174,7 @@ msgstr "Nun fai nada"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:388
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204
@ -939,21 +941,21 @@ msgstr ""
msgid "Debug log" msgid "Debug log"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:17 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:19
msgid "Communicate with Android phones." msgid "Communicate with Android phones."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:168 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:170
msgid "" msgid ""
"Comma separated list of directories to send e-books to on the device. The " "Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used" "first one that exists will be used"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:259 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:261
msgid "Communicate with S60 phones." msgid "Communicate with S60 phones."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:278 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:280
msgid "Communicate with WebOS tablets." msgid "Communicate with WebOS tablets."
msgstr "" msgstr ""
@ -1069,7 +1071,7 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726 #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:102 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:103
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568
@ -3099,7 +3101,7 @@ msgid "Set the publication date."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539
msgid "Set the book timestamp (used by the date column in calibre)." msgid "Set the book timestamp (no longer used anywhere)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543
@ -3565,7 +3567,7 @@ msgid "Producer"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:934
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245
msgid "Comments" msgid "Comments"
@ -3722,8 +3724,8 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1246
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:946
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover" msgid "Cover"
msgstr "" msgstr ""
@ -3841,74 +3843,75 @@ msgstr ""
msgid "This is an Amazon Topaz book. It cannot be processed." msgid "This is an Amazon Topaz book. It cannot be processed."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:498 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:464
msgid "No details available" msgid "No details available"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
msgid "Title Page" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1248
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199
msgid "Table of Contents" msgid "Table of Contents"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1247
msgid "Title Page"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1249
msgid "Index" msgid "Index"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1250
msgid "Glossary" msgid "Glossary"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1263 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1251
msgid "Acknowledgements" msgid "Acknowledgements"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1264 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1252
msgid "Bibliography" msgid "Bibliography"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1265 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1253
msgid "Colophon" msgid "Colophon"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1266 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1254
msgid "Copyright" msgid "Copyright"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1267 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1255
msgid "Dedication" msgid "Dedication"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1268 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1256
msgid "Epigraph" msgid "Epigraph"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1269 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1257
msgid "Foreword" msgid "Foreword"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1270 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258
msgid "List of Illustrations" msgid "List of Illustrations"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1271 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259
msgid "List of Tables" msgid "List of Tables"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1272 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
msgid "Notes" msgid "Notes"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1273 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261
msgid "Preface" msgid "Preface"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1274 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262
msgid "Main Text" msgid "Main Text"
msgstr "" msgstr ""
@ -4419,9 +4422,9 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:178
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:242
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91
msgid "No books selected" msgid "No books selected"
msgstr "" msgstr ""
@ -4849,7 +4852,7 @@ msgid "Create a catalog of the books in your calibre library"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:612 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:614
msgid "Cannot convert" msgid "Cannot convert"
msgstr "" msgstr ""
@ -5219,20 +5222,20 @@ msgid ""
"details\" to see which books." "details\" to see which books."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
msgid "Download complete" msgid "Download complete"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880
msgid "Download log" msgid "Download log"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:149 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:147
msgid "Some books changed" msgid "Some books changed"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:148
msgid "" msgid ""
"The metadata for some books in your library has changed since you started " "The metadata for some books in your library has changed since you started "
"the download. If you proceed, some of those changes may be overwritten. " "the download. If you proceed, some of those changes may be overwritten. "
@ -5240,27 +5243,27 @@ msgid ""
"proceed?" "proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:179 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:177
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:243 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:241
msgid "Cannot edit metadata" msgid "Cannot edit metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:278
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:283 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281
msgid "Cannot merge books" msgid "Cannot merge books"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:284 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:282
msgid "At least two books must be selected for merging" msgid "At least two books must be selected for merging"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:287 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:285
msgid "" msgid ""
"You are about to merge more than 5 books. Are you <b>sure</b> you want to " "You are about to merge more than 5 books. Are you <b>sure</b> you want to "
"proceed?" "proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:294
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be added to the " "Book formats and metadata from the selected books will be added to the "
@ -5269,7 +5272,7 @@ msgid ""
"changed.<br><br>Please confirm you want to proceed." "changed.<br><br>Please confirm you want to proceed."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:306
#, python-format #, python-format
msgid "" msgid ""
"Book formats from the selected books will be merged into the <b>first " "Book formats from the selected books will be merged into the <b>first "
@ -5282,7 +5285,7 @@ msgid ""
"calibre library.<br><br> Are you <b>sure</b> you want to proceed?" "calibre library.<br><br> Are you <b>sure</b> you want to proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:324 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:322
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be merged into the " "Book formats and metadata from the selected books will be merged into the "
@ -5294,15 +5297,15 @@ msgid ""
"Are you <b>sure</b> you want to proceed?" "Are you <b>sure</b> you want to proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:499 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:497
msgid "Applying changed metadata" msgid "Applying changed metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:586
msgid "Some failures" msgid "Some failures"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:589 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:587
msgid "" msgid ""
"Failed to apply updated metadata for some books in your library. Click " "Failed to apply updated metadata for some books in your library. Click "
"\"Show Details\" to see details." "\"Show Details\" to see details."
@ -5997,17 +6000,17 @@ msgstr ""
msgid "Remove Cover" msgid "Remove Cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:358 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359
msgid "Double-click to open Book Details window" msgid "Double-click to open Book Details window"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295
msgid "Path" msgid "Path"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:361
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109
#, python-format #, python-format
msgid "Cover size: %(width)d x %(height)d" msgid "Cover size: %(width)d x %(height)d"
@ -7075,33 +7078,44 @@ msgid ""
"possible." "possible."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:101
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:186
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916
msgid "Choose cover for " msgid "Choose cover for "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:193
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924
msgid "Cannot read" msgid "Cannot read"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:194
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925
msgid "You do not have permission to read the file: " msgid "You do not have permission to read the file: "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:202
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:209
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933
msgid "Error reading file" msgid "Error reading file"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934
msgid "<p>There was an error reading from file: <br /><b>" msgid "<p>There was an error reading from file: <br /><b>"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:210
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944
msgid " is not a valid picture" msgid " is not a valid picture"
msgstr "" msgstr ""
@ -7524,7 +7538,7 @@ msgid "&Remove"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119
msgid "Load a listof expression from a previously saved file" msgid "Load a list of expressions from a previously saved file"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120
@ -7532,7 +7546,7 @@ msgid "&Load"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121
msgid "Save this list of expression so that you can re-use it easily" msgid "Save this list of expressions so that you can re-use it easily"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122
@ -8871,7 +8885,7 @@ msgid "Author names cannot contain & characters."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:138 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137
msgid "Manage authors" msgid "Manage authors"
msgstr "" msgstr ""
@ -8959,27 +8973,32 @@ msgid "&Hide all jobs"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:296
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:51
msgid "&Copy to clipboard" msgid "&Copy to clipboard"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:292 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:299
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:54
msgid "Show &details" msgid "Show &details"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:293 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:300
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:55
msgid "Hide &details" msgid "Hide &details"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:304
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:59
msgid "Show detailed information about this error" msgid "Show detailed information about this error"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:318 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:325
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:78
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588
msgid "Copied" msgid "Copied"
msgstr "" msgstr ""
@ -8990,10 +9009,11 @@ msgstr ""
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48
msgid "View log" msgid "View log"
msgstr "" msgstr ""
@ -9006,7 +9026,7 @@ msgid "Standard metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:906 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:915
msgid "Custom metadata" msgid "Custom metadata"
msgstr "" msgstr ""
@ -9187,7 +9207,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:191
msgid "Open Tag Editor" msgid "Open Tag Editor"
msgstr "" msgstr ""
@ -9331,13 +9351,13 @@ msgid "Set from &ebook file(s)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:545 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:554
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:711 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:720
msgid "&Basic metadata" msgid "&Basic metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:552 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:561
msgid "&Custom metadata" msgid "&Custom metadata"
msgstr "" msgstr ""
@ -11406,7 +11426,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:439
msgid "Permission denied" msgid "Permission denied"
msgstr "" msgstr ""
@ -11640,7 +11660,7 @@ msgid "Bad database location %r. calibre will now quit."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:515 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:517
msgid "Corrupted database" msgid "Corrupted database"
msgstr "" msgstr ""
@ -11717,7 +11737,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:441 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440
#, python-format #, python-format
msgid "Could not open %s. Is it being used by another program?" msgid "Could not open %s. Is it being used by another program?"
msgstr "" msgstr ""
@ -11869,15 +11889,6 @@ msgstr ""
msgid "Could not change cover as the image is invalid." msgid "Could not change cover as the image is invalid."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142
msgid "Tags changed" msgid "Tags changed"
msgstr "" msgstr ""
@ -12016,11 +12027,11 @@ msgstr ""
msgid "Downloaded metadata fields" msgid "Downloaded metadata fields"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:31
msgid "Edit Metadata" msgid "Edit Metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:66 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:65
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219
@ -12028,21 +12039,21 @@ msgstr ""
msgid "Next" msgid "Next"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:69
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393
msgid "Previous" msgid "Previous"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:118
msgid "" msgid ""
"Automatically create the title sort entry based on the current title entry.\n" "Automatically create the title sort entry based on the current title entry.\n"
"Using this button to create title sort will change title sort from red to " "Using this button to create title sort will change title sort from red to "
"green." "green."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:129
msgid "" msgid ""
"Automatically create the author sort entry based on the current author " "Automatically create the author sort entry based on the current author "
"entry. Using this button to create author sort will change author sort from " "entry. Using this button to create author sort will change author sort from "
@ -12050,111 +12061,111 @@ msgid ""
"Click and hold on the button to see it." "Click and hold on the button to see it."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:135
msgid "Set author sort from author" msgid "Set author sort from author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136
msgid "Set author from author sort" msgid "Set author from author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:140 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:139
msgid "Copy author to author sort" msgid "Copy author to author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:141
msgid "Copy author sort to author" msgid "Copy author sort to author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:152
msgid "Swap the author and title" msgid "Swap the author and title"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:158
msgid "" msgid ""
"Manage authors. Use to rename authors and correct individual author's sort " "Manage authors. Use to rename authors and correct individual author's sort "
"values" "values"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:165
msgid "Clear series" msgid "Clear series"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:201 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:200
msgid "Clear Ids" msgid "Clear Ids"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:205 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:204
msgid "" msgid ""
"Paste the contents of the clipboard into the identifiers box prefixed with " "Paste the contents of the clipboard into the identifiers box prefixed with "
"isbn:" "isbn:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:218 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:217
msgid "&Download metadata" msgid "&Download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:230 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:229
msgid "Configure download metadata" msgid "Configure download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:234 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:233
msgid "Change how calibre downloads metadata" msgid "Change how calibre downloads metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:295
#, python-format #, python-format
msgid " [%(num)d of %(tot)d]" msgid " [%(num)d of %(tot)d]"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:326
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:333
msgid "Could not read cover" msgid "Could not read cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:328 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327
#, python-format #, python-format
msgid "Could not read cover from %s format" msgid "Could not read cover from %s format"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334
#, python-format #, python-format
msgid "The cover in the %s format is invalid" msgid "The cover in the %s format is invalid"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:493 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:502
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:498 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:507
#, python-format #, python-format
msgid "Save changes and edit the metadata of %s" msgid "Save changes and edit the metadata of %s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:595 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:604
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:800 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:809
msgid "Change cover" msgid "Change cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:654 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:663
msgid "Co&mments" msgid "Co&mments"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:694 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:703
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:841 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:850
msgid "&Metadata" msgid "&Metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:699 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:708
msgid "&Cover and formats" msgid "&Cover and formats"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:769 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:778
msgid "C&ustom metadata" msgid "C&ustom metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:781 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:790
msgid "&Comments" msgid "&Comments"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:847 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:856
msgid "Basic metadata" msgid "Basic metadata"
msgstr "" msgstr ""
@ -14146,7 +14157,7 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:452 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:454
msgid "Failed to start content server" msgid "Failed to start content server"
msgstr "" msgstr ""
@ -15416,31 +15427,31 @@ msgid ""
"reconvert them?" "reconvert them?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205
msgid "&Donate to support calibre" msgid "&Donate to support calibre"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241
msgid "&Restore" msgid "&Restore"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246
msgid "&Eject connected device" msgid "&Eject connected device"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250
msgid "Quit calibre" msgid "Quit calibre"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263
msgid "Clear the current search" msgid "Clear the current search"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:363 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:365
msgid "Debug mode" msgid "Debug mode"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:364 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366
#, python-format #, python-format
msgid "" msgid ""
"You have started calibre in debug mode. After you quit calibre, the debug " "You have started calibre in debug mode. After you quit calibre, the debug "
@ -15448,11 +15459,11 @@ msgid ""
"automatically." "automatically."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:386
msgid "Failed to start Content Server" msgid "Failed to start Content Server"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:387
#, python-format #, python-format
msgid "" msgid ""
"Could not start the content server. Error:\n" "Could not start the content server. Error:\n"
@ -15460,7 +15471,7 @@ msgid ""
"%s" "%s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:516 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:518
#, python-format #, python-format
msgid "" msgid ""
"The library database at %s appears to be corrupted. Do you want calibre to " "The library database at %s appears to be corrupted. Do you want calibre to "
@ -15468,34 +15479,34 @@ msgid ""
"successful." "successful."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:600 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:602
msgid "Conversion Error" msgid "Conversion Error"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625
msgid "Recipe Disabled" msgid "Recipe Disabled"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:639 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:641
msgid "<b>Failed</b>" msgid "<b>Failed</b>"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:675
msgid "There are active jobs. Are you sure you want to quit?" msgid "There are active jobs. Are you sure you want to quit?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:676 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:678
msgid "" msgid ""
" is communicating with the device!<br>\n" " is communicating with the device!<br>\n"
" Quitting may cause corruption on the device.<br>\n" " Quitting may cause corruption on the device.<br>\n"
" Are you sure you want to quit?" " Are you sure you want to quit?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:680 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:682
msgid "Active jobs" msgid "Active jobs"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:749 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:751
msgid "" msgid ""
"will keep running in the system tray. To close it, choose <b>Quit</b> in the " "will keep running in the system tray. To close it, choose <b>Quit</b> in the "
"context menu of the system tray." "context menu of the system tray."

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: calibre\n" "Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-04-20 09:28+0000\n" "POT-Creation-Date: 2012-04-27 05:30+0000\n"
"PO-Revision-Date: 2011-11-22 11:21+0000\n" "PO-Revision-Date: 2011-11-22 11:21+0000\n"
"Last-Translator: Elvin Haci <Unknown>\n" "Last-Translator: Elvin Haci <Unknown>\n"
"Language-Team: Azerbaijani <az@li.org>\n" "Language-Team: Azerbaijani <az@li.org>\n"
@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Launchpad-Export-Date: 2012-04-21 04:42+0000\n" "X-Launchpad-Export-Date: 2012-04-28 04:36+0000\n"
"X-Generator: Launchpad (build 15120)\n" "X-Generator: Launchpad (build 15149)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing" msgid "Does absolutely nothing"
@ -26,8 +26,8 @@ msgstr "Heç bir şey etmir"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106 #: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109 #: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120 #: /home/kovid/work/calibre/src/calibre/db/cache.py:120
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:319 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:321
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:320 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:322
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@ -107,11 +107,13 @@ msgstr "Heç bir şey etmir"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:497 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:318
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:397
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:850 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:838
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360
@ -144,15 +146,15 @@ msgstr "Heç bir şey etmir"
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425
#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:397
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:402 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:400
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:602 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:603
#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:128
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:151 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:157
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56
@ -172,7 +174,7 @@ msgstr "Heç bir şey etmir"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:388
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204
@ -937,21 +939,21 @@ msgstr ""
msgid "Debug log" msgid "Debug log"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:17 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:19
msgid "Communicate with Android phones." msgid "Communicate with Android phones."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:168 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:170
msgid "" msgid ""
"Comma separated list of directories to send e-books to on the device. The " "Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used" "first one that exists will be used"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:259 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:261
msgid "Communicate with S60 phones." msgid "Communicate with S60 phones."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:278 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:280
msgid "Communicate with WebOS tablets." msgid "Communicate with WebOS tablets."
msgstr "" msgstr ""
@ -1067,7 +1069,7 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726 #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:102 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:103
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568
@ -3097,7 +3099,7 @@ msgid "Set the publication date."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539
msgid "Set the book timestamp (used by the date column in calibre)." msgid "Set the book timestamp (no longer used anywhere)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543
@ -3563,7 +3565,7 @@ msgid "Producer"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:934
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245
msgid "Comments" msgid "Comments"
@ -3720,8 +3722,8 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1246
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:946
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover" msgid "Cover"
msgstr "" msgstr ""
@ -3839,74 +3841,75 @@ msgstr ""
msgid "This is an Amazon Topaz book. It cannot be processed." msgid "This is an Amazon Topaz book. It cannot be processed."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:498 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:464
msgid "No details available" msgid "No details available"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
msgid "Title Page" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1248
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199
msgid "Table of Contents" msgid "Table of Contents"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1247
msgid "Title Page"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1249
msgid "Index" msgid "Index"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1250
msgid "Glossary" msgid "Glossary"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1263 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1251
msgid "Acknowledgements" msgid "Acknowledgements"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1264 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1252
msgid "Bibliography" msgid "Bibliography"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1265 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1253
msgid "Colophon" msgid "Colophon"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1266 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1254
msgid "Copyright" msgid "Copyright"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1267 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1255
msgid "Dedication" msgid "Dedication"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1268 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1256
msgid "Epigraph" msgid "Epigraph"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1269 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1257
msgid "Foreword" msgid "Foreword"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1270 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258
msgid "List of Illustrations" msgid "List of Illustrations"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1271 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259
msgid "List of Tables" msgid "List of Tables"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1272 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
msgid "Notes" msgid "Notes"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1273 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261
msgid "Preface" msgid "Preface"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1274 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262
msgid "Main Text" msgid "Main Text"
msgstr "" msgstr ""
@ -4417,9 +4420,9 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:178
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:242
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91
msgid "No books selected" msgid "No books selected"
msgstr "" msgstr ""
@ -4847,7 +4850,7 @@ msgid "Create a catalog of the books in your calibre library"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:612 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:614
msgid "Cannot convert" msgid "Cannot convert"
msgstr "" msgstr ""
@ -5217,20 +5220,20 @@ msgid ""
"details\" to see which books." "details\" to see which books."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
msgid "Download complete" msgid "Download complete"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880
msgid "Download log" msgid "Download log"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:149 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:147
msgid "Some books changed" msgid "Some books changed"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:148
msgid "" msgid ""
"The metadata for some books in your library has changed since you started " "The metadata for some books in your library has changed since you started "
"the download. If you proceed, some of those changes may be overwritten. " "the download. If you proceed, some of those changes may be overwritten. "
@ -5238,27 +5241,27 @@ msgid ""
"proceed?" "proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:179 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:177
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:243 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:241
msgid "Cannot edit metadata" msgid "Cannot edit metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:278
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:283 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281
msgid "Cannot merge books" msgid "Cannot merge books"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:284 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:282
msgid "At least two books must be selected for merging" msgid "At least two books must be selected for merging"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:287 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:285
msgid "" msgid ""
"You are about to merge more than 5 books. Are you <b>sure</b> you want to " "You are about to merge more than 5 books. Are you <b>sure</b> you want to "
"proceed?" "proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:294
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be added to the " "Book formats and metadata from the selected books will be added to the "
@ -5267,7 +5270,7 @@ msgid ""
"changed.<br><br>Please confirm you want to proceed." "changed.<br><br>Please confirm you want to proceed."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:306
#, python-format #, python-format
msgid "" msgid ""
"Book formats from the selected books will be merged into the <b>first " "Book formats from the selected books will be merged into the <b>first "
@ -5280,7 +5283,7 @@ msgid ""
"calibre library.<br><br> Are you <b>sure</b> you want to proceed?" "calibre library.<br><br> Are you <b>sure</b> you want to proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:324 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:322
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be merged into the " "Book formats and metadata from the selected books will be merged into the "
@ -5292,15 +5295,15 @@ msgid ""
"Are you <b>sure</b> you want to proceed?" "Are you <b>sure</b> you want to proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:499 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:497
msgid "Applying changed metadata" msgid "Applying changed metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:586
msgid "Some failures" msgid "Some failures"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:589 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:587
msgid "" msgid ""
"Failed to apply updated metadata for some books in your library. Click " "Failed to apply updated metadata for some books in your library. Click "
"\"Show Details\" to see details." "\"Show Details\" to see details."
@ -5995,17 +5998,17 @@ msgstr ""
msgid "Remove Cover" msgid "Remove Cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:358 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359
msgid "Double-click to open Book Details window" msgid "Double-click to open Book Details window"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295
msgid "Path" msgid "Path"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:361
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109
#, python-format #, python-format
msgid "Cover size: %(width)d x %(height)d" msgid "Cover size: %(width)d x %(height)d"
@ -7073,33 +7076,44 @@ msgid ""
"possible." "possible."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:101
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:186
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916
msgid "Choose cover for " msgid "Choose cover for "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:193
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924
msgid "Cannot read" msgid "Cannot read"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:194
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925
msgid "You do not have permission to read the file: " msgid "You do not have permission to read the file: "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:202
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:209
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933
msgid "Error reading file" msgid "Error reading file"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934
msgid "<p>There was an error reading from file: <br /><b>" msgid "<p>There was an error reading from file: <br /><b>"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:210
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944
msgid " is not a valid picture" msgid " is not a valid picture"
msgstr "" msgstr ""
@ -7522,7 +7536,7 @@ msgid "&Remove"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119
msgid "Load a listof expression from a previously saved file" msgid "Load a list of expressions from a previously saved file"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120
@ -7530,7 +7544,7 @@ msgid "&Load"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121
msgid "Save this list of expression so that you can re-use it easily" msgid "Save this list of expressions so that you can re-use it easily"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122
@ -8869,7 +8883,7 @@ msgid "Author names cannot contain & characters."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:138 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137
msgid "Manage authors" msgid "Manage authors"
msgstr "" msgstr ""
@ -8957,27 +8971,32 @@ msgid "&Hide all jobs"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:296
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:51
msgid "&Copy to clipboard" msgid "&Copy to clipboard"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:292 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:299
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:54
msgid "Show &details" msgid "Show &details"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:293 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:300
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:55
msgid "Hide &details" msgid "Hide &details"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:304
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:59
msgid "Show detailed information about this error" msgid "Show detailed information about this error"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:318 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:325
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:78
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588
msgid "Copied" msgid "Copied"
msgstr "" msgstr ""
@ -8988,10 +9007,11 @@ msgstr ""
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48
msgid "View log" msgid "View log"
msgstr "" msgstr ""
@ -9004,7 +9024,7 @@ msgid "Standard metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:906 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:915
msgid "Custom metadata" msgid "Custom metadata"
msgstr "" msgstr ""
@ -9185,7 +9205,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:191
msgid "Open Tag Editor" msgid "Open Tag Editor"
msgstr "" msgstr ""
@ -9329,13 +9349,13 @@ msgid "Set from &ebook file(s)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:545 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:554
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:711 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:720
msgid "&Basic metadata" msgid "&Basic metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:552 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:561
msgid "&Custom metadata" msgid "&Custom metadata"
msgstr "" msgstr ""
@ -11404,7 +11424,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:439
msgid "Permission denied" msgid "Permission denied"
msgstr "" msgstr ""
@ -11638,7 +11658,7 @@ msgid "Bad database location %r. calibre will now quit."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:515 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:517
msgid "Corrupted database" msgid "Corrupted database"
msgstr "" msgstr ""
@ -11715,7 +11735,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:441 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440
#, python-format #, python-format
msgid "Could not open %s. Is it being used by another program?" msgid "Could not open %s. Is it being used by another program?"
msgstr "" msgstr ""
@ -11867,15 +11887,6 @@ msgstr ""
msgid "Could not change cover as the image is invalid." msgid "Could not change cover as the image is invalid."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142
msgid "Tags changed" msgid "Tags changed"
msgstr "" msgstr ""
@ -12014,11 +12025,11 @@ msgstr ""
msgid "Downloaded metadata fields" msgid "Downloaded metadata fields"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:31
msgid "Edit Metadata" msgid "Edit Metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:66 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:65
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219
@ -12026,21 +12037,21 @@ msgstr ""
msgid "Next" msgid "Next"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:69
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393
msgid "Previous" msgid "Previous"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:118
msgid "" msgid ""
"Automatically create the title sort entry based on the current title entry.\n" "Automatically create the title sort entry based on the current title entry.\n"
"Using this button to create title sort will change title sort from red to " "Using this button to create title sort will change title sort from red to "
"green." "green."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:129
msgid "" msgid ""
"Automatically create the author sort entry based on the current author " "Automatically create the author sort entry based on the current author "
"entry. Using this button to create author sort will change author sort from " "entry. Using this button to create author sort will change author sort from "
@ -12048,111 +12059,111 @@ msgid ""
"Click and hold on the button to see it." "Click and hold on the button to see it."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:135
msgid "Set author sort from author" msgid "Set author sort from author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136
msgid "Set author from author sort" msgid "Set author from author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:140 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:139
msgid "Copy author to author sort" msgid "Copy author to author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:141
msgid "Copy author sort to author" msgid "Copy author sort to author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:152
msgid "Swap the author and title" msgid "Swap the author and title"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:158
msgid "" msgid ""
"Manage authors. Use to rename authors and correct individual author's sort " "Manage authors. Use to rename authors and correct individual author's sort "
"values" "values"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:165
msgid "Clear series" msgid "Clear series"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:201 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:200
msgid "Clear Ids" msgid "Clear Ids"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:205 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:204
msgid "" msgid ""
"Paste the contents of the clipboard into the identifiers box prefixed with " "Paste the contents of the clipboard into the identifiers box prefixed with "
"isbn:" "isbn:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:218 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:217
msgid "&Download metadata" msgid "&Download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:230 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:229
msgid "Configure download metadata" msgid "Configure download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:234 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:233
msgid "Change how calibre downloads metadata" msgid "Change how calibre downloads metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:295
#, python-format #, python-format
msgid " [%(num)d of %(tot)d]" msgid " [%(num)d of %(tot)d]"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:326
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:333
msgid "Could not read cover" msgid "Could not read cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:328 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327
#, python-format #, python-format
msgid "Could not read cover from %s format" msgid "Could not read cover from %s format"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334
#, python-format #, python-format
msgid "The cover in the %s format is invalid" msgid "The cover in the %s format is invalid"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:493 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:502
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:498 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:507
#, python-format #, python-format
msgid "Save changes and edit the metadata of %s" msgid "Save changes and edit the metadata of %s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:595 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:604
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:800 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:809
msgid "Change cover" msgid "Change cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:654 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:663
msgid "Co&mments" msgid "Co&mments"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:694 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:703
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:841 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:850
msgid "&Metadata" msgid "&Metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:699 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:708
msgid "&Cover and formats" msgid "&Cover and formats"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:769 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:778
msgid "C&ustom metadata" msgid "C&ustom metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:781 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:790
msgid "&Comments" msgid "&Comments"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:847 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:856
msgid "Basic metadata" msgid "Basic metadata"
msgstr "" msgstr ""
@ -14144,7 +14155,7 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:452 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:454
msgid "Failed to start content server" msgid "Failed to start content server"
msgstr "" msgstr ""
@ -15414,31 +15425,31 @@ msgid ""
"reconvert them?" "reconvert them?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205
msgid "&Donate to support calibre" msgid "&Donate to support calibre"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241
msgid "&Restore" msgid "&Restore"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246
msgid "&Eject connected device" msgid "&Eject connected device"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250
msgid "Quit calibre" msgid "Quit calibre"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263
msgid "Clear the current search" msgid "Clear the current search"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:363 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:365
msgid "Debug mode" msgid "Debug mode"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:364 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366
#, python-format #, python-format
msgid "" msgid ""
"You have started calibre in debug mode. After you quit calibre, the debug " "You have started calibre in debug mode. After you quit calibre, the debug "
@ -15446,11 +15457,11 @@ msgid ""
"automatically." "automatically."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:386
msgid "Failed to start Content Server" msgid "Failed to start Content Server"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:387
#, python-format #, python-format
msgid "" msgid ""
"Could not start the content server. Error:\n" "Could not start the content server. Error:\n"
@ -15458,7 +15469,7 @@ msgid ""
"%s" "%s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:516 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:518
#, python-format #, python-format
msgid "" msgid ""
"The library database at %s appears to be corrupted. Do you want calibre to " "The library database at %s appears to be corrupted. Do you want calibre to "
@ -15466,34 +15477,34 @@ msgid ""
"successful." "successful."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:600 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:602
msgid "Conversion Error" msgid "Conversion Error"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625
msgid "Recipe Disabled" msgid "Recipe Disabled"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:639 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:641
msgid "<b>Failed</b>" msgid "<b>Failed</b>"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:675
msgid "There are active jobs. Are you sure you want to quit?" msgid "There are active jobs. Are you sure you want to quit?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:676 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:678
msgid "" msgid ""
" is communicating with the device!<br>\n" " is communicating with the device!<br>\n"
" Quitting may cause corruption on the device.<br>\n" " Quitting may cause corruption on the device.<br>\n"
" Are you sure you want to quit?" " Are you sure you want to quit?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:680 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:682
msgid "Active jobs" msgid "Active jobs"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:749 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:751
msgid "" msgid ""
"will keep running in the system tray. To close it, choose <b>Quit</b> in the " "will keep running in the system tray. To close it, choose <b>Quit</b> in the "
"context menu of the system tray." "context menu of the system tray."

View File

@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: calibre 0.4.51\n" "Project-Id-Version: calibre 0.4.51\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-04-20 09:28+0000\n" "POT-Creation-Date: 2012-04-27 05:30+0000\n"
"PO-Revision-Date: 2011-09-18 08:58+0000\n" "PO-Revision-Date: 2011-09-18 08:58+0000\n"
"Last-Translator: Nelly Hoang <Unknown>\n" "Last-Translator: Nelly Hoang <Unknown>\n"
"Language-Team: bg\n" "Language-Team: bg\n"
@ -14,8 +14,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Launchpad-Export-Date: 2012-04-21 04:43+0000\n" "X-Launchpad-Export-Date: 2012-04-28 04:38+0000\n"
"X-Generator: Launchpad (build 15120)\n" "X-Generator: Launchpad (build 15149)\n"
"Generated-By: pygettext.py 1.5\n" "Generated-By: pygettext.py 1.5\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
@ -26,8 +26,8 @@ msgstr "Не прави абсолютно нищо"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106 #: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109 #: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120 #: /home/kovid/work/calibre/src/calibre/db/cache.py:120
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:319 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:321
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:320 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:322
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@ -107,11 +107,13 @@ msgstr "Не прави абсолютно нищо"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:497 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:318
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:397
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:850 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:838
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360
@ -144,15 +146,15 @@ msgstr "Не прави абсолютно нищо"
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425
#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:397
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:402 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:400
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:602 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:603
#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:128
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:151 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:157
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56
@ -172,7 +174,7 @@ msgstr "Не прави абсолютно нищо"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:388
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204
@ -985,11 +987,11 @@ msgstr ""
msgid "Debug log" msgid "Debug log"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:17 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:19
msgid "Communicate with Android phones." msgid "Communicate with Android phones."
msgstr "Комуникирай с Android устройства" msgstr "Комуникирай с Android устройства"
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:168 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:170
msgid "" msgid ""
"Comma separated list of directories to send e-books to on the device. The " "Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used" "first one that exists will be used"
@ -997,11 +999,11 @@ msgstr ""
"Списък с деректориите за изпращане на електронни книги на устройството, " "Списък с деректориите за изпращане на електронни книги на устройството, "
"разделен със запетайки. Ще бъде използван първият съществуващ." "разделен със запетайки. Ще бъде използван първият съществуващ."
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:259 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:261
msgid "Communicate with S60 phones." msgid "Communicate with S60 phones."
msgstr "Комуникирай със S60 устройства" msgstr "Комуникирай със S60 устройства"
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:278 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:280
msgid "Communicate with WebOS tablets." msgid "Communicate with WebOS tablets."
msgstr "Сподели с WebOS таблети" msgstr "Сподели с WebOS таблети"
@ -1129,7 +1131,7 @@ msgstr ""
"Натиснете \"Show Details\", за да видите списъка." "Натиснете \"Show Details\", за да видите списъка."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726 #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:102 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:103
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568
@ -3172,7 +3174,7 @@ msgid "Set the publication date."
msgstr "Задаване на датата на публикуване." msgstr "Задаване на датата на публикуване."
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539
msgid "Set the book timestamp (used by the date column in calibre)." msgid "Set the book timestamp (no longer used anywhere)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543
@ -3641,7 +3643,7 @@ msgid "Producer"
msgstr "Производител" msgstr "Производител"
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:934
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245
msgid "Comments" msgid "Comments"
@ -3798,8 +3800,8 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1246
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:946
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover" msgid "Cover"
msgstr "Корица" msgstr "Корица"
@ -3917,74 +3919,75 @@ msgstr ""
msgid "This is an Amazon Topaz book. It cannot be processed." msgid "This is an Amazon Topaz book. It cannot be processed."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:498 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:464
msgid "No details available" msgid "No details available"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
msgid "Title Page" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1248
msgstr "Заглавна страница"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199
msgid "Table of Contents" msgid "Table of Contents"
msgstr "Съдържание" msgstr "Съдържание"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1247
msgid "Title Page"
msgstr "Заглавна страница"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1249
msgid "Index" msgid "Index"
msgstr "Индекс" msgstr "Индекс"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1250
msgid "Glossary" msgid "Glossary"
msgstr "Речник" msgstr "Речник"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1263 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1251
msgid "Acknowledgements" msgid "Acknowledgements"
msgstr "Благодарности" msgstr "Благодарности"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1264 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1252
msgid "Bibliography" msgid "Bibliography"
msgstr "Библиография" msgstr "Библиография"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1265 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1253
msgid "Colophon" msgid "Colophon"
msgstr "Послеслов" msgstr "Послеслов"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1266 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1254
msgid "Copyright" msgid "Copyright"
msgstr "Авторски права" msgstr "Авторски права"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1267 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1255
msgid "Dedication" msgid "Dedication"
msgstr "Посвещение" msgstr "Посвещение"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1268 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1256
msgid "Epigraph" msgid "Epigraph"
msgstr "Епиграф" msgstr "Епиграф"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1269 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1257
msgid "Foreword" msgid "Foreword"
msgstr "Предисловие" msgstr "Предисловие"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1270 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258
msgid "List of Illustrations" msgid "List of Illustrations"
msgstr "Списък на Илюстрации" msgstr "Списък на Илюстрации"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1271 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259
msgid "List of Tables" msgid "List of Tables"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1272 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
msgid "Notes" msgid "Notes"
msgstr "Бележки" msgstr "Бележки"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1273 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261
msgid "Preface" msgid "Preface"
msgstr "Предговор" msgstr "Предговор"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1274 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262
msgid "Main Text" msgid "Main Text"
msgstr "Основен текст" msgstr "Основен текст"
@ -4495,9 +4498,9 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:178
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:242
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91
msgid "No books selected" msgid "No books selected"
msgstr "Не са избрани книги" msgstr "Не са избрани книги"
@ -4925,7 +4928,7 @@ msgid "Create a catalog of the books in your calibre library"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:612 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:614
msgid "Cannot convert" msgid "Cannot convert"
msgstr "Не може да се конвертира" msgstr "Не може да се конвертира"
@ -5295,20 +5298,20 @@ msgid ""
"details\" to see which books." "details\" to see which books."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
msgid "Download complete" msgid "Download complete"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880
msgid "Download log" msgid "Download log"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:149 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:147
msgid "Some books changed" msgid "Some books changed"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:148
msgid "" msgid ""
"The metadata for some books in your library has changed since you started " "The metadata for some books in your library has changed since you started "
"the download. If you proceed, some of those changes may be overwritten. " "the download. If you proceed, some of those changes may be overwritten. "
@ -5316,27 +5319,27 @@ msgid ""
"proceed?" "proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:179 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:177
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:243 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:241
msgid "Cannot edit metadata" msgid "Cannot edit metadata"
msgstr "Не може да се редактират метаданните" msgstr "Не може да се редактират метаданните"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:278
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:283 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281
msgid "Cannot merge books" msgid "Cannot merge books"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:284 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:282
msgid "At least two books must be selected for merging" msgid "At least two books must be selected for merging"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:287 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:285
msgid "" msgid ""
"You are about to merge more than 5 books. Are you <b>sure</b> you want to " "You are about to merge more than 5 books. Are you <b>sure</b> you want to "
"proceed?" "proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:294
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be added to the " "Book formats and metadata from the selected books will be added to the "
@ -5345,7 +5348,7 @@ msgid ""
"changed.<br><br>Please confirm you want to proceed." "changed.<br><br>Please confirm you want to proceed."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:306
#, python-format #, python-format
msgid "" msgid ""
"Book formats from the selected books will be merged into the <b>first " "Book formats from the selected books will be merged into the <b>first "
@ -5358,7 +5361,7 @@ msgid ""
"calibre library.<br><br> Are you <b>sure</b> you want to proceed?" "calibre library.<br><br> Are you <b>sure</b> you want to proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:324 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:322
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be merged into the " "Book formats and metadata from the selected books will be merged into the "
@ -5370,15 +5373,15 @@ msgid ""
"Are you <b>sure</b> you want to proceed?" "Are you <b>sure</b> you want to proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:499 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:497
msgid "Applying changed metadata" msgid "Applying changed metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:586
msgid "Some failures" msgid "Some failures"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:589 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:587
msgid "" msgid ""
"Failed to apply updated metadata for some books in your library. Click " "Failed to apply updated metadata for some books in your library. Click "
"\"Show Details\" to see details." "\"Show Details\" to see details."
@ -6073,17 +6076,17 @@ msgstr ""
msgid "Remove Cover" msgid "Remove Cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:358 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359
msgid "Double-click to open Book Details window" msgid "Double-click to open Book Details window"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295
msgid "Path" msgid "Path"
msgstr "Път" msgstr "Път"
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:361
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109
#, python-format #, python-format
msgid "Cover size: %(width)d x %(height)d" msgid "Cover size: %(width)d x %(height)d"
@ -7151,33 +7154,44 @@ msgid ""
"possible." "possible."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:101
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:186
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916
msgid "Choose cover for " msgid "Choose cover for "
msgstr "Избор на корица за " msgstr "Избор на корица за "
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:193
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924
msgid "Cannot read" msgid "Cannot read"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:194
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925
msgid "You do not have permission to read the file: " msgid "You do not have permission to read the file: "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:202
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:209
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933
msgid "Error reading file" msgid "Error reading file"
msgstr "Грешка при четене на файл" msgstr "Грешка при четене на файл"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934
msgid "<p>There was an error reading from file: <br /><b>" msgid "<p>There was an error reading from file: <br /><b>"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:210
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944
msgid " is not a valid picture" msgid " is not a valid picture"
msgstr "" msgstr ""
@ -7600,7 +7614,7 @@ msgid "&Remove"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119
msgid "Load a listof expression from a previously saved file" msgid "Load a list of expressions from a previously saved file"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120
@ -7608,7 +7622,7 @@ msgid "&Load"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121
msgid "Save this list of expression so that you can re-use it easily" msgid "Save this list of expressions so that you can re-use it easily"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122
@ -8947,7 +8961,7 @@ msgid "Author names cannot contain & characters."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:138 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137
msgid "Manage authors" msgid "Manage authors"
msgstr "" msgstr ""
@ -9035,27 +9049,32 @@ msgid "&Hide all jobs"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:296
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:51
msgid "&Copy to clipboard" msgid "&Copy to clipboard"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:292 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:299
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:54
msgid "Show &details" msgid "Show &details"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:293 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:300
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:55
msgid "Hide &details" msgid "Hide &details"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:304
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:59
msgid "Show detailed information about this error" msgid "Show detailed information about this error"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:318 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:325
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:78
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588
msgid "Copied" msgid "Copied"
msgstr "" msgstr ""
@ -9066,10 +9085,11 @@ msgstr ""
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48
msgid "View log" msgid "View log"
msgstr "" msgstr ""
@ -9082,7 +9102,7 @@ msgid "Standard metadata"
msgstr "Стандартни метаданни" msgstr "Стандартни метаданни"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:906 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:915
msgid "Custom metadata" msgid "Custom metadata"
msgstr "Потребителски метаданни" msgstr "Потребителски метаданни"
@ -9263,7 +9283,7 @@ msgstr "Добавяне на &етикети: "
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:191
msgid "Open Tag Editor" msgid "Open Tag Editor"
msgstr "" msgstr ""
@ -9407,13 +9427,13 @@ msgid "Set from &ebook file(s)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:545 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:554
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:711 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:720
msgid "&Basic metadata" msgid "&Basic metadata"
msgstr "&Основни метаданни" msgstr "&Основни метаданни"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:552 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:561
msgid "&Custom metadata" msgid "&Custom metadata"
msgstr "&Потребителски метаданни" msgstr "&Потребителски метаданни"
@ -11482,7 +11502,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:439
msgid "Permission denied" msgid "Permission denied"
msgstr "Достъпът е отказан" msgstr "Достъпът е отказан"
@ -11716,7 +11736,7 @@ msgid "Bad database location %r. calibre will now quit."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:515 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:517
msgid "Corrupted database" msgid "Corrupted database"
msgstr "" msgstr ""
@ -11793,7 +11813,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:441 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440
#, python-format #, python-format
msgid "Could not open %s. Is it being used by another program?" msgid "Could not open %s. Is it being used by another program?"
msgstr "" msgstr ""
@ -11945,15 +11965,6 @@ msgstr ""
msgid "Could not change cover as the image is invalid." msgid "Could not change cover as the image is invalid."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142
msgid "Tags changed" msgid "Tags changed"
msgstr "" msgstr ""
@ -12092,11 +12103,11 @@ msgstr ""
msgid "Downloaded metadata fields" msgid "Downloaded metadata fields"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:31
msgid "Edit Metadata" msgid "Edit Metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:66 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:65
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219
@ -12104,21 +12115,21 @@ msgstr ""
msgid "Next" msgid "Next"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:69
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393
msgid "Previous" msgid "Previous"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:118
msgid "" msgid ""
"Automatically create the title sort entry based on the current title entry.\n" "Automatically create the title sort entry based on the current title entry.\n"
"Using this button to create title sort will change title sort from red to " "Using this button to create title sort will change title sort from red to "
"green." "green."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:129
msgid "" msgid ""
"Automatically create the author sort entry based on the current author " "Automatically create the author sort entry based on the current author "
"entry. Using this button to create author sort will change author sort from " "entry. Using this button to create author sort will change author sort from "
@ -12126,111 +12137,111 @@ msgid ""
"Click and hold on the button to see it." "Click and hold on the button to see it."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:135
msgid "Set author sort from author" msgid "Set author sort from author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136
msgid "Set author from author sort" msgid "Set author from author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:140 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:139
msgid "Copy author to author sort" msgid "Copy author to author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:141
msgid "Copy author sort to author" msgid "Copy author sort to author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:152
msgid "Swap the author and title" msgid "Swap the author and title"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:158
msgid "" msgid ""
"Manage authors. Use to rename authors and correct individual author's sort " "Manage authors. Use to rename authors and correct individual author's sort "
"values" "values"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:165
msgid "Clear series" msgid "Clear series"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:201 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:200
msgid "Clear Ids" msgid "Clear Ids"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:205 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:204
msgid "" msgid ""
"Paste the contents of the clipboard into the identifiers box prefixed with " "Paste the contents of the clipboard into the identifiers box prefixed with "
"isbn:" "isbn:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:218 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:217
msgid "&Download metadata" msgid "&Download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:230 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:229
msgid "Configure download metadata" msgid "Configure download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:234 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:233
msgid "Change how calibre downloads metadata" msgid "Change how calibre downloads metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:295
#, python-format #, python-format
msgid " [%(num)d of %(tot)d]" msgid " [%(num)d of %(tot)d]"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:326
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:333
msgid "Could not read cover" msgid "Could not read cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:328 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327
#, python-format #, python-format
msgid "Could not read cover from %s format" msgid "Could not read cover from %s format"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334
#, python-format #, python-format
msgid "The cover in the %s format is invalid" msgid "The cover in the %s format is invalid"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:493 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:502
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:498 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:507
#, python-format #, python-format
msgid "Save changes and edit the metadata of %s" msgid "Save changes and edit the metadata of %s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:595 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:604
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:800 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:809
msgid "Change cover" msgid "Change cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:654 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:663
msgid "Co&mments" msgid "Co&mments"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:694 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:703
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:841 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:850
msgid "&Metadata" msgid "&Metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:699 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:708
msgid "&Cover and formats" msgid "&Cover and formats"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:769 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:778
msgid "C&ustom metadata" msgid "C&ustom metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:781 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:790
msgid "&Comments" msgid "&Comments"
msgstr "&Коментари" msgstr "&Коментари"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:847 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:856
msgid "Basic metadata" msgid "Basic metadata"
msgstr "" msgstr ""
@ -14224,7 +14235,7 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:452 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:454
msgid "Failed to start content server" msgid "Failed to start content server"
msgstr "" msgstr ""
@ -15494,31 +15505,31 @@ msgid ""
"reconvert them?" "reconvert them?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205
msgid "&Donate to support calibre" msgid "&Donate to support calibre"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241
msgid "&Restore" msgid "&Restore"
msgstr "&Възстановяване" msgstr "&Възстановяване"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246
msgid "&Eject connected device" msgid "&Eject connected device"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250
msgid "Quit calibre" msgid "Quit calibre"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263
msgid "Clear the current search" msgid "Clear the current search"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:363 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:365
msgid "Debug mode" msgid "Debug mode"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:364 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366
#, python-format #, python-format
msgid "" msgid ""
"You have started calibre in debug mode. After you quit calibre, the debug " "You have started calibre in debug mode. After you quit calibre, the debug "
@ -15526,11 +15537,11 @@ msgid ""
"automatically." "automatically."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:386
msgid "Failed to start Content Server" msgid "Failed to start Content Server"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:387
#, python-format #, python-format
msgid "" msgid ""
"Could not start the content server. Error:\n" "Could not start the content server. Error:\n"
@ -15538,7 +15549,7 @@ msgid ""
"%s" "%s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:516 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:518
#, python-format #, python-format
msgid "" msgid ""
"The library database at %s appears to be corrupted. Do you want calibre to " "The library database at %s appears to be corrupted. Do you want calibre to "
@ -15546,34 +15557,34 @@ msgid ""
"successful." "successful."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:600 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:602
msgid "Conversion Error" msgid "Conversion Error"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625
msgid "Recipe Disabled" msgid "Recipe Disabled"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:639 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:641
msgid "<b>Failed</b>" msgid "<b>Failed</b>"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:675
msgid "There are active jobs. Are you sure you want to quit?" msgid "There are active jobs. Are you sure you want to quit?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:676 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:678
msgid "" msgid ""
" is communicating with the device!<br>\n" " is communicating with the device!<br>\n"
" Quitting may cause corruption on the device.<br>\n" " Quitting may cause corruption on the device.<br>\n"
" Are you sure you want to quit?" " Are you sure you want to quit?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:680 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:682
msgid "Active jobs" msgid "Active jobs"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:749 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:751
msgid "" msgid ""
"will keep running in the system tray. To close it, choose <b>Quit</b> in the " "will keep running in the system tray. To close it, choose <b>Quit</b> in the "
"context menu of the system tray." "context menu of the system tray."

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: calibre\n" "Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-04-20 09:28+0000\n" "POT-Creation-Date: 2012-04-27 05:30+0000\n"
"PO-Revision-Date: 2012-04-12 14:19+0000\n" "PO-Revision-Date: 2012-04-12 14:19+0000\n"
"Last-Translator: Kazi Shahnoor Ashraf <kazidxb@gmail.com>\n" "Last-Translator: Kazi Shahnoor Ashraf <kazidxb@gmail.com>\n"
"Language-Team: Bengali <bn@li.org>\n" "Language-Team: Bengali <bn@li.org>\n"
@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Launchpad-Export-Date: 2012-04-21 04:42+0000\n" "X-Launchpad-Export-Date: 2012-04-28 04:37+0000\n"
"X-Generator: Launchpad (build 15120)\n" "X-Generator: Launchpad (build 15149)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing" msgid "Does absolutely nothing"
@ -26,8 +26,8 @@ msgstr "আসলে কিছুই করে না"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106 #: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109 #: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120 #: /home/kovid/work/calibre/src/calibre/db/cache.py:120
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:319 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:321
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:320 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:322
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@ -107,11 +107,13 @@ msgstr "আসলে কিছুই করে না"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:497 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:318
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:397
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:850 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:838
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360
@ -144,15 +146,15 @@ msgstr "আসলে কিছুই করে না"
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425
#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:397
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:402 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:400
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:602 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:603
#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:128
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:151 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:157
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56
@ -172,7 +174,7 @@ msgstr "আসলে কিছুই করে না"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:388
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204
@ -933,21 +935,21 @@ msgstr ""
msgid "Debug log" msgid "Debug log"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:17 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:19
msgid "Communicate with Android phones." msgid "Communicate with Android phones."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:168 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:170
msgid "" msgid ""
"Comma separated list of directories to send e-books to on the device. The " "Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used" "first one that exists will be used"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:259 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:261
msgid "Communicate with S60 phones." msgid "Communicate with S60 phones."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:278 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:280
msgid "Communicate with WebOS tablets." msgid "Communicate with WebOS tablets."
msgstr "" msgstr ""
@ -1063,7 +1065,7 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726 #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:102 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:103
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568
@ -3093,7 +3095,7 @@ msgid "Set the publication date."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539
msgid "Set the book timestamp (used by the date column in calibre)." msgid "Set the book timestamp (no longer used anywhere)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543
@ -3559,7 +3561,7 @@ msgid "Producer"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:934
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245
msgid "Comments" msgid "Comments"
@ -3716,8 +3718,8 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1246
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:946
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover" msgid "Cover"
msgstr "" msgstr ""
@ -3835,74 +3837,75 @@ msgstr ""
msgid "This is an Amazon Topaz book. It cannot be processed." msgid "This is an Amazon Topaz book. It cannot be processed."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:498 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:464
msgid "No details available" msgid "No details available"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
msgid "Title Page" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1248
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199
msgid "Table of Contents" msgid "Table of Contents"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1247
msgid "Title Page"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1249
msgid "Index" msgid "Index"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1250
msgid "Glossary" msgid "Glossary"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1263 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1251
msgid "Acknowledgements" msgid "Acknowledgements"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1264 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1252
msgid "Bibliography" msgid "Bibliography"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1265 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1253
msgid "Colophon" msgid "Colophon"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1266 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1254
msgid "Copyright" msgid "Copyright"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1267 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1255
msgid "Dedication" msgid "Dedication"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1268 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1256
msgid "Epigraph" msgid "Epigraph"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1269 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1257
msgid "Foreword" msgid "Foreword"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1270 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258
msgid "List of Illustrations" msgid "List of Illustrations"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1271 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259
msgid "List of Tables" msgid "List of Tables"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1272 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
msgid "Notes" msgid "Notes"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1273 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261
msgid "Preface" msgid "Preface"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1274 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262
msgid "Main Text" msgid "Main Text"
msgstr "" msgstr ""
@ -4413,9 +4416,9 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:178
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:242
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91
msgid "No books selected" msgid "No books selected"
msgstr "" msgstr ""
@ -4843,7 +4846,7 @@ msgid "Create a catalog of the books in your calibre library"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:612 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:614
msgid "Cannot convert" msgid "Cannot convert"
msgstr "" msgstr ""
@ -5213,20 +5216,20 @@ msgid ""
"details\" to see which books." "details\" to see which books."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
msgid "Download complete" msgid "Download complete"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880
msgid "Download log" msgid "Download log"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:149 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:147
msgid "Some books changed" msgid "Some books changed"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:148
msgid "" msgid ""
"The metadata for some books in your library has changed since you started " "The metadata for some books in your library has changed since you started "
"the download. If you proceed, some of those changes may be overwritten. " "the download. If you proceed, some of those changes may be overwritten. "
@ -5234,27 +5237,27 @@ msgid ""
"proceed?" "proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:179 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:177
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:243 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:241
msgid "Cannot edit metadata" msgid "Cannot edit metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:278
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:283 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281
msgid "Cannot merge books" msgid "Cannot merge books"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:284 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:282
msgid "At least two books must be selected for merging" msgid "At least two books must be selected for merging"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:287 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:285
msgid "" msgid ""
"You are about to merge more than 5 books. Are you <b>sure</b> you want to " "You are about to merge more than 5 books. Are you <b>sure</b> you want to "
"proceed?" "proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:294
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be added to the " "Book formats and metadata from the selected books will be added to the "
@ -5263,7 +5266,7 @@ msgid ""
"changed.<br><br>Please confirm you want to proceed." "changed.<br><br>Please confirm you want to proceed."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:306
#, python-format #, python-format
msgid "" msgid ""
"Book formats from the selected books will be merged into the <b>first " "Book formats from the selected books will be merged into the <b>first "
@ -5276,7 +5279,7 @@ msgid ""
"calibre library.<br><br> Are you <b>sure</b> you want to proceed?" "calibre library.<br><br> Are you <b>sure</b> you want to proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:324 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:322
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be merged into the " "Book formats and metadata from the selected books will be merged into the "
@ -5288,15 +5291,15 @@ msgid ""
"Are you <b>sure</b> you want to proceed?" "Are you <b>sure</b> you want to proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:499 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:497
msgid "Applying changed metadata" msgid "Applying changed metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:586
msgid "Some failures" msgid "Some failures"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:589 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:587
msgid "" msgid ""
"Failed to apply updated metadata for some books in your library. Click " "Failed to apply updated metadata for some books in your library. Click "
"\"Show Details\" to see details." "\"Show Details\" to see details."
@ -5991,17 +5994,17 @@ msgstr ""
msgid "Remove Cover" msgid "Remove Cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:358 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359
msgid "Double-click to open Book Details window" msgid "Double-click to open Book Details window"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295
msgid "Path" msgid "Path"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:361
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109
#, python-format #, python-format
msgid "Cover size: %(width)d x %(height)d" msgid "Cover size: %(width)d x %(height)d"
@ -7069,33 +7072,44 @@ msgid ""
"possible." "possible."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:101
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:186
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916
msgid "Choose cover for " msgid "Choose cover for "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:193
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924
msgid "Cannot read" msgid "Cannot read"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:194
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925
msgid "You do not have permission to read the file: " msgid "You do not have permission to read the file: "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:202
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:209
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933
msgid "Error reading file" msgid "Error reading file"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934
msgid "<p>There was an error reading from file: <br /><b>" msgid "<p>There was an error reading from file: <br /><b>"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:210
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944
msgid " is not a valid picture" msgid " is not a valid picture"
msgstr "" msgstr ""
@ -7518,7 +7532,7 @@ msgid "&Remove"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119
msgid "Load a listof expression from a previously saved file" msgid "Load a list of expressions from a previously saved file"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120
@ -7526,7 +7540,7 @@ msgid "&Load"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121
msgid "Save this list of expression so that you can re-use it easily" msgid "Save this list of expressions so that you can re-use it easily"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122
@ -8865,7 +8879,7 @@ msgid "Author names cannot contain & characters."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:138 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137
msgid "Manage authors" msgid "Manage authors"
msgstr "" msgstr ""
@ -8953,27 +8967,32 @@ msgid "&Hide all jobs"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:296
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:51
msgid "&Copy to clipboard" msgid "&Copy to clipboard"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:292 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:299
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:54
msgid "Show &details" msgid "Show &details"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:293 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:300
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:55
msgid "Hide &details" msgid "Hide &details"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:304
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:59
msgid "Show detailed information about this error" msgid "Show detailed information about this error"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:318 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:325
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:78
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588
msgid "Copied" msgid "Copied"
msgstr "" msgstr ""
@ -8984,10 +9003,11 @@ msgstr ""
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48
msgid "View log" msgid "View log"
msgstr "" msgstr ""
@ -9000,7 +9020,7 @@ msgid "Standard metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:906 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:915
msgid "Custom metadata" msgid "Custom metadata"
msgstr "" msgstr ""
@ -9181,7 +9201,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:191
msgid "Open Tag Editor" msgid "Open Tag Editor"
msgstr "" msgstr ""
@ -9325,13 +9345,13 @@ msgid "Set from &ebook file(s)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:545 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:554
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:711 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:720
msgid "&Basic metadata" msgid "&Basic metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:552 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:561
msgid "&Custom metadata" msgid "&Custom metadata"
msgstr "" msgstr ""
@ -11400,7 +11420,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:439
msgid "Permission denied" msgid "Permission denied"
msgstr "" msgstr ""
@ -11634,7 +11654,7 @@ msgid "Bad database location %r. calibre will now quit."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:515 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:517
msgid "Corrupted database" msgid "Corrupted database"
msgstr "" msgstr ""
@ -11711,7 +11731,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:441 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440
#, python-format #, python-format
msgid "Could not open %s. Is it being used by another program?" msgid "Could not open %s. Is it being used by another program?"
msgstr "" msgstr ""
@ -11863,15 +11883,6 @@ msgstr ""
msgid "Could not change cover as the image is invalid." msgid "Could not change cover as the image is invalid."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142
msgid "Tags changed" msgid "Tags changed"
msgstr "" msgstr ""
@ -12010,11 +12021,11 @@ msgstr ""
msgid "Downloaded metadata fields" msgid "Downloaded metadata fields"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:31
msgid "Edit Metadata" msgid "Edit Metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:66 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:65
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219
@ -12022,21 +12033,21 @@ msgstr ""
msgid "Next" msgid "Next"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:69
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393
msgid "Previous" msgid "Previous"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:118
msgid "" msgid ""
"Automatically create the title sort entry based on the current title entry.\n" "Automatically create the title sort entry based on the current title entry.\n"
"Using this button to create title sort will change title sort from red to " "Using this button to create title sort will change title sort from red to "
"green." "green."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:129
msgid "" msgid ""
"Automatically create the author sort entry based on the current author " "Automatically create the author sort entry based on the current author "
"entry. Using this button to create author sort will change author sort from " "entry. Using this button to create author sort will change author sort from "
@ -12044,111 +12055,111 @@ msgid ""
"Click and hold on the button to see it." "Click and hold on the button to see it."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:135
msgid "Set author sort from author" msgid "Set author sort from author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136
msgid "Set author from author sort" msgid "Set author from author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:140 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:139
msgid "Copy author to author sort" msgid "Copy author to author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:141
msgid "Copy author sort to author" msgid "Copy author sort to author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:152
msgid "Swap the author and title" msgid "Swap the author and title"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:158
msgid "" msgid ""
"Manage authors. Use to rename authors and correct individual author's sort " "Manage authors. Use to rename authors and correct individual author's sort "
"values" "values"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:165
msgid "Clear series" msgid "Clear series"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:201 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:200
msgid "Clear Ids" msgid "Clear Ids"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:205 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:204
msgid "" msgid ""
"Paste the contents of the clipboard into the identifiers box prefixed with " "Paste the contents of the clipboard into the identifiers box prefixed with "
"isbn:" "isbn:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:218 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:217
msgid "&Download metadata" msgid "&Download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:230 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:229
msgid "Configure download metadata" msgid "Configure download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:234 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:233
msgid "Change how calibre downloads metadata" msgid "Change how calibre downloads metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:295
#, python-format #, python-format
msgid " [%(num)d of %(tot)d]" msgid " [%(num)d of %(tot)d]"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:326
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:333
msgid "Could not read cover" msgid "Could not read cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:328 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327
#, python-format #, python-format
msgid "Could not read cover from %s format" msgid "Could not read cover from %s format"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334
#, python-format #, python-format
msgid "The cover in the %s format is invalid" msgid "The cover in the %s format is invalid"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:493 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:502
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:498 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:507
#, python-format #, python-format
msgid "Save changes and edit the metadata of %s" msgid "Save changes and edit the metadata of %s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:595 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:604
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:800 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:809
msgid "Change cover" msgid "Change cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:654 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:663
msgid "Co&mments" msgid "Co&mments"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:694 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:703
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:841 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:850
msgid "&Metadata" msgid "&Metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:699 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:708
msgid "&Cover and formats" msgid "&Cover and formats"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:769 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:778
msgid "C&ustom metadata" msgid "C&ustom metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:781 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:790
msgid "&Comments" msgid "&Comments"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:847 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:856
msgid "Basic metadata" msgid "Basic metadata"
msgstr "" msgstr ""
@ -14140,7 +14151,7 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:452 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:454
msgid "Failed to start content server" msgid "Failed to start content server"
msgstr "" msgstr ""
@ -15410,31 +15421,31 @@ msgid ""
"reconvert them?" "reconvert them?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205
msgid "&Donate to support calibre" msgid "&Donate to support calibre"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241
msgid "&Restore" msgid "&Restore"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246
msgid "&Eject connected device" msgid "&Eject connected device"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250
msgid "Quit calibre" msgid "Quit calibre"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263
msgid "Clear the current search" msgid "Clear the current search"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:363 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:365
msgid "Debug mode" msgid "Debug mode"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:364 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366
#, python-format #, python-format
msgid "" msgid ""
"You have started calibre in debug mode. After you quit calibre, the debug " "You have started calibre in debug mode. After you quit calibre, the debug "
@ -15442,11 +15453,11 @@ msgid ""
"automatically." "automatically."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:386
msgid "Failed to start Content Server" msgid "Failed to start Content Server"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:387
#, python-format #, python-format
msgid "" msgid ""
"Could not start the content server. Error:\n" "Could not start the content server. Error:\n"
@ -15454,7 +15465,7 @@ msgid ""
"%s" "%s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:516 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:518
#, python-format #, python-format
msgid "" msgid ""
"The library database at %s appears to be corrupted. Do you want calibre to " "The library database at %s appears to be corrupted. Do you want calibre to "
@ -15462,34 +15473,34 @@ msgid ""
"successful." "successful."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:600 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:602
msgid "Conversion Error" msgid "Conversion Error"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625
msgid "Recipe Disabled" msgid "Recipe Disabled"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:639 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:641
msgid "<b>Failed</b>" msgid "<b>Failed</b>"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:675
msgid "There are active jobs. Are you sure you want to quit?" msgid "There are active jobs. Are you sure you want to quit?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:676 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:678
msgid "" msgid ""
" is communicating with the device!<br>\n" " is communicating with the device!<br>\n"
" Quitting may cause corruption on the device.<br>\n" " Quitting may cause corruption on the device.<br>\n"
" Are you sure you want to quit?" " Are you sure you want to quit?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:680 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:682
msgid "Active jobs" msgid "Active jobs"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:749 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:751
msgid "" msgid ""
"will keep running in the system tray. To close it, choose <b>Quit</b> in the " "will keep running in the system tray. To close it, choose <b>Quit</b> in the "
"context menu of the system tray." "context menu of the system tray."

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: calibre\n" "Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-04-20 09:28+0000\n" "POT-Creation-Date: 2012-04-27 05:30+0000\n"
"PO-Revision-Date: 2011-08-13 04:22+0000\n" "PO-Revision-Date: 2011-08-13 04:22+0000\n"
"Last-Translator: Denis <Unknown>\n" "Last-Translator: Denis <Unknown>\n"
"Language-Team: Breton <br@li.org>\n" "Language-Team: Breton <br@li.org>\n"
@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n" "Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Launchpad-Export-Date: 2012-04-21 04:43+0000\n" "X-Launchpad-Export-Date: 2012-04-28 04:37+0000\n"
"X-Generator: Launchpad (build 15120)\n" "X-Generator: Launchpad (build 15149)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing" msgid "Does absolutely nothing"
@ -26,8 +26,8 @@ msgstr "Ne ra netra da vat"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106 #: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109 #: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120 #: /home/kovid/work/calibre/src/calibre/db/cache.py:120
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:319 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:321
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:320 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:322
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@ -107,11 +107,13 @@ msgstr "Ne ra netra da vat"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:497 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:318
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:397
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:850 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:838
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360
@ -144,15 +146,15 @@ msgstr "Ne ra netra da vat"
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425
#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:397
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:402 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:400
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:602 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:603
#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:128
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:151 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:157
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56
@ -172,7 +174,7 @@ msgstr "Ne ra netra da vat"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:388
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204
@ -936,21 +938,21 @@ msgstr ""
msgid "Debug log" msgid "Debug log"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:17 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:19
msgid "Communicate with Android phones." msgid "Communicate with Android phones."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:168 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:170
msgid "" msgid ""
"Comma separated list of directories to send e-books to on the device. The " "Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used" "first one that exists will be used"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:259 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:261
msgid "Communicate with S60 phones." msgid "Communicate with S60 phones."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:278 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:280
msgid "Communicate with WebOS tablets." msgid "Communicate with WebOS tablets."
msgstr "" msgstr ""
@ -1066,7 +1068,7 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726 #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:102 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:103
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568
@ -3096,7 +3098,7 @@ msgid "Set the publication date."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539
msgid "Set the book timestamp (used by the date column in calibre)." msgid "Set the book timestamp (no longer used anywhere)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543
@ -3565,7 +3567,7 @@ msgid "Producer"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:934
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245
msgid "Comments" msgid "Comments"
@ -3722,8 +3724,8 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1246
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:946
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover" msgid "Cover"
msgstr "" msgstr ""
@ -3841,74 +3843,75 @@ msgstr ""
msgid "This is an Amazon Topaz book. It cannot be processed." msgid "This is an Amazon Topaz book. It cannot be processed."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:498 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:464
msgid "No details available" msgid "No details available"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
msgid "Title Page" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1248
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199
msgid "Table of Contents" msgid "Table of Contents"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1247
msgid "Title Page"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1249
msgid "Index" msgid "Index"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1250
msgid "Glossary" msgid "Glossary"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1263 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1251
msgid "Acknowledgements" msgid "Acknowledgements"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1264 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1252
msgid "Bibliography" msgid "Bibliography"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1265 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1253
msgid "Colophon" msgid "Colophon"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1266 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1254
msgid "Copyright" msgid "Copyright"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1267 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1255
msgid "Dedication" msgid "Dedication"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1268 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1256
msgid "Epigraph" msgid "Epigraph"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1269 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1257
msgid "Foreword" msgid "Foreword"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1270 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258
msgid "List of Illustrations" msgid "List of Illustrations"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1271 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259
msgid "List of Tables" msgid "List of Tables"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1272 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
msgid "Notes" msgid "Notes"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1273 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261
msgid "Preface" msgid "Preface"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1274 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262
msgid "Main Text" msgid "Main Text"
msgstr "" msgstr ""
@ -4419,9 +4422,9 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:178
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:242
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91
msgid "No books selected" msgid "No books selected"
msgstr "" msgstr ""
@ -4849,7 +4852,7 @@ msgid "Create a catalog of the books in your calibre library"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:612 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:614
msgid "Cannot convert" msgid "Cannot convert"
msgstr "" msgstr ""
@ -5219,20 +5222,20 @@ msgid ""
"details\" to see which books." "details\" to see which books."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
msgid "Download complete" msgid "Download complete"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880
msgid "Download log" msgid "Download log"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:149 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:147
msgid "Some books changed" msgid "Some books changed"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:148
msgid "" msgid ""
"The metadata for some books in your library has changed since you started " "The metadata for some books in your library has changed since you started "
"the download. If you proceed, some of those changes may be overwritten. " "the download. If you proceed, some of those changes may be overwritten. "
@ -5240,27 +5243,27 @@ msgid ""
"proceed?" "proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:179 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:177
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:243 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:241
msgid "Cannot edit metadata" msgid "Cannot edit metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:278
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:283 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281
msgid "Cannot merge books" msgid "Cannot merge books"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:284 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:282
msgid "At least two books must be selected for merging" msgid "At least two books must be selected for merging"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:287 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:285
msgid "" msgid ""
"You are about to merge more than 5 books. Are you <b>sure</b> you want to " "You are about to merge more than 5 books. Are you <b>sure</b> you want to "
"proceed?" "proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:294
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be added to the " "Book formats and metadata from the selected books will be added to the "
@ -5269,7 +5272,7 @@ msgid ""
"changed.<br><br>Please confirm you want to proceed." "changed.<br><br>Please confirm you want to proceed."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:306
#, python-format #, python-format
msgid "" msgid ""
"Book formats from the selected books will be merged into the <b>first " "Book formats from the selected books will be merged into the <b>first "
@ -5282,7 +5285,7 @@ msgid ""
"calibre library.<br><br> Are you <b>sure</b> you want to proceed?" "calibre library.<br><br> Are you <b>sure</b> you want to proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:324 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:322
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be merged into the " "Book formats and metadata from the selected books will be merged into the "
@ -5294,15 +5297,15 @@ msgid ""
"Are you <b>sure</b> you want to proceed?" "Are you <b>sure</b> you want to proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:499 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:497
msgid "Applying changed metadata" msgid "Applying changed metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:586
msgid "Some failures" msgid "Some failures"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:589 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:587
msgid "" msgid ""
"Failed to apply updated metadata for some books in your library. Click " "Failed to apply updated metadata for some books in your library. Click "
"\"Show Details\" to see details." "\"Show Details\" to see details."
@ -5997,17 +6000,17 @@ msgstr ""
msgid "Remove Cover" msgid "Remove Cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:358 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359
msgid "Double-click to open Book Details window" msgid "Double-click to open Book Details window"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295
msgid "Path" msgid "Path"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:361
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109
#, python-format #, python-format
msgid "Cover size: %(width)d x %(height)d" msgid "Cover size: %(width)d x %(height)d"
@ -7075,33 +7078,44 @@ msgid ""
"possible." "possible."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:101
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:186
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916
msgid "Choose cover for " msgid "Choose cover for "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:193
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924
msgid "Cannot read" msgid "Cannot read"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:194
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925
msgid "You do not have permission to read the file: " msgid "You do not have permission to read the file: "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:202
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:209
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933
msgid "Error reading file" msgid "Error reading file"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934
msgid "<p>There was an error reading from file: <br /><b>" msgid "<p>There was an error reading from file: <br /><b>"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:210
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944
msgid " is not a valid picture" msgid " is not a valid picture"
msgstr "" msgstr ""
@ -7524,7 +7538,7 @@ msgid "&Remove"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119
msgid "Load a listof expression from a previously saved file" msgid "Load a list of expressions from a previously saved file"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120
@ -7532,7 +7546,7 @@ msgid "&Load"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121
msgid "Save this list of expression so that you can re-use it easily" msgid "Save this list of expressions so that you can re-use it easily"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122
@ -8871,7 +8885,7 @@ msgid "Author names cannot contain & characters."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:138 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137
msgid "Manage authors" msgid "Manage authors"
msgstr "" msgstr ""
@ -8959,27 +8973,32 @@ msgid "&Hide all jobs"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:296
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:51
msgid "&Copy to clipboard" msgid "&Copy to clipboard"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:292 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:299
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:54
msgid "Show &details" msgid "Show &details"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:293 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:300
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:55
msgid "Hide &details" msgid "Hide &details"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:304
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:59
msgid "Show detailed information about this error" msgid "Show detailed information about this error"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:318 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:325
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:78
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588
msgid "Copied" msgid "Copied"
msgstr "" msgstr ""
@ -8990,10 +9009,11 @@ msgstr ""
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48
msgid "View log" msgid "View log"
msgstr "" msgstr ""
@ -9006,7 +9026,7 @@ msgid "Standard metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:906 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:915
msgid "Custom metadata" msgid "Custom metadata"
msgstr "" msgstr ""
@ -9187,7 +9207,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:191
msgid "Open Tag Editor" msgid "Open Tag Editor"
msgstr "" msgstr ""
@ -9331,13 +9351,13 @@ msgid "Set from &ebook file(s)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:545 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:554
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:711 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:720
msgid "&Basic metadata" msgid "&Basic metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:552 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:561
msgid "&Custom metadata" msgid "&Custom metadata"
msgstr "" msgstr ""
@ -11406,7 +11426,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:439
msgid "Permission denied" msgid "Permission denied"
msgstr "" msgstr ""
@ -11640,7 +11660,7 @@ msgid "Bad database location %r. calibre will now quit."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:515 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:517
msgid "Corrupted database" msgid "Corrupted database"
msgstr "" msgstr ""
@ -11717,7 +11737,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:441 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440
#, python-format #, python-format
msgid "Could not open %s. Is it being used by another program?" msgid "Could not open %s. Is it being used by another program?"
msgstr "" msgstr ""
@ -11869,15 +11889,6 @@ msgstr ""
msgid "Could not change cover as the image is invalid." msgid "Could not change cover as the image is invalid."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142
msgid "Tags changed" msgid "Tags changed"
msgstr "" msgstr ""
@ -12016,11 +12027,11 @@ msgstr ""
msgid "Downloaded metadata fields" msgid "Downloaded metadata fields"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:31
msgid "Edit Metadata" msgid "Edit Metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:66 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:65
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219
@ -12028,21 +12039,21 @@ msgstr ""
msgid "Next" msgid "Next"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:69
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393
msgid "Previous" msgid "Previous"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:118
msgid "" msgid ""
"Automatically create the title sort entry based on the current title entry.\n" "Automatically create the title sort entry based on the current title entry.\n"
"Using this button to create title sort will change title sort from red to " "Using this button to create title sort will change title sort from red to "
"green." "green."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:129
msgid "" msgid ""
"Automatically create the author sort entry based on the current author " "Automatically create the author sort entry based on the current author "
"entry. Using this button to create author sort will change author sort from " "entry. Using this button to create author sort will change author sort from "
@ -12050,111 +12061,111 @@ msgid ""
"Click and hold on the button to see it." "Click and hold on the button to see it."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:135
msgid "Set author sort from author" msgid "Set author sort from author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136
msgid "Set author from author sort" msgid "Set author from author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:140 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:139
msgid "Copy author to author sort" msgid "Copy author to author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:141
msgid "Copy author sort to author" msgid "Copy author sort to author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:152
msgid "Swap the author and title" msgid "Swap the author and title"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:158
msgid "" msgid ""
"Manage authors. Use to rename authors and correct individual author's sort " "Manage authors. Use to rename authors and correct individual author's sort "
"values" "values"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:165
msgid "Clear series" msgid "Clear series"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:201 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:200
msgid "Clear Ids" msgid "Clear Ids"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:205 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:204
msgid "" msgid ""
"Paste the contents of the clipboard into the identifiers box prefixed with " "Paste the contents of the clipboard into the identifiers box prefixed with "
"isbn:" "isbn:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:218 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:217
msgid "&Download metadata" msgid "&Download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:230 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:229
msgid "Configure download metadata" msgid "Configure download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:234 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:233
msgid "Change how calibre downloads metadata" msgid "Change how calibre downloads metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:295
#, python-format #, python-format
msgid " [%(num)d of %(tot)d]" msgid " [%(num)d of %(tot)d]"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:326
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:333
msgid "Could not read cover" msgid "Could not read cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:328 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327
#, python-format #, python-format
msgid "Could not read cover from %s format" msgid "Could not read cover from %s format"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334
#, python-format #, python-format
msgid "The cover in the %s format is invalid" msgid "The cover in the %s format is invalid"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:493 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:502
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:498 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:507
#, python-format #, python-format
msgid "Save changes and edit the metadata of %s" msgid "Save changes and edit the metadata of %s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:595 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:604
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:800 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:809
msgid "Change cover" msgid "Change cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:654 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:663
msgid "Co&mments" msgid "Co&mments"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:694 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:703
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:841 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:850
msgid "&Metadata" msgid "&Metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:699 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:708
msgid "&Cover and formats" msgid "&Cover and formats"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:769 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:778
msgid "C&ustom metadata" msgid "C&ustom metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:781 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:790
msgid "&Comments" msgid "&Comments"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:847 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:856
msgid "Basic metadata" msgid "Basic metadata"
msgstr "" msgstr ""
@ -14146,7 +14157,7 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:452 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:454
msgid "Failed to start content server" msgid "Failed to start content server"
msgstr "" msgstr ""
@ -15416,31 +15427,31 @@ msgid ""
"reconvert them?" "reconvert them?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205
msgid "&Donate to support calibre" msgid "&Donate to support calibre"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241
msgid "&Restore" msgid "&Restore"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246
msgid "&Eject connected device" msgid "&Eject connected device"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250
msgid "Quit calibre" msgid "Quit calibre"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263
msgid "Clear the current search" msgid "Clear the current search"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:363 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:365
msgid "Debug mode" msgid "Debug mode"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:364 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366
#, python-format #, python-format
msgid "" msgid ""
"You have started calibre in debug mode. After you quit calibre, the debug " "You have started calibre in debug mode. After you quit calibre, the debug "
@ -15448,11 +15459,11 @@ msgid ""
"automatically." "automatically."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:386
msgid "Failed to start Content Server" msgid "Failed to start Content Server"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:387
#, python-format #, python-format
msgid "" msgid ""
"Could not start the content server. Error:\n" "Could not start the content server. Error:\n"
@ -15460,7 +15471,7 @@ msgid ""
"%s" "%s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:516 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:518
#, python-format #, python-format
msgid "" msgid ""
"The library database at %s appears to be corrupted. Do you want calibre to " "The library database at %s appears to be corrupted. Do you want calibre to "
@ -15468,34 +15479,34 @@ msgid ""
"successful." "successful."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:600 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:602
msgid "Conversion Error" msgid "Conversion Error"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625
msgid "Recipe Disabled" msgid "Recipe Disabled"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:639 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:641
msgid "<b>Failed</b>" msgid "<b>Failed</b>"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:675
msgid "There are active jobs. Are you sure you want to quit?" msgid "There are active jobs. Are you sure you want to quit?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:676 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:678
msgid "" msgid ""
" is communicating with the device!<br>\n" " is communicating with the device!<br>\n"
" Quitting may cause corruption on the device.<br>\n" " Quitting may cause corruption on the device.<br>\n"
" Are you sure you want to quit?" " Are you sure you want to quit?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:680 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:682
msgid "Active jobs" msgid "Active jobs"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:749 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:751
msgid "" msgid ""
"will keep running in the system tray. To close it, choose <b>Quit</b> in the " "will keep running in the system tray. To close it, choose <b>Quit</b> in the "
"context menu of the system tray." "context menu of the system tray."

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: calibre\n" "Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-04-20 09:28+0000\n" "POT-Creation-Date: 2012-04-27 05:30+0000\n"
"PO-Revision-Date: 2012-01-02 13:31+0000\n" "PO-Revision-Date: 2012-01-02 13:31+0000\n"
"Last-Translator: Kenan Dervišević <kenan3008@gmail.com>\n" "Last-Translator: Kenan Dervišević <kenan3008@gmail.com>\n"
"Language-Team: Bosnian <bs@li.org>\n" "Language-Team: Bosnian <bs@li.org>\n"
@ -16,8 +16,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Launchpad-Export-Date: 2012-04-21 04:43+0000\n" "X-Launchpad-Export-Date: 2012-04-28 04:37+0000\n"
"X-Generator: Launchpad (build 15120)\n" "X-Generator: Launchpad (build 15149)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing" msgid "Does absolutely nothing"
@ -27,8 +27,8 @@ msgstr "Ne radi apsolutno ništa"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106 #: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109 #: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120 #: /home/kovid/work/calibre/src/calibre/db/cache.py:120
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:319 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:321
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:320 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:322
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@ -108,11 +108,13 @@ msgstr "Ne radi apsolutno ništa"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:497 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:318
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:397
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:850 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:838
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360
@ -145,15 +147,15 @@ msgstr "Ne radi apsolutno ništa"
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425
#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:397
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:402 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:400
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:602 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:603
#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:128
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:151 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:157
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56
@ -173,7 +175,7 @@ msgstr "Ne radi apsolutno ništa"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:388
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204
@ -939,21 +941,21 @@ msgstr ""
msgid "Debug log" msgid "Debug log"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:17 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:19
msgid "Communicate with Android phones." msgid "Communicate with Android phones."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:168 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:170
msgid "" msgid ""
"Comma separated list of directories to send e-books to on the device. The " "Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used" "first one that exists will be used"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:259 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:261
msgid "Communicate with S60 phones." msgid "Communicate with S60 phones."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:278 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:280
msgid "Communicate with WebOS tablets." msgid "Communicate with WebOS tablets."
msgstr "" msgstr ""
@ -1069,7 +1071,7 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726 #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:102 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:103
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568
@ -3099,7 +3101,7 @@ msgid "Set the publication date."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539
msgid "Set the book timestamp (used by the date column in calibre)." msgid "Set the book timestamp (no longer used anywhere)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543
@ -3565,7 +3567,7 @@ msgid "Producer"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:934
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245
msgid "Comments" msgid "Comments"
@ -3722,8 +3724,8 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1246
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:946
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover" msgid "Cover"
msgstr "" msgstr ""
@ -3841,74 +3843,75 @@ msgstr ""
msgid "This is an Amazon Topaz book. It cannot be processed." msgid "This is an Amazon Topaz book. It cannot be processed."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:498 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:464
msgid "No details available" msgid "No details available"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
msgid "Title Page" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1248
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199
msgid "Table of Contents" msgid "Table of Contents"
msgstr "Sadržaj" msgstr "Sadržaj"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1247
msgid "Title Page"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1249
msgid "Index" msgid "Index"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1250
msgid "Glossary" msgid "Glossary"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1263 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1251
msgid "Acknowledgements" msgid "Acknowledgements"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1264 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1252
msgid "Bibliography" msgid "Bibliography"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1265 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1253
msgid "Colophon" msgid "Colophon"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1266 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1254
msgid "Copyright" msgid "Copyright"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1267 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1255
msgid "Dedication" msgid "Dedication"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1268 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1256
msgid "Epigraph" msgid "Epigraph"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1269 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1257
msgid "Foreword" msgid "Foreword"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1270 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258
msgid "List of Illustrations" msgid "List of Illustrations"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1271 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259
msgid "List of Tables" msgid "List of Tables"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1272 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
msgid "Notes" msgid "Notes"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1273 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261
msgid "Preface" msgid "Preface"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1274 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262
msgid "Main Text" msgid "Main Text"
msgstr "" msgstr ""
@ -4420,9 +4423,9 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:178
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:242
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91
msgid "No books selected" msgid "No books selected"
msgstr "" msgstr ""
@ -4850,7 +4853,7 @@ msgid "Create a catalog of the books in your calibre library"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:612 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:614
msgid "Cannot convert" msgid "Cannot convert"
msgstr "" msgstr ""
@ -5220,20 +5223,20 @@ msgid ""
"details\" to see which books." "details\" to see which books."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
msgid "Download complete" msgid "Download complete"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880
msgid "Download log" msgid "Download log"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:149 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:147
msgid "Some books changed" msgid "Some books changed"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:148
msgid "" msgid ""
"The metadata for some books in your library has changed since you started " "The metadata for some books in your library has changed since you started "
"the download. If you proceed, some of those changes may be overwritten. " "the download. If you proceed, some of those changes may be overwritten. "
@ -5241,27 +5244,27 @@ msgid ""
"proceed?" "proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:179 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:177
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:243 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:241
msgid "Cannot edit metadata" msgid "Cannot edit metadata"
msgstr "Nije moguće uređivati meta podatke" msgstr "Nije moguće uređivati meta podatke"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:278
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:283 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281
msgid "Cannot merge books" msgid "Cannot merge books"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:284 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:282
msgid "At least two books must be selected for merging" msgid "At least two books must be selected for merging"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:287 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:285
msgid "" msgid ""
"You are about to merge more than 5 books. Are you <b>sure</b> you want to " "You are about to merge more than 5 books. Are you <b>sure</b> you want to "
"proceed?" "proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:294
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be added to the " "Book formats and metadata from the selected books will be added to the "
@ -5270,7 +5273,7 @@ msgid ""
"changed.<br><br>Please confirm you want to proceed." "changed.<br><br>Please confirm you want to proceed."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:306
#, python-format #, python-format
msgid "" msgid ""
"Book formats from the selected books will be merged into the <b>first " "Book formats from the selected books will be merged into the <b>first "
@ -5283,7 +5286,7 @@ msgid ""
"calibre library.<br><br> Are you <b>sure</b> you want to proceed?" "calibre library.<br><br> Are you <b>sure</b> you want to proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:324 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:322
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be merged into the " "Book formats and metadata from the selected books will be merged into the "
@ -5295,15 +5298,15 @@ msgid ""
"Are you <b>sure</b> you want to proceed?" "Are you <b>sure</b> you want to proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:499 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:497
msgid "Applying changed metadata" msgid "Applying changed metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:586
msgid "Some failures" msgid "Some failures"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:589 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:587
msgid "" msgid ""
"Failed to apply updated metadata for some books in your library. Click " "Failed to apply updated metadata for some books in your library. Click "
"\"Show Details\" to see details." "\"Show Details\" to see details."
@ -5998,17 +6001,17 @@ msgstr ""
msgid "Remove Cover" msgid "Remove Cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:358 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359
msgid "Double-click to open Book Details window" msgid "Double-click to open Book Details window"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295
msgid "Path" msgid "Path"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:361
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109
#, python-format #, python-format
msgid "Cover size: %(width)d x %(height)d" msgid "Cover size: %(width)d x %(height)d"
@ -7076,33 +7079,44 @@ msgid ""
"possible." "possible."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:101
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:186
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916
msgid "Choose cover for " msgid "Choose cover for "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:193
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924
msgid "Cannot read" msgid "Cannot read"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:194
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925
msgid "You do not have permission to read the file: " msgid "You do not have permission to read the file: "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:202
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:209
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933
msgid "Error reading file" msgid "Error reading file"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934
msgid "<p>There was an error reading from file: <br /><b>" msgid "<p>There was an error reading from file: <br /><b>"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:210
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944
msgid " is not a valid picture" msgid " is not a valid picture"
msgstr "" msgstr ""
@ -7525,7 +7539,7 @@ msgid "&Remove"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119
msgid "Load a listof expression from a previously saved file" msgid "Load a list of expressions from a previously saved file"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120
@ -7533,7 +7547,7 @@ msgid "&Load"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121
msgid "Save this list of expression so that you can re-use it easily" msgid "Save this list of expressions so that you can re-use it easily"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122
@ -8872,7 +8886,7 @@ msgid "Author names cannot contain & characters."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:138 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137
msgid "Manage authors" msgid "Manage authors"
msgstr "Upravljanje autorima" msgstr "Upravljanje autorima"
@ -8960,27 +8974,32 @@ msgid "&Hide all jobs"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:296
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:51
msgid "&Copy to clipboard" msgid "&Copy to clipboard"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:292 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:299
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:54
msgid "Show &details" msgid "Show &details"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:293 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:300
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:55
msgid "Hide &details" msgid "Hide &details"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:304
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:59
msgid "Show detailed information about this error" msgid "Show detailed information about this error"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:318 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:325
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:78
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588
msgid "Copied" msgid "Copied"
msgstr "" msgstr ""
@ -8991,10 +9010,11 @@ msgstr ""
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48
msgid "View log" msgid "View log"
msgstr "" msgstr ""
@ -9007,7 +9027,7 @@ msgid "Standard metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:906 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:915
msgid "Custom metadata" msgid "Custom metadata"
msgstr "" msgstr ""
@ -9188,7 +9208,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:191
msgid "Open Tag Editor" msgid "Open Tag Editor"
msgstr "" msgstr ""
@ -9332,13 +9352,13 @@ msgid "Set from &ebook file(s)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:545 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:554
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:711 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:720
msgid "&Basic metadata" msgid "&Basic metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:552 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:561
msgid "&Custom metadata" msgid "&Custom metadata"
msgstr "" msgstr ""
@ -11407,7 +11427,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:439
msgid "Permission denied" msgid "Permission denied"
msgstr "" msgstr ""
@ -11641,7 +11661,7 @@ msgid "Bad database location %r. calibre will now quit."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:515 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:517
msgid "Corrupted database" msgid "Corrupted database"
msgstr "" msgstr ""
@ -11718,7 +11738,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:441 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440
#, python-format #, python-format
msgid "Could not open %s. Is it being used by another program?" msgid "Could not open %s. Is it being used by another program?"
msgstr "" msgstr ""
@ -11870,15 +11890,6 @@ msgstr ""
msgid "Could not change cover as the image is invalid." msgid "Could not change cover as the image is invalid."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142
msgid "Tags changed" msgid "Tags changed"
msgstr "" msgstr ""
@ -12017,11 +12028,11 @@ msgstr ""
msgid "Downloaded metadata fields" msgid "Downloaded metadata fields"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:31
msgid "Edit Metadata" msgid "Edit Metadata"
msgstr "Uredi meta podatke" msgstr "Uredi meta podatke"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:66 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:65
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219
@ -12029,21 +12040,21 @@ msgstr "Uredi meta podatke"
msgid "Next" msgid "Next"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:69
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393
msgid "Previous" msgid "Previous"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:118
msgid "" msgid ""
"Automatically create the title sort entry based on the current title entry.\n" "Automatically create the title sort entry based on the current title entry.\n"
"Using this button to create title sort will change title sort from red to " "Using this button to create title sort will change title sort from red to "
"green." "green."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:129
msgid "" msgid ""
"Automatically create the author sort entry based on the current author " "Automatically create the author sort entry based on the current author "
"entry. Using this button to create author sort will change author sort from " "entry. Using this button to create author sort will change author sort from "
@ -12051,111 +12062,111 @@ msgid ""
"Click and hold on the button to see it." "Click and hold on the button to see it."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:135
msgid "Set author sort from author" msgid "Set author sort from author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136
msgid "Set author from author sort" msgid "Set author from author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:140 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:139
msgid "Copy author to author sort" msgid "Copy author to author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:141
msgid "Copy author sort to author" msgid "Copy author sort to author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:152
msgid "Swap the author and title" msgid "Swap the author and title"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:158
msgid "" msgid ""
"Manage authors. Use to rename authors and correct individual author's sort " "Manage authors. Use to rename authors and correct individual author's sort "
"values" "values"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:165
msgid "Clear series" msgid "Clear series"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:201 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:200
msgid "Clear Ids" msgid "Clear Ids"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:205 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:204
msgid "" msgid ""
"Paste the contents of the clipboard into the identifiers box prefixed with " "Paste the contents of the clipboard into the identifiers box prefixed with "
"isbn:" "isbn:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:218 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:217
msgid "&Download metadata" msgid "&Download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:230 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:229
msgid "Configure download metadata" msgid "Configure download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:234 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:233
msgid "Change how calibre downloads metadata" msgid "Change how calibre downloads metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:295
#, python-format #, python-format
msgid " [%(num)d of %(tot)d]" msgid " [%(num)d of %(tot)d]"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:326
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:333
msgid "Could not read cover" msgid "Could not read cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:328 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327
#, python-format #, python-format
msgid "Could not read cover from %s format" msgid "Could not read cover from %s format"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334
#, python-format #, python-format
msgid "The cover in the %s format is invalid" msgid "The cover in the %s format is invalid"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:493 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:502
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:498 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:507
#, python-format #, python-format
msgid "Save changes and edit the metadata of %s" msgid "Save changes and edit the metadata of %s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:595 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:604
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:800 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:809
msgid "Change cover" msgid "Change cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:654 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:663
msgid "Co&mments" msgid "Co&mments"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:694 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:703
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:841 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:850
msgid "&Metadata" msgid "&Metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:699 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:708
msgid "&Cover and formats" msgid "&Cover and formats"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:769 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:778
msgid "C&ustom metadata" msgid "C&ustom metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:781 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:790
msgid "&Comments" msgid "&Comments"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:847 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:856
msgid "Basic metadata" msgid "Basic metadata"
msgstr "" msgstr ""
@ -14147,7 +14158,7 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:452 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:454
msgid "Failed to start content server" msgid "Failed to start content server"
msgstr "Nije moguće pokrenuti server sa sadržajem" msgstr "Nije moguće pokrenuti server sa sadržajem"
@ -15421,31 +15432,31 @@ msgid ""
"reconvert them?" "reconvert them?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205
msgid "&Donate to support calibre" msgid "&Donate to support calibre"
msgstr "&Izvršite donaciju kako biste pomogli razvoj Calibrea" msgstr "&Izvršite donaciju kako biste pomogli razvoj Calibrea"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241
msgid "&Restore" msgid "&Restore"
msgstr "&Vrati" msgstr "&Vrati"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246
msgid "&Eject connected device" msgid "&Eject connected device"
msgstr "&Izbaci povezani uređaj" msgstr "&Izbaci povezani uređaj"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250
msgid "Quit calibre" msgid "Quit calibre"
msgstr "Zatvori Calibre" msgstr "Zatvori Calibre"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263
msgid "Clear the current search" msgid "Clear the current search"
msgstr "Očisti trenutnu pretragu" msgstr "Očisti trenutnu pretragu"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:363 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:365
msgid "Debug mode" msgid "Debug mode"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:364 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366
#, python-format #, python-format
msgid "" msgid ""
"You have started calibre in debug mode. After you quit calibre, the debug " "You have started calibre in debug mode. After you quit calibre, the debug "
@ -15453,11 +15464,11 @@ msgid ""
"automatically." "automatically."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:386
msgid "Failed to start Content Server" msgid "Failed to start Content Server"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:387
#, python-format #, python-format
msgid "" msgid ""
"Could not start the content server. Error:\n" "Could not start the content server. Error:\n"
@ -15465,7 +15476,7 @@ msgid ""
"%s" "%s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:516 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:518
#, python-format #, python-format
msgid "" msgid ""
"The library database at %s appears to be corrupted. Do you want calibre to " "The library database at %s appears to be corrupted. Do you want calibre to "
@ -15473,34 +15484,34 @@ msgid ""
"successful." "successful."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:600 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:602
msgid "Conversion Error" msgid "Conversion Error"
msgstr "Greška pri pretvaranju" msgstr "Greška pri pretvaranju"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625
msgid "Recipe Disabled" msgid "Recipe Disabled"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:639 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:641
msgid "<b>Failed</b>" msgid "<b>Failed</b>"
msgstr "<b>Neuspjelo</b>" msgstr "<b>Neuspjelo</b>"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:675
msgid "There are active jobs. Are you sure you want to quit?" msgid "There are active jobs. Are you sure you want to quit?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:676 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:678
msgid "" msgid ""
" is communicating with the device!<br>\n" " is communicating with the device!<br>\n"
" Quitting may cause corruption on the device.<br>\n" " Quitting may cause corruption on the device.<br>\n"
" Are you sure you want to quit?" " Are you sure you want to quit?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:680 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:682
msgid "Active jobs" msgid "Active jobs"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:749 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:751
msgid "" msgid ""
"will keep running in the system tray. To close it, choose <b>Quit</b> in the " "will keep running in the system tray. To close it, choose <b>Quit</b> in the "
"context menu of the system tray." "context menu of the system tray."

View File

@ -10,16 +10,16 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: ca\n" "Project-Id-Version: ca\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-04-20 09:28+0000\n" "POT-Creation-Date: 2012-04-27 05:30+0000\n"
"PO-Revision-Date: 2012-04-22 07:10+0000\n" "PO-Revision-Date: 2012-04-27 19:39+0000\n"
"Last-Translator: Ferran Rius <frius64@hotmail.com>\n" "Last-Translator: Ferran Rius <frius64@hotmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Launchpad-Export-Date: 2012-04-23 04:44+0000\n" "X-Launchpad-Export-Date: 2012-04-28 04:38+0000\n"
"X-Generator: Launchpad (build 15135)\n" "X-Generator: Launchpad (build 15149)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing" msgid "Does absolutely nothing"
@ -29,8 +29,8 @@ msgstr "No fa res"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106 #: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109 #: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120 #: /home/kovid/work/calibre/src/calibre/db/cache.py:120
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:319 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:321
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:320 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:322
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@ -110,11 +110,13 @@ msgstr "No fa res"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:497 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:318
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:397
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:850 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:838
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360
@ -147,15 +149,15 @@ msgstr "No fa res"
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425
#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:397
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:402 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:400
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:602 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:603
#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:128
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:151 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:157
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56
@ -175,7 +177,7 @@ msgstr "No fa res"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:388
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204
@ -999,11 +1001,11 @@ msgstr "Targeta B"
msgid "Debug log" msgid "Debug log"
msgstr "Registre de depuració" msgstr "Registre de depuració"
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:17 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:19
msgid "Communicate with Android phones." msgid "Communicate with Android phones."
msgstr "Comunica't amb telèfons Android" msgstr "Comunica't amb telèfons Android"
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:168 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:170
msgid "" msgid ""
"Comma separated list of directories to send e-books to on the device. The " "Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used" "first one that exists will be used"
@ -1011,11 +1013,11 @@ msgstr ""
"Llista de carpetes del dispositiu separades per comes on s'enviaran els " "Llista de carpetes del dispositiu separades per comes on s'enviaran els "
"llibres. Es farà servir la primera que ja existeixi al dispositiu." "llibres. Es farà servir la primera que ja existeixi al dispositiu."
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:259 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:261
msgid "Communicate with S60 phones." msgid "Communicate with S60 phones."
msgstr "Comunica't amb telèfons S60." msgstr "Comunica't amb telèfons S60."
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:278 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:280
msgid "Communicate with WebOS tablets." msgid "Communicate with WebOS tablets."
msgstr "Comunica't amb tauletes tàctils WebOS." msgstr "Comunica't amb tauletes tàctils WebOS."
@ -1164,7 +1166,7 @@ msgstr ""
"Feu clic a «Mostra detalls» per a la llista." "Feu clic a «Mostra detalls» per a la llista."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726 #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:102 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:103
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568
@ -3683,10 +3685,8 @@ msgid "Set the publication date."
msgstr "Estableix la data de publicació." msgstr "Estableix la data de publicació."
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539
msgid "Set the book timestamp (used by the date column in calibre)." msgid "Set the book timestamp (no longer used anywhere)"
msgstr "" msgstr "Estableix la marca horària del llibre (ja no s'utilitza enlloc més)"
"Estableix la marca horària al llibre (utilitzat per la columna data al "
"calibre)."
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543
msgid "" msgid ""
@ -4225,7 +4225,7 @@ msgid "Producer"
msgstr "Productor" msgstr "Productor"
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:934
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245
msgid "Comments" msgid "Comments"
@ -4264,7 +4264,7 @@ msgstr "Idiomes"
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:784 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:784
msgid "Timestamp" msgid "Timestamp"
msgstr "Marca de temps" msgstr "Marca horària"
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:786 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:786
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:168 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:168
@ -4408,8 +4408,8 @@ msgstr ""
"amb ISBN des de LibraryThing.com\n" "amb ISBN des de LibraryThing.com\n"
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1246
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:946
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover" msgid "Cover"
msgstr "Portada" msgstr "Portada"
@ -4545,74 +4545,75 @@ msgstr "Baixa metadades i portades d'OZON.ru"
msgid "This is an Amazon Topaz book. It cannot be processed." msgid "This is an Amazon Topaz book. It cannot be processed."
msgstr "Aquest és un llibre Amazon Topaz. No es pot processar" msgstr "Aquest és un llibre Amazon Topaz. No es pot processar"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:498 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:464
msgid "No details available" msgid "No details available"
msgstr "No es disposa de detalls" msgstr "No es disposa de detalls"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
msgid "Title Page" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1248
msgstr "Pàgina del títol"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199
msgid "Table of Contents" msgid "Table of Contents"
msgstr "Índex" msgstr "Índex"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1247
msgid "Title Page"
msgstr "Pàgina del títol"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1249
msgid "Index" msgid "Index"
msgstr "Índex" msgstr "Índex"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1250
msgid "Glossary" msgid "Glossary"
msgstr "Glossari" msgstr "Glossari"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1263 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1251
msgid "Acknowledgements" msgid "Acknowledgements"
msgstr "Agraïments" msgstr "Agraïments"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1264 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1252
msgid "Bibliography" msgid "Bibliography"
msgstr "Bibliografia" msgstr "Bibliografia"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1265 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1253
msgid "Colophon" msgid "Colophon"
msgstr "Colofó" msgstr "Colofó"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1266 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1254
msgid "Copyright" msgid "Copyright"
msgstr "Drets d'autor" msgstr "Drets d'autor"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1267 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1255
msgid "Dedication" msgid "Dedication"
msgstr "Dedicatòria" msgstr "Dedicatòria"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1268 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1256
msgid "Epigraph" msgid "Epigraph"
msgstr "Epígraf" msgstr "Epígraf"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1269 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1257
msgid "Foreword" msgid "Foreword"
msgstr "Prefaci" msgstr "Prefaci"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1270 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258
msgid "List of Illustrations" msgid "List of Illustrations"
msgstr "Índex d'il·lustracions" msgstr "Índex d'il·lustracions"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1271 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259
msgid "List of Tables" msgid "List of Tables"
msgstr "Índex de taules" msgstr "Índex de taules"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1272 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
msgid "Notes" msgid "Notes"
msgstr "Anotacions" msgstr "Anotacions"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1273 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261
msgid "Preface" msgid "Preface"
msgstr "Pròleg" msgstr "Pròleg"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1274 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262
msgid "Main Text" msgid "Main Text"
msgstr "Text principal" msgstr "Text principal"
@ -5205,9 +5206,9 @@ msgstr "Control de l'addició de llibres"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:178
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:242
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91
msgid "No books selected" msgid "No books selected"
msgstr "No s'ha seleccionat cap llibre" msgstr "No s'ha seleccionat cap llibre"
@ -5666,7 +5667,7 @@ msgstr ""
"aproximada d'un llibre cada tres segons." "aproximada d'un llibre cada tres segons."
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:612 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:614
msgid "Cannot convert" msgid "Cannot convert"
msgstr "No es pot convertir" msgstr "No es pot convertir"
@ -6066,20 +6067,20 @@ msgstr ""
"No s'ha pogut baixar les metadades i/o portades de %d dels llibres. Feu clic " "No s'ha pogut baixar les metadades i/o portades de %d dels llibres. Feu clic "
"a «Mostra detalls» per veure quins llibres són." "a «Mostra detalls» per veure quins llibres són."
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
msgid "Download complete" msgid "Download complete"
msgstr "S'ha acabat la baixada" msgstr "S'ha acabat la baixada"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880
msgid "Download log" msgid "Download log"
msgstr "Registre de baixades" msgstr "Registre de baixades"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:149 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:147
msgid "Some books changed" msgid "Some books changed"
msgstr "Alguns llibres han canviat" msgstr "Alguns llibres han canviat"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:148
msgid "" msgid ""
"The metadata for some books in your library has changed since you started " "The metadata for some books in your library has changed since you started "
"the download. If you proceed, some of those changes may be overwritten. " "the download. If you proceed, some of those changes may be overwritten. "
@ -6091,21 +6092,21 @@ msgstr ""
"d'aquests canvis. Feu clic a «Mostra detalls» per veure la llista dels " "d'aquests canvis. Feu clic a «Mostra detalls» per veure la llista dels "
"llibres canviats. Voleu continuar?" "llibres canviats. Voleu continuar?"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:179 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:177
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:243 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:241
msgid "Cannot edit metadata" msgid "Cannot edit metadata"
msgstr "No es poden editar les metadades" msgstr "No es poden editar les metadades"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:278
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:283 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281
msgid "Cannot merge books" msgid "Cannot merge books"
msgstr "No es pot fusionar els llibres" msgstr "No es pot fusionar els llibres"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:284 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:282
msgid "At least two books must be selected for merging" msgid "At least two books must be selected for merging"
msgstr "Cal seleccionar almenys dos llibres per fer una fusió" msgstr "Cal seleccionar almenys dos llibres per fer una fusió"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:287 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:285
msgid "" msgid ""
"You are about to merge more than 5 books. Are you <b>sure</b> you want to " "You are about to merge more than 5 books. Are you <b>sure</b> you want to "
"proceed?" "proceed?"
@ -6113,7 +6114,7 @@ msgstr ""
"Esteu a punt de fusionar més de 5 llibres. Esteu <b>segur</b> que voleu " "Esteu a punt de fusionar més de 5 llibres. Esteu <b>segur</b> que voleu "
"continuar?" "continuar?"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:294
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be added to the " "Book formats and metadata from the selected books will be added to the "
@ -6126,7 +6127,7 @@ msgstr ""
"suprimira ni canviarà el segon ni els següents llibres seleccionats.<br> " "suprimira ni canviarà el segon ni els següents llibres seleccionats.<br> "
"Confirmeu si voleu continuar." "Confirmeu si voleu continuar."
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:306
#, python-format #, python-format
msgid "" msgid ""
"Book formats from the selected books will be merged into the <b>first " "Book formats from the selected books will be merged into the <b>first "
@ -6148,7 +6149,7 @@ msgstr ""
"permanentment de la biblioteca del calibre.<br><br><b>Segur</b> que voleu " "permanentment de la biblioteca del calibre.<br><br><b>Segur</b> que voleu "
"continuar?" "continuar?"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:324 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:322
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be merged into the " "Book formats and metadata from the selected books will be merged into the "
@ -6167,15 +6168,15 @@ msgstr ""
"duplicats del segon i del següents llibres seleccionats de la biblioteca del " "duplicats del segon i del següents llibres seleccionats de la biblioteca del "
"calibre. <br><br>Esteu <b>segur</b> que voleu continuar?" "calibre. <br><br>Esteu <b>segur</b> que voleu continuar?"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:499 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:497
msgid "Applying changed metadata" msgid "Applying changed metadata"
msgstr "S'està aplicant les metadades canviades" msgstr "S'està aplicant les metadades canviades"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:586
msgid "Some failures" msgid "Some failures"
msgstr "Alguns errors" msgstr "Alguns errors"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:589 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:587
msgid "" msgid ""
"Failed to apply updated metadata for some books in your library. Click " "Failed to apply updated metadata for some books in your library. Click "
"\"Show Details\" to see details." "\"Show Details\" to see details."
@ -6916,17 +6917,17 @@ msgstr "Copia la portada"
msgid "Remove Cover" msgid "Remove Cover"
msgstr "Suprimeix la portada" msgstr "Suprimeix la portada"
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:358 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359
msgid "Double-click to open Book Details window" msgid "Double-click to open Book Details window"
msgstr "Feu doble clic per obrir la finestra de detalls del llibre" msgstr "Feu doble clic per obrir la finestra de detalls del llibre"
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295
msgid "Path" msgid "Path"
msgstr "Camí" msgstr "Camí"
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:361
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109
#, python-format #, python-format
msgid "Cover size: %(width)d x %(height)d" msgid "Cover size: %(width)d x %(height)d"
@ -8061,33 +8062,44 @@ msgstr ""
"Estableix les metadades. El fitxer de sortida contindrà tot el que es pugui " "Estableix les metadades. El fitxer de sortida contindrà tot el que es pugui "
"d'aquestes metadades." "d'aquestes metadades."
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:101
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr "El llibre no té portada"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr "Mida de la portada: %(width)d×%(height)d píxels"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:186
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916
msgid "Choose cover for " msgid "Choose cover for "
msgstr "Tria portada per a " msgstr "Tria portada per a "
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:193
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924
msgid "Cannot read" msgid "Cannot read"
msgstr "No es pot llegir" msgstr "No es pot llegir"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:194
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925
msgid "You do not have permission to read the file: " msgid "You do not have permission to read the file: "
msgstr "No teniu permís per llegir el fitxer: " msgstr "No teniu permís per llegir el fitxer: "
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:202
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:209
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933
msgid "Error reading file" msgid "Error reading file"
msgstr "Error en llegir el fitxer" msgstr "Error en llegir el fitxer"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934
msgid "<p>There was an error reading from file: <br /><b>" msgid "<p>There was an error reading from file: <br /><b>"
msgstr "<p>Hi ha hagut un error en llegir del fitxer: <br /><b>" msgstr "<p>Hi ha hagut un error en llegir del fitxer: <br /><b>"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:210
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944
msgid " is not a valid picture" msgid " is not a valid picture"
msgstr " no és una imatge vàlida" msgstr " no és una imatge vàlida"
@ -8534,17 +8546,17 @@ msgid "&Remove"
msgstr "Sup&rimeix" msgstr "Sup&rimeix"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119
msgid "Load a listof expression from a previously saved file" msgid "Load a list of expressions from a previously saved file"
msgstr "Carrega una llista d'expressions des d'un fitxer desat prèviament" msgstr "Carrega una llista d'expressions d'un fitxer desat prèviament"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120
msgid "&Load" msgid "&Load"
msgstr "&Carrega" msgstr "&Carrega"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121
msgid "Save this list of expression so that you can re-use it easily" msgid "Save this list of expressions so that you can re-use it easily"
msgstr "" msgstr ""
"Deseu aquesta llista d'expressions per tal de poder reutilitzar-la fàcilment" "Desa aquesta llista d'expressions per poder-les tornar a utilitzar fàcilment"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/search_ui.py:131 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/search_ui.py:131
@ -10063,7 +10075,7 @@ msgid "Author names cannot contain & characters."
msgstr "Els noms d'autor no poden contenir caràcters &." msgstr "Els noms d'autor no poden contenir caràcters &."
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:138 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137
msgid "Manage authors" msgid "Manage authors"
msgstr "Gestió d'autors" msgstr "Gestió d'autors"
@ -10158,27 +10170,32 @@ msgid "&Hide all jobs"
msgstr "&Oculta totes les tasques" msgstr "&Oculta totes les tasques"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:296
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:51
msgid "&Copy to clipboard" msgid "&Copy to clipboard"
msgstr "&Copia al porta-retalls" msgstr "&Copia al porta-retalls"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:292 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:299
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:54
msgid "Show &details" msgid "Show &details"
msgstr "Mostra els &detalls" msgstr "Mostra els &detalls"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:293 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:300
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:55
msgid "Hide &details" msgid "Hide &details"
msgstr "Oculta els &detalls" msgstr "Oculta els &detalls"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:304
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:59
msgid "Show detailed information about this error" msgid "Show detailed information about this error"
msgstr "Mostra informació detallada quant a aquest error" msgstr "Mostra informació detallada quant a aquest error"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:318 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:325
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:78
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588
msgid "Copied" msgid "Copied"
msgstr "Copiat" msgstr "Copiat"
@ -10189,10 +10206,11 @@ msgstr "Copiat"
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "Copia-ho al porta-retalls" msgstr "Copia-ho al porta-retalls"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48
msgid "View log" msgid "View log"
msgstr "Mostra el registre" msgstr "Mostra el registre"
@ -10205,7 +10223,7 @@ msgid "Standard metadata"
msgstr "Metadades estàndard" msgstr "Metadades estàndard"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:906 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:915
msgid "Custom metadata" msgid "Custom metadata"
msgstr "Metadades personalitzades" msgstr "Metadades personalitzades"
@ -10415,7 +10433,7 @@ msgstr "Afegeix les eti&quetes "
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:191
msgid "Open Tag Editor" msgid "Open Tag Editor"
msgstr "Obre l'editor d'etiquetes" msgstr "Obre l'editor d'etiquetes"
@ -10585,13 +10603,13 @@ msgid "Set from &ebook file(s)"
msgstr "Estableix a partir del(s) fitxer(s) del llibre" msgstr "Estableix a partir del(s) fitxer(s) del llibre"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:545 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:554
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:711 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:720
msgid "&Basic metadata" msgid "&Basic metadata"
msgstr "Metadades &bàsiques" msgstr "Metadades &bàsiques"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:552 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:561
msgid "&Custom metadata" msgid "&Custom metadata"
msgstr "&Personalitza les metadades" msgstr "&Personalitza les metadades"
@ -12828,7 +12846,7 @@ msgstr "L'UUID del llibre és «{0}»"
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:439
msgid "Permission denied" msgid "Permission denied"
msgstr "S'ha denegat el permís" msgstr "S'ha denegat el permís"
@ -13079,7 +13097,7 @@ msgstr ""
"seguit." "seguit."
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:515 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:517
msgid "Corrupted database" msgid "Corrupted database"
msgstr "Base de dades malmesa" msgstr "Base de dades malmesa"
@ -13165,7 +13183,7 @@ msgstr "Excepció no gestionada"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:441 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440
#, python-format #, python-format
msgid "Could not open %s. Is it being used by another program?" msgid "Could not open %s. Is it being used by another program?"
msgstr "No s'ha pogut obrir %s. L'està fent servir un altre programa?" msgstr "No s'ha pogut obrir %s. L'està fent servir un altre programa?"
@ -13335,15 +13353,6 @@ msgstr "Portada no vàlida"
msgid "Could not change cover as the image is invalid." msgid "Could not change cover as the image is invalid."
msgstr "No s'ha canviat la portada perquè la imatge no és vàlida." msgstr "No s'ha canviat la portada perquè la imatge no és vàlida."
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr "El llibre no té portada"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr "Mida de la portada: %(width)d×%(height)d píxels"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142
msgid "Tags changed" msgid "Tags changed"
msgstr "S'ha canviat les etiquetes" msgstr "S'ha canviat les etiquetes"
@ -13493,11 +13502,11 @@ msgstr "S'ha processat %s"
msgid "Downloaded metadata fields" msgid "Downloaded metadata fields"
msgstr "Camps de metadades descarregats" msgstr "Camps de metadades descarregats"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:31
msgid "Edit Metadata" msgid "Edit Metadata"
msgstr "Edició de metadades" msgstr "Edició de metadades"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:66 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:65
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219
@ -13505,14 +13514,14 @@ msgstr "Edició de metadades"
msgid "Next" msgid "Next"
msgstr "Següent" msgstr "Següent"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:69
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393
msgid "Previous" msgid "Previous"
msgstr "Anterior" msgstr "Anterior"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:118
msgid "" msgid ""
"Automatically create the title sort entry based on the current title entry.\n" "Automatically create the title sort entry based on the current title entry.\n"
"Using this button to create title sort will change title sort from red to " "Using this button to create title sort will change title sort from red to "
@ -13523,7 +13532,7 @@ msgstr ""
"En fer servir aquest botó per crear l'ordre per títol canviarà l'ordre per " "En fer servir aquest botó per crear l'ordre per títol canviarà l'ordre per "
"títol de vermell a verd." "títol de vermell a verd."
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:129
msgid "" msgid ""
"Automatically create the author sort entry based on the current author " "Automatically create the author sort entry based on the current author "
"entry. Using this button to create author sort will change author sort from " "entry. Using this button to create author sort will change author sort from "
@ -13535,27 +13544,27 @@ msgstr ""
"canviarà l'ordre per autor de vermell a verd. Hi ha un menú de funcions " "canviarà l'ordre per autor de vermell a verd. Hi ha un menú de funcions "
"disponible a sota d'aquest botó. Feu clic al botó i manteniu per veure'l." "disponible a sota d'aquest botó. Feu clic al botó i manteniu per veure'l."
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:135
msgid "Set author sort from author" msgid "Set author sort from author"
msgstr "Estableix l'ordre per autor a partir de l'autor" msgstr "Estableix l'ordre per autor a partir de l'autor"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136
msgid "Set author from author sort" msgid "Set author from author sort"
msgstr "Estableix l'autor a partir de l'ordre per autor" msgstr "Estableix l'autor a partir de l'ordre per autor"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:140 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:139
msgid "Copy author to author sort" msgid "Copy author to author sort"
msgstr "Copia autor a ordre per autor" msgstr "Copia autor a ordre per autor"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:141
msgid "Copy author sort to author" msgid "Copy author sort to author"
msgstr "Copia ordre per autor a autor" msgstr "Copia ordre per autor a autor"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:152
msgid "Swap the author and title" msgid "Swap the author and title"
msgstr "Intercanvia l'autor i el títol" msgstr "Intercanvia l'autor i el títol"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:158
msgid "" msgid ""
"Manage authors. Use to rename authors and correct individual author's sort " "Manage authors. Use to rename authors and correct individual author's sort "
"values" "values"
@ -13563,15 +13572,15 @@ msgstr ""
"Gestió d'autors. S'utilitza per reanomena autors i corregir els valors " "Gestió d'autors. S'utilitza per reanomena autors i corregir els valors "
"individuals d'ordre per autor" "individuals d'ordre per autor"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:165
msgid "Clear series" msgid "Clear series"
msgstr "Suprimeix la sèrie" msgstr "Suprimeix la sèrie"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:201 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:200
msgid "Clear Ids" msgid "Clear Ids"
msgstr "Suprimeix l'identificador" msgstr "Suprimeix l'identificador"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:205 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:204
msgid "" msgid ""
"Paste the contents of the clipboard into the identifiers box prefixed with " "Paste the contents of the clipboard into the identifiers box prefixed with "
"isbn:" "isbn:"
@ -13579,71 +13588,71 @@ msgstr ""
"Enganxa els continguts del porta-retalls al quadre d'identificadors amb el " "Enganxa els continguts del porta-retalls al quadre d'identificadors amb el "
"prefix «isbn:»" "prefix «isbn:»"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:218 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:217
msgid "&Download metadata" msgid "&Download metadata"
msgstr "&Baixa les metadades" msgstr "&Baixa les metadades"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:230 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:229
msgid "Configure download metadata" msgid "Configure download metadata"
msgstr "Configura la baixada de metadades" msgstr "Configura la baixada de metadades"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:234 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:233
msgid "Change how calibre downloads metadata" msgid "Change how calibre downloads metadata"
msgstr "Canvia com el calibre baixa les metadades" msgstr "Canvia com el calibre baixa les metadades"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:295
#, python-format #, python-format
msgid " [%(num)d of %(tot)d]" msgid " [%(num)d of %(tot)d]"
msgstr " [%(num)d de %(tot)d]" msgstr " [%(num)d de %(tot)d]"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:326
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:333
msgid "Could not read cover" msgid "Could not read cover"
msgstr "No s'ha pogut llegir la portada" msgstr "No s'ha pogut llegir la portada"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:328 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327
#, python-format #, python-format
msgid "Could not read cover from %s format" msgid "Could not read cover from %s format"
msgstr "No s'ha pogut llegir la portada del format %s" msgstr "No s'ha pogut llegir la portada del format %s"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334
#, python-format #, python-format
msgid "The cover in the %s format is invalid" msgid "The cover in the %s format is invalid"
msgstr "La portada del format %s no és vàlida" msgstr "La portada del format %s no és vàlida"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:493 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:502
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:498 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:507
#, python-format #, python-format
msgid "Save changes and edit the metadata of %s" msgid "Save changes and edit the metadata of %s"
msgstr "Desa els canvis i edita les metadades de %s" msgstr "Desa els canvis i edita les metadades de %s"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:595 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:604
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:800 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:809
msgid "Change cover" msgid "Change cover"
msgstr "Canvia la portada" msgstr "Canvia la portada"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:654 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:663
msgid "Co&mments" msgid "Co&mments"
msgstr "Co&mentaris" msgstr "Co&mentaris"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:694 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:703
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:841 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:850
msgid "&Metadata" msgid "&Metadata"
msgstr "&Metadades" msgstr "&Metadades"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:699 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:708
msgid "&Cover and formats" msgid "&Cover and formats"
msgstr "&Portada i formats" msgstr "&Portada i formats"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:769 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:778
msgid "C&ustom metadata" msgid "C&ustom metadata"
msgstr "Metadades &personalitzades" msgstr "Metadades &personalitzades"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:781 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:790
msgid "&Comments" msgid "&Comments"
msgstr "&Comentaris" msgstr "&Comentaris"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:847 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:856
msgid "Basic metadata" msgid "Basic metadata"
msgstr "Metadades bàsiques" msgstr "Metadades bàsiques"
@ -15990,7 +15999,7 @@ msgstr ""
"Preferències->Avançat->Connectors" "Preferències->Avançat->Connectors"
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:452 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:454
msgid "Failed to start content server" msgid "Failed to start content server"
msgstr "No s'ha pogut iniciar el servidor de continguts" msgstr "No s'ha pogut iniciar el servidor de continguts"
@ -17442,31 +17451,31 @@ msgstr ""
"Els llibres següents ja s'han convertit al format %s. Els voleu tornar a " "Els llibres següents ja s'han convertit al format %s. Els voleu tornar a "
"convertir?" "convertir?"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205
msgid "&Donate to support calibre" msgid "&Donate to support calibre"
msgstr "Feu una &donació per donar suport al calibre" msgstr "Feu una &donació per donar suport al calibre"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241
msgid "&Restore" msgid "&Restore"
msgstr "&Restaura" msgstr "&Restaura"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246
msgid "&Eject connected device" msgid "&Eject connected device"
msgstr "&Expulseu el dispositiu connectat" msgstr "&Expulseu el dispositiu connectat"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250
msgid "Quit calibre" msgid "Quit calibre"
msgstr "Surt del calibre" msgstr "Surt del calibre"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263
msgid "Clear the current search" msgid "Clear the current search"
msgstr "Suprimeix la cerca actual" msgstr "Suprimeix la cerca actual"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:363 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:365
msgid "Debug mode" msgid "Debug mode"
msgstr "Mode de depuració" msgstr "Mode de depuració"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:364 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366
#, python-format #, python-format
msgid "" msgid ""
"You have started calibre in debug mode. After you quit calibre, the debug " "You have started calibre in debug mode. After you quit calibre, the debug "
@ -17477,11 +17486,11 @@ msgstr ""
"el registre de depuració estarà disponible al fitxer: %s<p> El registre es " "el registre de depuració estarà disponible al fitxer: %s<p> El registre es "
"mostrarà automàticament." "mostrarà automàticament."
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:386
msgid "Failed to start Content Server" msgid "Failed to start Content Server"
msgstr "No s'ha pogut iniciar el servidor de continguts" msgstr "No s'ha pogut iniciar el servidor de continguts"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:387
#, python-format #, python-format
msgid "" msgid ""
"Could not start the content server. Error:\n" "Could not start the content server. Error:\n"
@ -17492,7 +17501,7 @@ msgstr ""
"\n" "\n"
"%s" "%s"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:516 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:518
#, python-format #, python-format
msgid "" msgid ""
"The library database at %s appears to be corrupted. Do you want calibre to " "The library database at %s appears to be corrupted. Do you want calibre to "
@ -17503,23 +17512,23 @@ msgstr ""
"el calibre intenti reconstruir-la automàticament? Pot ser que no es pugui " "el calibre intenti reconstruir-la automàticament? Pot ser que no es pugui "
"reconstruir totalment." "reconstruir totalment."
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:600 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:602
msgid "Conversion Error" msgid "Conversion Error"
msgstr "Error de conversió" msgstr "Error de conversió"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625
msgid "Recipe Disabled" msgid "Recipe Disabled"
msgstr "Recepta inhabilitada" msgstr "Recepta inhabilitada"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:639 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:641
msgid "<b>Failed</b>" msgid "<b>Failed</b>"
msgstr "<b>Ha fallat</b>" msgstr "<b>Ha fallat</b>"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:675
msgid "There are active jobs. Are you sure you want to quit?" msgid "There are active jobs. Are you sure you want to quit?"
msgstr "Hi ha tasques actives. Segur que voleu sortir?" msgstr "Hi ha tasques actives. Segur que voleu sortir?"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:676 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:678
msgid "" msgid ""
" is communicating with the device!<br>\n" " is communicating with the device!<br>\n"
" Quitting may cause corruption on the device.<br>\n" " Quitting may cause corruption on the device.<br>\n"
@ -17529,11 +17538,11 @@ msgstr ""
" Si sortiu podeu malmetre el dispositiu.<br>\n" " Si sortiu podeu malmetre el dispositiu.<br>\n"
" Segur que voleu sortir?" " Segur que voleu sortir?"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:680 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:682
msgid "Active jobs" msgid "Active jobs"
msgstr "Tasques actives" msgstr "Tasques actives"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:749 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:751
msgid "" msgid ""
"will keep running in the system tray. To close it, choose <b>Quit</b> in the " "will keep running in the system tray. To close it, choose <b>Quit</b> in the "
"context menu of the system tray." "context menu of the system tray."

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: calibre\n" "Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-04-20 09:28+0000\n" "POT-Creation-Date: 2012-04-27 05:30+0000\n"
"PO-Revision-Date: 2012-02-11 21:21+0000\n" "PO-Revision-Date: 2012-02-11 21:21+0000\n"
"Last-Translator: Marek Sušický <Unknown>\n" "Last-Translator: Marek Sušický <Unknown>\n"
"Language-Team: Czech <cs@li.org>\n" "Language-Team: Czech <cs@li.org>\n"
@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Launchpad-Export-Date: 2012-04-21 04:44+0000\n" "X-Launchpad-Export-Date: 2012-04-28 04:38+0000\n"
"X-Generator: Launchpad (build 15120)\n" "X-Generator: Launchpad (build 15149)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing" msgid "Does absolutely nothing"
@ -26,8 +26,8 @@ msgstr "Nedělá vůbec nic"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106 #: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109 #: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120 #: /home/kovid/work/calibre/src/calibre/db/cache.py:120
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:319 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:321
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:320 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:322
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@ -107,11 +107,13 @@ msgstr "Nedělá vůbec nic"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:497 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:318
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:397
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:850 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:838
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360
@ -144,15 +146,15 @@ msgstr "Nedělá vůbec nic"
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425
#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:397
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:402 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:400
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:602 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:603
#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:128
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:151 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:157
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56
@ -172,7 +174,7 @@ msgstr "Nedělá vůbec nic"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:388
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204
@ -976,11 +978,11 @@ msgstr "Karta B"
msgid "Debug log" msgid "Debug log"
msgstr "Protokol ladění" msgstr "Protokol ladění"
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:17 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:19
msgid "Communicate with Android phones." msgid "Communicate with Android phones."
msgstr "Komunikace s telefony Android." msgstr "Komunikace s telefony Android."
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:168 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:170
msgid "" msgid ""
"Comma separated list of directories to send e-books to on the device. The " "Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used" "first one that exists will be used"
@ -988,11 +990,11 @@ msgstr ""
"Seznam adresářů oddělený čárkami k odeslání elektronických knih do zařízení. " "Seznam adresářů oddělený čárkami k odeslání elektronických knih do zařízení. "
"Bude použit první nalezený." "Bude použit první nalezený."
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:259 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:261
msgid "Communicate with S60 phones." msgid "Communicate with S60 phones."
msgstr "Komunikovat s telefony S60." msgstr "Komunikovat s telefony S60."
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:278 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:280
msgid "Communicate with WebOS tablets." msgid "Communicate with WebOS tablets."
msgstr "Spojeno s tablety s WebOS" msgstr "Spojeno s tablety s WebOS"
@ -1127,7 +1129,7 @@ msgstr ""
"Pro zobrazení seznamu klepněte na 'Zobrazit podrobnosti'." "Pro zobrazení seznamu klepněte na 'Zobrazit podrobnosti'."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726 #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:102 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:103
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568
@ -3451,9 +3453,8 @@ msgid "Set the publication date."
msgstr "Nastaví datum vydání." msgstr "Nastaví datum vydání."
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539
msgid "Set the book timestamp (used by the date column in calibre)." msgid "Set the book timestamp (no longer used anywhere)"
msgstr "" msgstr ""
"Nastaví časové razítko knihy (použije se ve sloupci datum v calibre)."
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543
msgid "" msgid ""
@ -3980,7 +3981,7 @@ msgid "Producer"
msgstr "Producent" msgstr "Producent"
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:934
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245
msgid "Comments" msgid "Comments"
@ -4163,8 +4164,8 @@ msgstr ""
"LibraryThing.com\n" "LibraryThing.com\n"
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1246
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:946
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover" msgid "Cover"
msgstr "Obálka" msgstr "Obálka"
@ -4295,74 +4296,75 @@ msgstr "Stáhnout metadata a obálky z OZON.ru"
msgid "This is an Amazon Topaz book. It cannot be processed." msgid "This is an Amazon Topaz book. It cannot be processed."
msgstr "Toto je kniha Amazon Topaz. Ta nemůže být zpracována." msgstr "Toto je kniha Amazon Topaz. Ta nemůže být zpracována."
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:498 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:464
msgid "No details available" msgid "No details available"
msgstr "Žádné detaily nejsou k dispozici" msgstr "Žádné detaily nejsou k dispozici"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
msgid "Title Page" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1248
msgstr "Titulní stránka"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199
msgid "Table of Contents" msgid "Table of Contents"
msgstr "Obsah" msgstr "Obsah"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1247
msgid "Title Page"
msgstr "Titulní stránka"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1249
msgid "Index" msgid "Index"
msgstr "Rejstřík" msgstr "Rejstřík"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1250
msgid "Glossary" msgid "Glossary"
msgstr "Slovník pojmů" msgstr "Slovník pojmů"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1263 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1251
msgid "Acknowledgements" msgid "Acknowledgements"
msgstr "Pděkování" msgstr "Pděkování"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1264 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1252
msgid "Bibliography" msgid "Bibliography"
msgstr "Bibliografie" msgstr "Bibliografie"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1265 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1253
msgid "Colophon" msgid "Colophon"
msgstr "Tiráž" msgstr "Tiráž"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1266 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1254
msgid "Copyright" msgid "Copyright"
msgstr "Autorská práva" msgstr "Autorská práva"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1267 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1255
msgid "Dedication" msgid "Dedication"
msgstr "Věnování" msgstr "Věnování"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1268 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1256
msgid "Epigraph" msgid "Epigraph"
msgstr "Doslov" msgstr "Doslov"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1269 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1257
msgid "Foreword" msgid "Foreword"
msgstr "Předmluva" msgstr "Předmluva"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1270 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258
msgid "List of Illustrations" msgid "List of Illustrations"
msgstr "Seznam Ilustrací" msgstr "Seznam Ilustrací"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1271 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259
msgid "List of Tables" msgid "List of Tables"
msgstr "Seznam tabulek" msgstr "Seznam tabulek"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1272 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
msgid "Notes" msgid "Notes"
msgstr "Poznámky" msgstr "Poznámky"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1273 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261
msgid "Preface" msgid "Preface"
msgstr "Úvod" msgstr "Úvod"
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1274 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262
msgid "Main Text" msgid "Main Text"
msgstr "Hlavní text" msgstr "Hlavní text"
@ -4937,9 +4939,9 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:178
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:242
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91
msgid "No books selected" msgid "No books selected"
msgstr "Nejsou označeny žádné knihy" msgstr "Nejsou označeny žádné knihy"
@ -5388,7 +5390,7 @@ msgid "Create a catalog of the books in your calibre library"
msgstr "Vytvořit katalog z knih ve Vaší calibre knihovně" msgstr "Vytvořit katalog z knih ve Vaší calibre knihovně"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:612 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:614
msgid "Cannot convert" msgid "Cannot convert"
msgstr "Nemůžu převást" msgstr "Nemůžu převást"
@ -5774,20 +5776,20 @@ msgid ""
"details\" to see which books." "details\" to see which books."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
msgid "Download complete" msgid "Download complete"
msgstr "Stahování dokončeno" msgstr "Stahování dokončeno"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880
msgid "Download log" msgid "Download log"
msgstr "Download log" msgstr "Download log"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:149 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:147
msgid "Some books changed" msgid "Some books changed"
msgstr "Některé knihy se změnily" msgstr "Některé knihy se změnily"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:148
msgid "" msgid ""
"The metadata for some books in your library has changed since you started " "The metadata for some books in your library has changed since you started "
"the download. If you proceed, some of those changes may be overwritten. " "the download. If you proceed, some of those changes may be overwritten. "
@ -5795,27 +5797,27 @@ msgid ""
"proceed?" "proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:179 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:177
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:243 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:241
msgid "Cannot edit metadata" msgid "Cannot edit metadata"
msgstr "Nemůžu upravit metadata" msgstr "Nemůžu upravit metadata"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:278
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:283 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281
msgid "Cannot merge books" msgid "Cannot merge books"
msgstr "Nemohu sloučit knihy" msgstr "Nemohu sloučit knihy"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:284 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:282
msgid "At least two books must be selected for merging" msgid "At least two books must be selected for merging"
msgstr "Pro sloučení je nutné označit nejméně 2 knihy" msgstr "Pro sloučení je nutné označit nejméně 2 knihy"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:287 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:285
msgid "" msgid ""
"You are about to merge more than 5 books. Are you <b>sure</b> you want to " "You are about to merge more than 5 books. Are you <b>sure</b> you want to "
"proceed?" "proceed?"
msgstr "Chystáte se spojit více než 5 knih. Jste si jisti?" msgstr "Chystáte se spojit více než 5 knih. Jste si jisti?"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:294
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be added to the " "Book formats and metadata from the selected books will be added to the "
@ -5828,7 +5830,7 @@ msgstr ""
"vybrané knihy nebudou odstraněny nebo změněny.<br><br>Prosím potvrďte, že " "vybrané knihy nebudou odstraněny nebo změněny.<br><br>Prosím potvrďte, že "
"chcete pokračovat." "chcete pokračovat."
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:306
#, python-format #, python-format
msgid "" msgid ""
"Book formats from the selected books will be merged into the <b>first " "Book formats from the selected books will be merged into the <b>first "
@ -5849,7 +5851,7 @@ msgstr ""
"<b>odstraněny</b> z vaší knihovny calibre.<br><br> Jste si <b>jistí</b> že " "<b>odstraněny</b> z vaší knihovny calibre.<br><br> Jste si <b>jistí</b> že "
"to chcete provést?" "to chcete provést?"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:324 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:322
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be merged into the " "Book formats and metadata from the selected books will be merged into the "
@ -5867,15 +5869,15 @@ msgstr ""
"dalších vybraných knihách budou trvale <b>odstraněny</b> z vaší knihovny " "dalších vybraných knihách budou trvale <b>odstraněny</b> z vaší knihovny "
"calibre.<br><br> Jste si <b>jistí</b> že to chcete provést?" "calibre.<br><br> Jste si <b>jistí</b> že to chcete provést?"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:499 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:497
msgid "Applying changed metadata" msgid "Applying changed metadata"
msgstr "Použít změněná metadata" msgstr "Použít změněná metadata"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:586
msgid "Some failures" msgid "Some failures"
msgstr "Vyskytly se chyby" msgstr "Vyskytly se chyby"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:589 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:587
msgid "" msgid ""
"Failed to apply updated metadata for some books in your library. Click " "Failed to apply updated metadata for some books in your library. Click "
"\"Show Details\" to see details." "\"Show Details\" to see details."
@ -6602,17 +6604,17 @@ msgstr "Kopírovat obálku"
msgid "Remove Cover" msgid "Remove Cover"
msgstr "Odebrat obal" msgstr "Odebrat obal"
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:358 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359
msgid "Double-click to open Book Details window" msgid "Double-click to open Book Details window"
msgstr "Klikněte 2x pro zobrazení podrobností o knize" msgstr "Klikněte 2x pro zobrazení podrobností o knize"
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295
msgid "Path" msgid "Path"
msgstr "Cesta" msgstr "Cesta"
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:361
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109
#, python-format #, python-format
msgid "Cover size: %(width)d x %(height)d" msgid "Cover size: %(width)d x %(height)d"
@ -7697,33 +7699,44 @@ msgstr ""
"Nastavit metadata. Výstupní soubor obsahuje tolik metadat, jak je to jen " "Nastavit metadata. Výstupní soubor obsahuje tolik metadat, jak je to jen "
"možné." "možné."
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:101
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr "Tato kniha nemá obálku"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:186
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916
msgid "Choose cover for " msgid "Choose cover for "
msgstr "Vyberte obálku pro " msgstr "Vyberte obálku pro "
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:193
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924
msgid "Cannot read" msgid "Cannot read"
msgstr "Nemůžu přečíst" msgstr "Nemůžu přečíst"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:194
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925
msgid "You do not have permission to read the file: " msgid "You do not have permission to read the file: "
msgstr "Nemáte přístupová práva na čtení souboru: " msgstr "Nemáte přístupová práva na čtení souboru: "
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:202
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:209
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933
msgid "Error reading file" msgid "Error reading file"
msgstr "Chyba při čtení souboru" msgstr "Chyba při čtení souboru"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934
msgid "<p>There was an error reading from file: <br /><b>" msgid "<p>There was an error reading from file: <br /><b>"
msgstr "<p>Chyba při čtení souboru: <br /><b>" msgstr "<p>Chyba při čtení souboru: <br /><b>"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:210
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944
msgid " is not a valid picture" msgid " is not a valid picture"
msgstr " není platný obrazový soubor" msgstr " není platný obrazový soubor"
@ -8151,7 +8164,7 @@ msgid "&Remove"
msgstr "Odst&ranit" msgstr "Odst&ranit"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119
msgid "Load a listof expression from a previously saved file" msgid "Load a list of expressions from a previously saved file"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120
@ -8159,7 +8172,7 @@ msgid "&Load"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121
msgid "Save this list of expression so that you can re-use it easily" msgid "Save this list of expressions so that you can re-use it easily"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122
@ -9619,7 +9632,7 @@ msgid "Author names cannot contain & characters."
msgstr "Jméno autora nemůže obsahovat znaky &." msgstr "Jméno autora nemůže obsahovat znaky &."
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:138 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137
msgid "Manage authors" msgid "Manage authors"
msgstr "Spravovat autory" msgstr "Spravovat autory"
@ -9707,27 +9720,32 @@ msgid "&Hide all jobs"
msgstr "&Skrýt všechny úlohy" msgstr "&Skrýt všechny úlohy"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:296
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:51
msgid "&Copy to clipboard" msgid "&Copy to clipboard"
msgstr "&Kopírovat do schránky" msgstr "&Kopírovat do schránky"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:292 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:299
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:54
msgid "Show &details" msgid "Show &details"
msgstr "Zobrazit &detaily" msgstr "Zobrazit &detaily"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:293 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:300
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:55
msgid "Hide &details" msgid "Hide &details"
msgstr "Skrýt &detaily" msgstr "Skrýt &detaily"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:304
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:59
msgid "Show detailed information about this error" msgid "Show detailed information about this error"
msgstr "Zobrazit detailní informace o této chybě" msgstr "Zobrazit detailní informace o této chybě"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:318 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:325
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:78
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588
msgid "Copied" msgid "Copied"
msgstr "Kopírováno" msgstr "Kopírováno"
@ -9738,10 +9756,11 @@ msgstr "Kopírováno"
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "Kopírovat do schránky" msgstr "Kopírovat do schránky"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48
msgid "View log" msgid "View log"
msgstr "Zobrazit log" msgstr "Zobrazit log"
@ -9754,7 +9773,7 @@ msgid "Standard metadata"
msgstr "Standardní metadata" msgstr "Standardní metadata"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:906 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:915
msgid "Custom metadata" msgid "Custom metadata"
msgstr "Volitelná metadata" msgstr "Volitelná metadata"
@ -9948,7 +9967,7 @@ msgstr "Přidat tagy: "
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:191
msgid "Open Tag Editor" msgid "Open Tag Editor"
msgstr "Otevřít Editor značek" msgstr "Otevřít Editor značek"
@ -10106,13 +10125,13 @@ msgid "Set from &ebook file(s)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:545 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:554
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:711 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:720
msgid "&Basic metadata" msgid "&Basic metadata"
msgstr "Základní metadata" msgstr "Základní metadata"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:552 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:561
msgid "&Custom metadata" msgid "&Custom metadata"
msgstr "Uživatelská metadata" msgstr "Uživatelská metadata"
@ -12230,7 +12249,7 @@ msgstr "UUID knihy je \"{0}\""
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:439
msgid "Permission denied" msgid "Permission denied"
msgstr "Přístup odmítnut" msgstr "Přístup odmítnut"
@ -12466,7 +12485,7 @@ msgid "Bad database location %r. calibre will now quit."
msgstr "Špatné umístění databáze %r. Calibre bude nyní ukončeno." msgstr "Špatné umístění databáze %r. Calibre bude nyní ukončeno."
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:515 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:517
msgid "Corrupted database" msgid "Corrupted database"
msgstr "Poškozená databáze" msgstr "Poškozená databáze"
@ -12546,7 +12565,7 @@ msgstr "Neobsloužená výjimka"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:441 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440
#, python-format #, python-format
msgid "Could not open %s. Is it being used by another program?" msgid "Could not open %s. Is it being used by another program?"
msgstr "Nelze otevřít %s. Je používán jiným programem?" msgstr "Nelze otevřít %s. Je používán jiným programem?"
@ -12704,15 +12723,6 @@ msgstr ""
msgid "Could not change cover as the image is invalid." msgid "Could not change cover as the image is invalid."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr "Tato kniha nemá obálku"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142
msgid "Tags changed" msgid "Tags changed"
msgstr "Tagy změněny" msgstr "Tagy změněny"
@ -12854,11 +12864,11 @@ msgstr ""
msgid "Downloaded metadata fields" msgid "Downloaded metadata fields"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:31
msgid "Edit Metadata" msgid "Edit Metadata"
msgstr "Upravit metadata" msgstr "Upravit metadata"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:66 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:65
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219
@ -12866,21 +12876,21 @@ msgstr "Upravit metadata"
msgid "Next" msgid "Next"
msgstr "Další" msgstr "Další"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:69
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393
msgid "Previous" msgid "Previous"
msgstr "Předchozí" msgstr "Předchozí"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:118
msgid "" msgid ""
"Automatically create the title sort entry based on the current title entry.\n" "Automatically create the title sort entry based on the current title entry.\n"
"Using this button to create title sort will change title sort from red to " "Using this button to create title sort will change title sort from red to "
"green." "green."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:129
msgid "" msgid ""
"Automatically create the author sort entry based on the current author " "Automatically create the author sort entry based on the current author "
"entry. Using this button to create author sort will change author sort from " "entry. Using this button to create author sort will change author sort from "
@ -12888,111 +12898,111 @@ msgid ""
"Click and hold on the button to see it." "Click and hold on the button to see it."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:135
msgid "Set author sort from author" msgid "Set author sort from author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136
msgid "Set author from author sort" msgid "Set author from author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:140 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:139
msgid "Copy author to author sort" msgid "Copy author to author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:141
msgid "Copy author sort to author" msgid "Copy author sort to author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:152
msgid "Swap the author and title" msgid "Swap the author and title"
msgstr "Prohodit autora a název" msgstr "Prohodit autora a název"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:158
msgid "" msgid ""
"Manage authors. Use to rename authors and correct individual author's sort " "Manage authors. Use to rename authors and correct individual author's sort "
"values" "values"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:165
msgid "Clear series" msgid "Clear series"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:201 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:200
msgid "Clear Ids" msgid "Clear Ids"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:205 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:204
msgid "" msgid ""
"Paste the contents of the clipboard into the identifiers box prefixed with " "Paste the contents of the clipboard into the identifiers box prefixed with "
"isbn:" "isbn:"
msgstr "Vloží obsah schránky do boxu identifikátorů s prefixem isbn:" msgstr "Vloží obsah schránky do boxu identifikátorů s prefixem isbn:"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:218 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:217
msgid "&Download metadata" msgid "&Download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:230 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:229
msgid "Configure download metadata" msgid "Configure download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:234 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:233
msgid "Change how calibre downloads metadata" msgid "Change how calibre downloads metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:295
#, python-format #, python-format
msgid " [%(num)d of %(tot)d]" msgid " [%(num)d of %(tot)d]"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:326
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:333
msgid "Could not read cover" msgid "Could not read cover"
msgstr "Nepodařilo se načíst obálku" msgstr "Nepodařilo se načíst obálku"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:328 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327
#, python-format #, python-format
msgid "Could not read cover from %s format" msgid "Could not read cover from %s format"
msgstr "Nemohu načíst obal z %s formátu" msgstr "Nemohu načíst obal z %s formátu"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334
#, python-format #, python-format
msgid "The cover in the %s format is invalid" msgid "The cover in the %s format is invalid"
msgstr "Obal ve %s formátu je neplatný" msgstr "Obal ve %s formátu je neplatný"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:493 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:502
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:498 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:507
#, python-format #, python-format
msgid "Save changes and edit the metadata of %s" msgid "Save changes and edit the metadata of %s"
msgstr "Uložit změny a změnit metadata %s" msgstr "Uložit změny a změnit metadata %s"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:595 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:604
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:800 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:809
msgid "Change cover" msgid "Change cover"
msgstr "Změnit obálku" msgstr "Změnit obálku"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:654 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:663
msgid "Co&mments" msgid "Co&mments"
msgstr "&Komentáře" msgstr "&Komentáře"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:694 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:703
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:841 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:850
msgid "&Metadata" msgid "&Metadata"
msgstr "&Metadata" msgstr "&Metadata"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:699 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:708
msgid "&Cover and formats" msgid "&Cover and formats"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:769 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:778
msgid "C&ustom metadata" msgid "C&ustom metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:781 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:790
msgid "&Comments" msgid "&Comments"
msgstr "&Komentáře" msgstr "&Komentáře"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:847 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:856
msgid "Basic metadata" msgid "Basic metadata"
msgstr "" msgstr ""
@ -15043,7 +15053,7 @@ msgstr ""
"Upřesnit-> Pluginy" "Upřesnit-> Pluginy"
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:452 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:454
msgid "Failed to start content server" msgid "Failed to start content server"
msgstr "Nepodařilo se spustit obdahový server" msgstr "Nepodařilo se spustit obdahový server"
@ -16327,31 +16337,31 @@ msgstr ""
"Následující knihy již byly převedeny do %s formátu. Přejete si je " "Následující knihy již byly převedeny do %s formátu. Přejete si je "
"překonvertovat?" "překonvertovat?"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205
msgid "&Donate to support calibre" msgid "&Donate to support calibre"
msgstr "&Přispějte na vývoj calibre." msgstr "&Přispějte na vývoj calibre."
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241
msgid "&Restore" msgid "&Restore"
msgstr "&Obnovit" msgstr "&Obnovit"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246
msgid "&Eject connected device" msgid "&Eject connected device"
msgstr "&Vysunout připojené zařízení" msgstr "&Vysunout připojené zařízení"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250
msgid "Quit calibre" msgid "Quit calibre"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263
msgid "Clear the current search" msgid "Clear the current search"
msgstr "Smaž poslední hledání" msgstr "Smaž poslední hledání"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:363 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:365
msgid "Debug mode" msgid "Debug mode"
msgstr "Ladící režim" msgstr "Ladící režim"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:364 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366
#, python-format #, python-format
msgid "" msgid ""
"You have started calibre in debug mode. After you quit calibre, the debug " "You have started calibre in debug mode. After you quit calibre, the debug "
@ -16359,11 +16369,11 @@ msgid ""
"automatically." "automatically."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:386
msgid "Failed to start Content Server" msgid "Failed to start Content Server"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:387
#, python-format #, python-format
msgid "" msgid ""
"Could not start the content server. Error:\n" "Could not start the content server. Error:\n"
@ -16371,7 +16381,7 @@ msgid ""
"%s" "%s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:516 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:518
#, python-format #, python-format
msgid "" msgid ""
"The library database at %s appears to be corrupted. Do you want calibre to " "The library database at %s appears to be corrupted. Do you want calibre to "
@ -16379,23 +16389,23 @@ msgid ""
"successful." "successful."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:600 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:602
msgid "Conversion Error" msgid "Conversion Error"
msgstr "Chyba převodu" msgstr "Chyba převodu"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625
msgid "Recipe Disabled" msgid "Recipe Disabled"
msgstr "Zdroj zakázán" msgstr "Zdroj zakázán"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:639 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:641
msgid "<b>Failed</b>" msgid "<b>Failed</b>"
msgstr "<b>Selhalo</b>" msgstr "<b>Selhalo</b>"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:675
msgid "There are active jobs. Are you sure you want to quit?" msgid "There are active jobs. Are you sure you want to quit?"
msgstr "Prpbíha zpracování úloh. Opravdu chcete program ukončit?" msgstr "Prpbíha zpracování úloh. Opravdu chcete program ukončit?"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:676 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:678
msgid "" msgid ""
" is communicating with the device!<br>\n" " is communicating with the device!<br>\n"
" Quitting may cause corruption on the device.<br>\n" " Quitting may cause corruption on the device.<br>\n"
@ -16405,11 +16415,11 @@ msgstr ""
" Ukončení může způsobit poškození v zařízení.<br>\n" " Ukončení může způsobit poškození v zařízení.<br>\n"
" Jste si jisti?" " Jste si jisti?"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:680 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:682
msgid "Active jobs" msgid "Active jobs"
msgstr "Aktivní joby" msgstr "Aktivní joby"
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:749 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:751
msgid "" msgid ""
"will keep running in the system tray. To close it, choose <b>Quit</b> in the " "will keep running in the system tray. To close it, choose <b>Quit</b> in the "
"context menu of the system tray." "context menu of the system tray."

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: calibre\n" "Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-04-20 09:28+0000\n" "POT-Creation-Date: 2012-04-27 05:30+0000\n"
"PO-Revision-Date: 2012-02-26 20:21+0000\n" "PO-Revision-Date: 2012-02-26 20:21+0000\n"
"Last-Translator: Rachael Munns <vashtijoy@gmail.com>\n" "Last-Translator: Rachael Munns <vashtijoy@gmail.com>\n"
"Language-Team: Welsh <cy@li.org>\n" "Language-Team: Welsh <cy@li.org>\n"
@ -16,8 +16,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : (n != 8 && n != 11) ? " "Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : (n != 8 && n != 11) ? "
"2 : 3;\n" "2 : 3;\n"
"X-Launchpad-Export-Date: 2012-04-21 04:56+0000\n" "X-Launchpad-Export-Date: 2012-04-28 04:51+0000\n"
"X-Generator: Launchpad (build 15120)\n" "X-Generator: Launchpad (build 15149)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing" msgid "Does absolutely nothing"
@ -27,8 +27,8 @@ msgstr "Dim yn gwneud dim byd"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106 #: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109 #: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120 #: /home/kovid/work/calibre/src/calibre/db/cache.py:120
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:319 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:321
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:320 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:322
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@ -108,11 +108,13 @@ msgstr "Dim yn gwneud dim byd"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:133
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:175
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:497 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:318
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:397
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:168
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:170
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:850 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:838
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:360
@ -145,15 +147,15 @@ msgstr "Dim yn gwneud dim byd"
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:417
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:425
#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:397
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:402 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:400
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:166
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:602 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:603
#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:128
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:151 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:157
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:159
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1205
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1208
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56
@ -173,7 +175,7 @@ msgstr "Dim yn gwneud dim byd"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:264
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:388
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:171
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204
@ -944,21 +946,21 @@ msgstr "Cerdyn B"
msgid "Debug log" msgid "Debug log"
msgstr "Cofnodydd dadfygio" msgstr "Cofnodydd dadfygio"
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:17 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:19
msgid "Communicate with Android phones." msgid "Communicate with Android phones."
msgstr "Cyfathrebwch gyda ffoniau Android" msgstr "Cyfathrebwch gyda ffoniau Android"
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:168 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:170
msgid "" msgid ""
"Comma separated list of directories to send e-books to on the device. The " "Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used" "first one that exists will be used"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:259 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:261
msgid "Communicate with S60 phones." msgid "Communicate with S60 phones."
msgstr "Cyfathrebwch gyda ffoniau S60" msgstr "Cyfathrebwch gyda ffoniau S60"
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:278 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:280
msgid "Communicate with WebOS tablets." msgid "Communicate with WebOS tablets."
msgstr "Cyfathrebwch gyda tabledau WebOS" msgstr "Cyfathrebwch gyda tabledau WebOS"
@ -1074,7 +1076,7 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726 #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2726
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:102 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:103
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:568
@ -3105,7 +3107,7 @@ msgid "Set the publication date."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:539
msgid "Set the book timestamp (used by the date column in calibre)." msgid "Set the book timestamp (no longer used anywhere)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543
@ -3571,7 +3573,7 @@ msgid "Producer"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:934
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245
msgid "Comments" msgid "Comments"
@ -3728,8 +3730,8 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1434
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1246
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:946
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover" msgid "Cover"
msgstr "" msgstr ""
@ -3847,74 +3849,75 @@ msgstr ""
msgid "This is an Amazon Topaz book. It cannot be processed." msgid "This is an Amazon Topaz book. It cannot be processed."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:498 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:464
msgid "No details available" msgid "No details available"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
msgid "Title Page" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1248
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199
msgid "Table of Contents" msgid "Table of Contents"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1247
msgid "Title Page"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1249
msgid "Index" msgid "Index"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1250
msgid "Glossary" msgid "Glossary"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1263 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1251
msgid "Acknowledgements" msgid "Acknowledgements"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1264 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1252
msgid "Bibliography" msgid "Bibliography"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1265 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1253
msgid "Colophon" msgid "Colophon"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1266 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1254
msgid "Copyright" msgid "Copyright"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1267 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1255
msgid "Dedication" msgid "Dedication"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1268 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1256
msgid "Epigraph" msgid "Epigraph"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1269 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1257
msgid "Foreword" msgid "Foreword"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1270 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1258
msgid "List of Illustrations" msgid "List of Illustrations"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1271 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1259
msgid "List of Tables" msgid "List of Tables"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1272 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260
msgid "Notes" msgid "Notes"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1273 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261
msgid "Preface" msgid "Preface"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1274 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262
msgid "Main Text" msgid "Main Text"
msgstr "" msgstr ""
@ -4425,9 +4428,9 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:178
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:242
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91
msgid "No books selected" msgid "No books selected"
msgstr "" msgstr ""
@ -4855,7 +4858,7 @@ msgid "Create a catalog of the books in your calibre library"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:612 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:614
msgid "Cannot convert" msgid "Cannot convert"
msgstr "" msgstr ""
@ -5225,20 +5228,20 @@ msgid ""
"details\" to see which books." "details\" to see which books."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
msgid "Download complete" msgid "Download complete"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:880
msgid "Download log" msgid "Download log"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:149 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:147
msgid "Some books changed" msgid "Some books changed"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:148
msgid "" msgid ""
"The metadata for some books in your library has changed since you started " "The metadata for some books in your library has changed since you started "
"the download. If you proceed, some of those changes may be overwritten. " "the download. If you proceed, some of those changes may be overwritten. "
@ -5246,27 +5249,27 @@ msgid ""
"proceed?" "proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:179 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:177
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:243 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:241
msgid "Cannot edit metadata" msgid "Cannot edit metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:278
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:283 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:281
msgid "Cannot merge books" msgid "Cannot merge books"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:284 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:282
msgid "At least two books must be selected for merging" msgid "At least two books must be selected for merging"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:287 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:285
msgid "" msgid ""
"You are about to merge more than 5 books. Are you <b>sure</b> you want to " "You are about to merge more than 5 books. Are you <b>sure</b> you want to "
"proceed?" "proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:294
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be added to the " "Book formats and metadata from the selected books will be added to the "
@ -5275,7 +5278,7 @@ msgid ""
"changed.<br><br>Please confirm you want to proceed." "changed.<br><br>Please confirm you want to proceed."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:306
#, python-format #, python-format
msgid "" msgid ""
"Book formats from the selected books will be merged into the <b>first " "Book formats from the selected books will be merged into the <b>first "
@ -5288,7 +5291,7 @@ msgid ""
"calibre library.<br><br> Are you <b>sure</b> you want to proceed?" "calibre library.<br><br> Are you <b>sure</b> you want to proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:324 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:322
#, python-format #, python-format
msgid "" msgid ""
"Book formats and metadata from the selected books will be merged into the " "Book formats and metadata from the selected books will be merged into the "
@ -5300,15 +5303,15 @@ msgid ""
"Are you <b>sure</b> you want to proceed?" "Are you <b>sure</b> you want to proceed?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:499 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:497
msgid "Applying changed metadata" msgid "Applying changed metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:586
msgid "Some failures" msgid "Some failures"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:589 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:587
msgid "" msgid ""
"Failed to apply updated metadata for some books in your library. Click " "Failed to apply updated metadata for some books in your library. Click "
"\"Show Details\" to see details." "\"Show Details\" to see details."
@ -6003,17 +6006,17 @@ msgstr ""
msgid "Remove Cover" msgid "Remove Cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:358 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359
msgid "Double-click to open Book Details window" msgid "Double-click to open Book Details window"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:359 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295
msgid "Path" msgid "Path"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:360 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:361
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109
#, python-format #, python-format
msgid "Cover size: %(width)d x %(height)d" msgid "Cover size: %(width)d x %(height)d"
@ -7081,33 +7084,44 @@ msgid ""
"possible." "possible."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:101
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:186
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:916
msgid "Choose cover for " msgid "Choose cover for "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:193
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924
msgid "Cannot read" msgid "Cannot read"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:194
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:925
msgid "You do not have permission to read the file: " msgid "You do not have permission to read the file: "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:202
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:209
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:933
msgid "Error reading file" msgid "Error reading file"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:934
msgid "<p>There was an error reading from file: <br /><b>" msgid "<p>There was an error reading from file: <br /><b>"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:204 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:210
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:944
msgid " is not a valid picture" msgid " is not a valid picture"
msgstr "" msgstr ""
@ -7530,7 +7544,7 @@ msgid "&Remove"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:119
msgid "Load a listof expression from a previously saved file" msgid "Load a list of expressions from a previously saved file"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:120
@ -7538,7 +7552,7 @@ msgid "&Load"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:121
msgid "Save this list of expression so that you can re-use it easily" msgid "Save this list of expressions so that you can re-use it easily"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:122
@ -8877,7 +8891,7 @@ msgid "Author names cannot contain & characters."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:138 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137
msgid "Manage authors" msgid "Manage authors"
msgstr "" msgstr ""
@ -8965,27 +8979,32 @@ msgid "&Hide all jobs"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:296
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:51
msgid "&Copy to clipboard" msgid "&Copy to clipboard"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:56
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:292 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:299
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:54
msgid "Show &details" msgid "Show &details"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:293 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:300
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:55
msgid "Hide &details" msgid "Hide &details"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:61
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:304
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:59
msgid "Show detailed information about this error" msgid "Show detailed information about this error"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:318 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:325
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:78
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:588
msgid "Copied" msgid "Copied"
msgstr "" msgstr ""
@ -8996,10 +9015,11 @@ msgstr ""
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:937
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48
msgid "View log" msgid "View log"
msgstr "" msgstr ""
@ -9012,7 +9032,7 @@ msgid "Standard metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:906 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:915
msgid "Custom metadata" msgid "Custom metadata"
msgstr "" msgstr ""
@ -9193,7 +9213,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:561
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:562
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:191
msgid "Open Tag Editor" msgid "Open Tag Editor"
msgstr "" msgstr ""
@ -9337,13 +9357,13 @@ msgid "Set from &ebook file(s)"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:545 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:554
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:711 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:720
msgid "&Basic metadata" msgid "&Basic metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:552 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:561
msgid "&Custom metadata" msgid "&Custom metadata"
msgstr "" msgstr ""
@ -11412,7 +11432,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:875
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:439
msgid "Permission denied" msgid "Permission denied"
msgstr "" msgstr ""
@ -11646,7 +11666,7 @@ msgid "Bad database location %r. calibre will now quit."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:515 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:517
msgid "Corrupted database" msgid "Corrupted database"
msgstr "" msgstr ""
@ -11723,7 +11743,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:441 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440
#, python-format #, python-format
msgid "Could not open %s. Is it being used by another program?" msgid "Could not open %s. Is it being used by another program?"
msgstr "" msgstr ""
@ -11875,15 +11895,6 @@ msgstr ""
msgid "Could not change cover as the image is invalid." msgid "Could not change cover as the image is invalid."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
msgid "This book has no cover"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1017
#, python-format
msgid "Cover size: %(width)d x %(height)d pixels"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1142
msgid "Tags changed" msgid "Tags changed"
msgstr "" msgstr ""
@ -12022,11 +12033,11 @@ msgstr ""
msgid "Downloaded metadata fields" msgid "Downloaded metadata fields"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:31
msgid "Edit Metadata" msgid "Edit Metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:66 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:65
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:927
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219
@ -12034,21 +12045,21 @@ msgstr ""
msgid "Next" msgid "Next"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:69
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393
msgid "Previous" msgid "Previous"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:118
msgid "" msgid ""
"Automatically create the title sort entry based on the current title entry.\n" "Automatically create the title sort entry based on the current title entry.\n"
"Using this button to create title sort will change title sort from red to " "Using this button to create title sort will change title sort from red to "
"green." "green."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:129
msgid "" msgid ""
"Automatically create the author sort entry based on the current author " "Automatically create the author sort entry based on the current author "
"entry. Using this button to create author sort will change author sort from " "entry. Using this button to create author sort will change author sort from "
@ -12056,111 +12067,111 @@ msgid ""
"Click and hold on the button to see it." "Click and hold on the button to see it."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:135
msgid "Set author sort from author" msgid "Set author sort from author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136
msgid "Set author from author sort" msgid "Set author from author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:140 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:139
msgid "Copy author to author sort" msgid "Copy author to author sort"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:142 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:141
msgid "Copy author sort to author" msgid "Copy author sort to author"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:152
msgid "Swap the author and title" msgid "Swap the author and title"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:158
msgid "" msgid ""
"Manage authors. Use to rename authors and correct individual author's sort " "Manage authors. Use to rename authors and correct individual author's sort "
"values" "values"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:165
msgid "Clear series" msgid "Clear series"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:201 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:200
msgid "Clear Ids" msgid "Clear Ids"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:205 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:204
msgid "" msgid ""
"Paste the contents of the clipboard into the identifiers box prefixed with " "Paste the contents of the clipboard into the identifiers box prefixed with "
"isbn:" "isbn:"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:218 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:217
msgid "&Download metadata" msgid "&Download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:230 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:229
msgid "Configure download metadata" msgid "Configure download metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:234 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:233
msgid "Change how calibre downloads metadata" msgid "Change how calibre downloads metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:296 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:295
#, python-format #, python-format
msgid " [%(num)d of %(tot)d]" msgid " [%(num)d of %(tot)d]"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:326
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:333
msgid "Could not read cover" msgid "Could not read cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:328 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:327
#, python-format #, python-format
msgid "Could not read cover from %s format" msgid "Could not read cover from %s format"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334
#, python-format #, python-format
msgid "The cover in the %s format is invalid" msgid "The cover in the %s format is invalid"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:493 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:502
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:498 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:507
#, python-format #, python-format
msgid "Save changes and edit the metadata of %s" msgid "Save changes and edit the metadata of %s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:595 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:604
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:800 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:809
msgid "Change cover" msgid "Change cover"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:654 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:663
msgid "Co&mments" msgid "Co&mments"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:694 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:703
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:841 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:850
msgid "&Metadata" msgid "&Metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:699 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:708
msgid "&Cover and formats" msgid "&Cover and formats"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:769 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:778
msgid "C&ustom metadata" msgid "C&ustom metadata"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:781 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:790
msgid "&Comments" msgid "&Comments"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:847 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:856
msgid "Basic metadata" msgid "Basic metadata"
msgstr "" msgstr ""
@ -14152,7 +14163,7 @@ msgid ""
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:452 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:454
msgid "Failed to start content server" msgid "Failed to start content server"
msgstr "" msgstr ""
@ -15422,31 +15433,31 @@ msgid ""
"reconvert them?" "reconvert them?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205
msgid "&Donate to support calibre" msgid "&Donate to support calibre"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241
msgid "&Restore" msgid "&Restore"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246
msgid "&Eject connected device" msgid "&Eject connected device"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250
msgid "Quit calibre" msgid "Quit calibre"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263
msgid "Clear the current search" msgid "Clear the current search"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:363 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:365
msgid "Debug mode" msgid "Debug mode"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:364 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366
#, python-format #, python-format
msgid "" msgid ""
"You have started calibre in debug mode. After you quit calibre, the debug " "You have started calibre in debug mode. After you quit calibre, the debug "
@ -15454,11 +15465,11 @@ msgid ""
"automatically." "automatically."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:386
msgid "Failed to start Content Server" msgid "Failed to start Content Server"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:387
#, python-format #, python-format
msgid "" msgid ""
"Could not start the content server. Error:\n" "Could not start the content server. Error:\n"
@ -15466,7 +15477,7 @@ msgid ""
"%s" "%s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:516 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:518
#, python-format #, python-format
msgid "" msgid ""
"The library database at %s appears to be corrupted. Do you want calibre to " "The library database at %s appears to be corrupted. Do you want calibre to "
@ -15474,34 +15485,34 @@ msgid ""
"successful." "successful."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:600 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:602
msgid "Conversion Error" msgid "Conversion Error"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625
msgid "Recipe Disabled" msgid "Recipe Disabled"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:639 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:641
msgid "<b>Failed</b>" msgid "<b>Failed</b>"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:675
msgid "There are active jobs. Are you sure you want to quit?" msgid "There are active jobs. Are you sure you want to quit?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:676 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:678
msgid "" msgid ""
" is communicating with the device!<br>\n" " is communicating with the device!<br>\n"
" Quitting may cause corruption on the device.<br>\n" " Quitting may cause corruption on the device.<br>\n"
" Are you sure you want to quit?" " Are you sure you want to quit?"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:680 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:682
msgid "Active jobs" msgid "Active jobs"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:749 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:751
msgid "" msgid ""
"will keep running in the system tray. To close it, choose <b>Quit</b> in the " "will keep running in the system tray. To close it, choose <b>Quit</b> in the "
"context menu of the system tray." "context menu of the system tray."

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